|
Name: ハルキヨ ..ぴよぴよ(432ポイント)
Date: 2009/01/08(木) 00:53
No:26595
|
|
Title: C言語の問題で質問でまた質問です。
|
|
ちょっとつまったのでお願いします。
今日の日付(年月日)を入力し、自分の誕生日(年月日)を入力したら、年齢を示すプログラミングが作りたいです。
現在
#include<stdio.h>
int main(void)
{
int year,month,day,year2,month2,day2;
printf("今日の日付を入力してください。\n");
printf("年を入力して。 例(1989)\");
scanf("%d",&year);
printf("生まれ月を入力して。\n");
scanf("%d",&month);
printf("日を入力して。\n")
scanf("%d",&day);
のように一つずつ入力させるようになっているのですが、まとめて入力させるにはどうしたらいいのでしょうか?
今日の年月日を入力してください。←のように表示させるようにして
1987 1 1 のように入力できるようにしたいです。
お願いします。
214ポイント を手に入れた。
|
|
|
|
Name: SCI ..入門者(4,995ポイント)
Date: 2009/01/08(木) 00:58
No:26596
|
|
Title: Re:C言語の問題で質問でまた質問です。
|
|
scanf("%d %d %d", ...)でできませんか?
15ポイント を手に入れた。
|
|
|
|
|
Name: ハルキヨ ..ぴよぴよ(451ポイント)
Date: 2009/01/08(木) 01:01
No:26597
|
|
Title: Re:C言語の問題で質問でまた質問です。
|
|
>SVIさん
その場合 scanf("%d%d%d",&year,&month,&day);
の形でいいんでしょうか?
19ポイント を手に入れた。
|
|
|
|
|
Name: ハルキヨ ..ぴよぴよ(714ポイント)
Date: 2009/01/08(木) 01:13
No:26598
|
|
Title: Re:C言語の問題で質問でまた質問です。
|
|
#include<stdio.h>
int main(void)
{
int year,month,day,year2,month2,day2,old;
printf("今日の日付を入力してください。\n");
scanf("%d%d%d",&year,&month,&day);
printf("誕生日を入力してください。\n");
scanf("%d%d%d",&year2,&month2,&day2);
old=year-year2;←←ここの計算部分がよくわかりません。
printf("%d歳です\n",old);
return 0;
}
ここまでできていますが下記のコンパイルエラーがでます。
6-33.c: In function ‘main’:
6-33.c:4: error: stray ‘\343’ in program
6-33.c:4: error: stray ‘\200’ in program
6-33.c:4: error: stray ‘\200’ in program
どなたかお願いします。
263ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..初心者(5,038ポイント)
Date: 2009/01/08(木) 01:14
No:26599
|
|
Title: Re:C言語の問題で質問でまた質問です。
|
|
スペースを入れなければなりませんよ。
というか、コンパイルして動作確認してみてください。
私、今はちょっとテストできないので・・・
43ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..初心者(5,095ポイント)
Date: 2009/01/08(木) 01:17
No:26600
|
|
Title: Re:C言語の問題で質問でまた質問です。
|
|
なんか無効な文字とか入ってません?
計算に関してはC言語に無関係なので、自分で方程式を解いてください。
57ポイント を手に入れた。
|
|
|
|
|
Name: ハルキヨ ..ぴよぴよ(732ポイント)
Date: 2009/01/08(木) 21:52
No:26645
| 解決!
|
Title: Re:C言語の問題で質問でまた質問です。
|
|
SCIさん ありがとうございました。
解くことができました。
18ポイント を手に入れた。
|
|
|
|
Name: ざこ ..中級者(12,095ポイント)
Date: 2009/01/07(水) 17:31
No:26580
|
|
Title: 開発環境
|
|
今仕事場でVC++6.0を使ってますが家でも同じ者を使って勉強したいということもあり、
CDをヤフオク辺りで買おうと思ってるのですがStandardEditionとProfessionalEditionの違いがわかりません。
Professionalの方はMFC搭載!とか書いてて値段がすごく高いです。standardの方にはMFCついてないのでしょうか?
欲しい環境は
VC++
MFCが使える
の2点なのですがVC++6.0に限らずオススメ何かありませんか?
151ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(139,981ポイント)
Date: 2009/01/07(水) 17:40
No:26581
|
|
Title: Re:開発環境
|
|
残念ながら、StandardEditionにはMFCはついてません。
会社のソフトを使用させてはもらえないのですか?
たしか、ライセンス数の限度は無かったと思いますが…?
54ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(78,866ポイント)
Date: 2009/01/07(水) 17:57
No:26584
|
|
Title: Re:開発環境
|
|
> これは学生のうちに購入しといた方がいいとかそういう・・。
私は学生ではありませんが、アカデミック版が普通に買えてしまいます。
一応教員だからですが...。
転売する気はありませんが。
ところで、CDの持ち出しさえできれば職場のものを自宅でも使えるはずです。
Visual Studioのライセンスは、マシンごとではなくユーザーごとですので。
17ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(140,029ポイント)
Date: 2009/01/07(水) 17:58
No:26585
|
|
Title: Re:開発環境
|
|
ネットオークションを見ていると、アカデミックの未開封の物が結構ありますねぇ…。
これって、やっぱり、そういう事なんでしょうね(笑)
48ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(22,579ポイント)
Date: 2009/01/07(水) 19:50
No:26588
|
|
Title: Re:開発環境
|
|
Visual C++ 6.0 Standard Edition持ってますがMFCは使えますよ
MFCが使えないのは2005や2008の無料のやつだけだと思います
48ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..中級者(12,136ポイント)
Date: 2009/01/08(木) 16:17
No:26625
| 解決!
|
Title: Re:開発環境
|
|
皆様ありがとうございました。会社の方にいってもらえないようでしたらstandardの方購入検討してみようと思います。
41ポイント を手に入れた。
|
|
|
|
|
Name: たいちう ..上級者(19,953ポイント)
Date: 2009/01/08(木) 19:58
No:26640
|
|
Title: Re:開発環境
|
|
> 欲しい環境は
> VC++
> MFCが使える
> の2点なのですがVC++6.0に限らずオススメ何かありませんか?
VC6にこだわらないならば、VS2008のStandard Editionがお勧めです。
最新ですから今後も使い続けやすいでしょう。
VC6は現代の日本語と比較した旧仮名遣いのようなものです。
昔の名作を読むためには旧仮名遣いを勉強する必要もありますが、
今、執筆するのには現代の仮名遣いでしょ。
# ここまで極端ではなく、未だにVC6で新規開発されているケースもあるでしょうけど。
# 修正や改造の場合には、もっと多いでしょう。
> http://msdn.microsoft.com/ja-jp/library/cc438387(VS.71).aspx
> この辺見てみると使えそうな気がしますが・・、何か誤解してますかね?
VC6のStandard EditionでMFCが使えるというのは、既にtoyoさんが書いている通り。
使えないと思ったのは、ざこさんの勘違いでしょう。
管理人さん紹介のページは、Visual C++ .NET Standard Editionの機能紹介で、
VC2003のものです。私の知るVC6以降の全てのStandard EditionでMFCが使えますので、
同じことですが。
197ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(38,884ポイント)
Date: 2009/01/08(木) 20:02
No:26641
|
|
Title: Re:開発環境
|
|
私の記憶違いかもしれませんがVC6のStandard Editionには最適化コンパイラがなかった気がする。
勉強用ということであればなくても問題ないですが(~-~;
8ポイント を落としてしまった。
|
|
|
|
|
Name: toyo ..上級者(22,700ポイント)
Date: 2009/01/08(木) 20:28
No:26642
|
|
Title: Re:開発環境
|
|
最適化は気にしたこと無かったので確認してみました
VC++6.0だと最適化の設定が選択できなくなってますね
Debugだと /Od(最適化なし)
Releaseだと /O2(実行速度)
で固定されてます
手動でコンパイルオプションを /O1や /Oxに変更することは可能なようですが /Oa /Ow /Og /Oiは無効なオプションといわれました。
139ポイント を手に入れた。
|
|
|
|
Name: きらりん ..入門者(3,173ポイント)
Date: 2009/01/07(水) 01:06
No:26506
|
|
Title: 【相談?雑談?質問?】格闘ゲームについて
|
|
今作っているゲームもほぼ完成に近づいてきていて、次は何作ろうーっと思ってた所で、格ゲーってどうなってるんだろーと思いましてちょっと書き込んでみました。
当たり判定やモーション操作とかダメージとかはなんとなく想像つくんですが、AIだけがまったく想像つかないんですよね><
あれってやっぱりまだまだ僕みたいな初心者じゃできないですかね・・・。
何故いきなり格ゲーかというと東方緋想天やっててこんなん作ってみたいなーっ思ったのがきっかけだったり・・・w
ぐぐってもそれらしいページはでてこなくて、本は二冊ほどAIについて書かれてる本があったんですけど目次みた感じちんぷんかんぷんでした\(^o^)/
↓
ゲーム開発者のためのAI入門
実践で学ぶ ゲームAIプログラミング
348ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(139,044ポイント)
Date: 2009/01/07(水) 08:17
No:26514
|
|
Title: Re:【相談?雑談?質問?】格闘ゲームについて
|
|
一番手っ取り早いのは、プレイヤーの行動に完璧に対応する(こちらがジャンプしたら、確実に対空技で迎撃してくる…みたいな)最強のCPUを作成しておいて、強さのレベルに応じて迎撃率やガード率、ダメージ量を変更する方法でしょうか?
68ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(38,284ポイント)
Date: 2009/01/07(水) 10:53
No:26515
|
|
Title: Re:【相談?雑談?質問?】格闘ゲームについて
|
|
最初からすごいものを作ろうとせず少しずつ作っていけばいいと思います。
格ゲーの場合は簡単なほうで、パターンごとにどういった対応を取るかを列挙していくだけでもそれらしい動きになります。
例えばCOMがリュウのようなキャラの場合
1.PCとの距離がある程度離れている
1−1.攻撃されていない(PCが波動拳のような遠隔攻撃していない)
1−1−1.50%の確率で波動拳
1−1−2.20%の確率で前に進む
1−1−3.20%の確率で竜巻旋風脚
1−1−4.10%の確率でなにもしない
1−2.攻撃されている
1−2−1.60%の確率でガード
1−2−2.30%の確率で何もしない(攻撃を受ける)
1−2−3.10%の確率で波動拳を出して打ち消す
てな感じで、こういう状況ではこういったことをするというのを考えていけば良いと思います。
それぞれの確率を変動させることでCOMの強さを変化しているように見せることもできます。
2倍のポイントを手に入れた! 666ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(139,106ポイント)
Date: 2009/01/07(水) 11:21
No:26516
|
|
Title: Re:【相談?雑談?質問?】格闘ゲームについて
|
|
絶対的に強い、もしくは弱いってのは、割と簡単なんですよね。
「適度に強い」ってのを実現するのはなかなか骨が折れますよね(^_^;)
62ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(945,758ポイント)
Date: 2009/01/07(水) 17:29
No:26579
|
|
Title: Re:【相談?雑談?質問?】格闘ゲームについて
|
|
もう言いたい事が言われている・・w
「試行錯誤してみる」これって結構重要なことなんですよね。
既存の方法論を勉強する事はもちろん素晴らしいことなんですが、
まず自分でどうにかならないか試行錯誤してみるんです。
自分ではこれ以上考えられない!って位までみっちりAIを作り上げて、
それから本を読んだりしたら更にスキルアップすると思います。
やっぱプログラムの面白さって自分で考えたアルゴリズムで実装して、
実際に敵が思い通りに動いてくれたりした時、感じるものだと思うんですよね。
何を面白いと感じるかは人それぞれだと思うのですが、
私なんかは、どうやったらAIがうまく動くか、ずっと考え続けるのも楽しみです。
それに、試行錯誤で導き出した方法って完全に自分のものとして習得できるんですよね。
一方で、人から聞いた方法や本で読んだアルゴリズムはすぐに忘れてしまいがちです。
その上、試行錯誤で導き出した方法は、自分なりに更なる応用が容易ですが、聞いた方法を応用するのは結構難しいです。
もし試行錯誤しているうちに一般的に最適だと言われているアルゴリズムを思いつくことが出来れば、これ以上素晴らしい事は無いですし、
その思いついた方法が少々非効率だったとしても、自分なりに修正を加えていって、自分なりの方法として確立するのもいいと思います。
やっぱ自分で考えた方法で実装したいですもんね。
責任ある立場やプロの現場ではそんなこと言っていられないかもしれませんが、趣味ならそれでいい気がします。
・・ということでMistさんが仰っているような試行錯誤でAIをまず作っていってみてもいいのではないかな?と思います。
敵の難易度についてはバグさんが仰っているように、「最強」を作ってから、最強となるパターンが発動する確率を下げていけばいいだけだと思います。
例えば、空中飛び道具が無い状態で飛び込んできた時に必ずショウリュウケンが発動すれば最強だと思いますが、これが発動する確率を下げていけば段々COMとして弱くなりますよね。
538ポイント を手に入れた。
|
|
|
|
|
Name: きらりん ..入門者(3,447ポイント)
Date: 2009/01/08(木) 02:01
No:26604
| 解決!
|
Title: Re:【相談?雑談?質問?】格闘ゲームについて
|
|
>>バグ様
最初よくわからなかったんですが、Mist様のを読んでからバグ様のレスを読んですごく参考になりましたw
有難うございます
>>最強のCPUを作成
これはできる気がしませんがとりあえず弱いのなら作れる気がしますw
>>Mist様
参考になりました!
いままで何からやりはじめたらいいのかわからなかったのが、頭の中で色々とやりたいことが山のようにでてきました・・・w(こーいう時が一番楽しいです・・・w)
有難うございました
>>Dixq (管理人)様
そうですね・・・。最近ちょっと先を急ぎ過ぎて基本のことを忘れていた気がします;
ただ、まだ初心者過ぎるせいなのか、色んなプログラムが魔法のように感じるですよね・・・w
今回のAIに関しても言われてみれば「あぁそうか!」って感じでわかったんですが、自分で考えてるうちは「あれは中で何が起こっているんだ・・・」リバーシのアルゴリズムみたいに変な計算が!?みたいなふうに変な方向に考えてしまってました;
もうちょっと想像力を養う必要があるのかもしれません;
このまま足がかりがないままだと格ゲーはあきらめかけてたので;w;
274ポイント を手に入れた。
|
|
|
|
Name: ハルキヨ ..ぴよぴよ(142ポイント)
Date: 2009/01/07(水) 13:05
No:26520
|
|
Title: C言語の宿題で質問です。初心者です
|
|
はじめまして。 いきなり質問すいません。
問.父親の年齢はm才で、自分の年齢はn才だったとします。父親の年齢が自分の年齢の2倍になるのは何年後ですか?
・・・というプログラムを作る問題です。
実行例
父親の年齢は:<数値の入力>
自分の年齢は:<数値の入力>
<計算結果>年後には父親の年齢は<計算結果>歳、自分は<計算結果>歳です。
お願いします。
142ポイント を手に入れた。
|
|
|
|
Name: ハルキヨ ..ぴよぴよ(169ポイント)
Date: 2009/01/07(水) 13:44
No:26529
|
|
Title: Re:C言語の宿題で質問です。初心者です。
|
|
すいません、これは丸投げでしたね。
正直プログラミングにまったく手も足もでない状況です。
それと、C言語です。
#include<stdio.h>
int main(void)
{
int m,n;
はじまりはこうしたらいいのかな?という状況です。
プログラムを完成させることが目的です。
27ポイント を手に入れた。
|
|
|
|
|
Name: 組木紙織 ..熟練のプログラマー(68,350ポイント)
Date: 2009/01/07(水) 13:52
No:26533
|
|
Title: Re:C言語の宿題で質問です。初心者です
|
|
日本語で答を出すまでの手順を書いてみてください。
プログラムを書くためには解き方が分かってないといけませんよね。
57ポイント を落としてしまった。
|
|
|
|
|
Name: SCI ..入門者(4,805ポイント)
Date: 2009/01/07(水) 13:53
No:26534
|
|
Title: Re:C言語の宿題で質問です。初心者です
|
|
この問題の場合「2倍になるまでの年数」を求めればいいので方程式は中学生レベルですね。
そして、「2倍になる年」は双方の年齢が決まると一意に決まるはずです。m,nが決まると年の差|m-n|は常に一定値をとるので・・・
つまり、2倍になるまでの年数はmとnの関数f(m,n)として一意的に表すことができます。
143ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(22,294ポイント)
Date: 2009/01/07(水) 13:55
No:26535
|
|
Title: Re:C言語の宿題で質問です。初心者です。
|
|
答えなら
方程式
(m + x) = 2 * (n + x)
を解けばいいです
数値の入力がわからないとか結果の出力がわからないとかならその旨を具体的に質問したほうがいいです
58ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..中級者(11,879ポイント)
Date: 2009/01/07(水) 14:14
No:26541
|
|
Title: Re:C言語の宿題で質問です。初心者です。
|
|
#include <stdio.h>
int main(void)
{
int fa,me,year;//faは父親の年齢をいれる変数。meは自分の、yearは何年後に条件を満たすかの年数を入れる変数。
printf("父親の年齢を入力せよ\n");
scanf("%d",&fa);
printf("自分の年齢を入力せよ\n");
scanf("%d",&me);
year=fa-2*me;
printf("%d後に条件を満たす",year);
return 0;
}
希望通りの出力とは若干異なりますが自分で直してください。
後父親の年齢が自分の年齢の2倍以上じゃなければyearが-の値になります。
後両者とも年齢は0ではないという条件もいれておいたほうがいいかもしれませんね。
後は工夫してください。
301ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(139,635ポイント)
Date: 2009/01/07(水) 14:17
No:26543
|
|
Title: Re:C言語の宿題で質問です。初心者です。
|
|
>>ざこさん
父親も自分も同じように歳を重ねていかないと駄目なんじゃないですか?(^_^;)
そのソースだと、自分しか年を取らないですよね?
63ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..中級者(11,939ポイント)
Date: 2009/01/07(水) 14:20
No:26545
|
|
Title: Re:C言語の宿題で質問です。初心者です。
|
|
fa+year=2*(me+year);
と変形して
year=fa-2*meにしたんですが間違ってます?
faに24
meに9入れたら
yearが6になってたんで合ってると思うのですが。
31ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(4,837ポイント)
Date: 2009/01/07(水) 14:29
No:26547
|
|
Title: Re:C言語の宿題で質問です。初心者です。
|
|
合っていますよ。
定義域・値域がともに整数値である二変数関数です。
32ポイント を手に入れた。
|
|
|
|
|
Name: ハルキヨ ..ぴよぴよ(218ポイント)
Date: 2009/01/07(水) 23:06
No:26593
| 解決!
|
Title: Re:C言語の宿題で質問です。初心者です。
|
|
みなさんありがとうございました。
これからプログラミングを初歩から須少しずつ学びたいと思います。
またお邪魔います。 失礼します。
49ポイント を手に入れた。
|
|
|
|
Name: yu ..初心者(5,553ポイント)
Date: 2009/01/06(火) 20:45
No:26494
|
|
Title: レーザーの消し方
|
|
いつもお世話になっています。
毎度すみません;
また質問させてください。
今、動くレーザーを作っていますが、(速さと角度を持っただけです
レーザーを消すときの処理がうまくいかなくて困っています。
ボムを打って画面中央からどんどん外側へ消したいのですが、どうもうまくいきません。
東方を見てみるとレーザー真ん中が消えるとレーザーが分裂したりもしています。
最終的には東方のようにレーザーを消したいです。
レーザーの表示と自機との当たり判定は付けることができたのですが・・・
どなたかアドバイスをしていただけたらありがたいです。
東方のレーザー画像と自分のソースコードを添付しましたので、見ていただけたら幸いです。
管理者様の龍神録を軸にして作成しています。
添付したソースを見てもらえばわかると思いますが。
かなり雑で汚いです。
そして無駄なことをしていると思います。(特に計算部
近くにプログラムできる人がいたらなぁ〜・・・
439ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(943,718ポイント)
Date: 2009/01/07(水) 16:48
No:26569
|
|
Title: Re:レーザーの消し方
|
|
日本語理解力が乏しいので、言いたい事が完全に理解出来ていないかもしれません、ごめんなさい・・。
ちと、下を見てみて下さい。
龍神録ではレーザーを2種類の方法で実装しています。
1種類目はレーザーを作ってみようの章で紹介しているので、わかり易いかもしれませんが、
もう一種類の方は明確に紹介していなかったかもしれません。
レーザーって私が考える範囲では単純に考えると2種類の実装の仕方が考えられます。
1. 大きな一つのレーザーとしてレーザーを扱う方法
2. 小さなレーザーがたくさん集まり、一つの大きなレーザーを作り上げる方法
東方や、その他の類似品のコードを見たりしたわけじゃないのでわかりませんが、
どうもこの2種類で実装されている気がします。
マスタースパークや極太レーザーなんかは方法1、敵が撃ってくるたくさんの細いレーザーや被弾した部分が途切れるようなレーザーは方法2で実装してある気がします。
1は館で紹介してあるのでいいですよね。
2は、例えばこんな感じです。
http://dixq.net/zip/bbs/for_yu.zip
50章のプログラムを改良したものなので、龍神録プログラミングの館で配布しているプロジェクトに入れて下さい。(画像データとかは入っていませんので)
ボスが細いレーザーを連続で撃ってくると思うので、被弾してみて下さい。するとその部分が途切れると思います。
(注:レーザーの当たり判定範囲を考えてないのですり抜ける場合あり)
これはどうなっているのかと言うと、img/bulletにあるb2の細長い弾を小さなレーザーの1つだとみなしているのです。
この小さなレーザーを連続で同じ方向に打ち続ければ繋がって見え、レーザーのように見えるということです。
しかし、単純に弾を重ねて描画してしまったのでは継ぎ目が見えます。
そこは光を表現する為に使う「加算ブレンド」で誤魔化します。
この弾幕はboss_shot_bulletH012関数で表現しているので、のぞいてみてください。
boss_shot.bullet[k].eff = 1;//加算ブレンドオン
こいつがその役割をします。
加算ブレンドオンにしてある弾は描画部で自動的に加算ブレンドで描画されるようにしてあります。
加算ブレンドって何?と思ったかもしれませんが、要は光の足し算です。
色はRBGで表し、0〜255で表してプログラムしていると思うのでわかると思いますが、
色を足すと白に近づきますよね。つまりレーザーの重なった部分はうまく白になり、
レーザーが繋がって見えるわけです。
小さな弾の集合だから、その部分の弾を消せば分離する・・というか元々たくさん分離したものなんですけどね。
これで解決出来ないでしょうか?
826ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(944,512ポイント)
Date: 2009/01/07(水) 16:59
No:26571
|
|
Title: Re:レーザーの消し方
|
|
ボムを使ったとき一定範囲だけ消すイメージサンプル作ってみました。
・・・と言っても、実際にここに実装してはダメなので、あくまでサンプルとしてご覧下さい。
以下の青の部分を追加してみて下さい。
ショットを撃つと、その瞬間敵の周辺のレーザーが消えます。
//yuさん用レーザー
void boss_shot_bulletH012(){
int i,k,t=boss_shot.cnt%200;
if(t<140 && t%5==0){
for(i=0;i<10;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 2;//弾の種類
boss_shot.bullet[k].angle = PI2/10*i;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5;//スピード
boss_shot.bullet[k].eff = 1;//加算ブレンドオン
se_flag[0]=1;
}
}
}
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[i].flag>0){//登録されてる弾なら
if(CheckStatePad(configpad.shot)==1){//ショットボタンが押された瞬間なら
//ボスの位置-100〜100の範囲を消す
if(boss.x-100<boss_shot.bullet[i].x && boss_shot.bullet[i].x<boss.x+100 &&
boss.y-100<boss_shot.bullet[i].y && boss_shot.bullet[i].y<boss.y+100)
{
boss_shot.bullet[i].flag=0;
}
}
}
}
}
794ポイント を手に入れた。
|
|
|
|
|
Name: yu ..初心者(5,792ポイント)
Date: 2009/01/07(水) 19:04
No:26587
| 解決!
|
Title: Re:レーザーの消し方
|
|
返信ありがとうございます。
加算ブレンド・・・すっかり忘れていました。
このやり方は考えたのですが、画像の重なりが一部分見えてしまうな。と思ってやめました。
これなら途切れるレーザーも作れますね。
しかし、レーザーが太くなると当たり判定が少し変になりそうですね・・・
横幅=円の直径=当たり判定になるのでレーザーの先の方が丸くなってしまいそうです。
それと、これは別にあまり気になりませんが、
レーザーを出す位置の後ろの方にもレーザーが見えてしまうのではないでしょうか。
しかし、龍神録plusをやっているとレーザーに全く違和感がありません。
当たり判定も正確でした。
自分も弾を重ねてレーザーを作ることにします。
わざわざ自分のためにサンプルまで作っていただき本当にありがとうございました。m(_ _)m
239ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(946,512ポイント)
Date: 2009/01/07(水) 19:51
No:26589
|
|
Title: Re:レーザーの消し方
|
|
当たり判定範囲について、先端が丸くなっては変です?
多分少々内部の形がおかしくても気にならないような気がしますが、
長方形の方がよければ長方形と円で判定すればいいと思います。
>レーザーを出す位置の後ろの方にもレーザーが見えてしまうのではないでしょうか。
そうなります。
でも、そんなに気にならないんですよね。
もし気になるのなら、ボスの位置から発射するのではなく、ボスの位置から少し進行方向に進んだ位置を初期位置にしたらいいと思います。
この辺は進ませすぎてボスの位置が安置にならないように気をつければ問題ないかと。
後、レーザーを連続発射する時は当たり判定範囲に気をつけて下さい。
今レーザー一本の当たり判定の長さが50だとします。
スピード5で、10カウントに1回ずつ連続発射すると、当たり判定に隙間無く連続になりますが、
例えば12カウントに1回ずつ連続発射すると、見た目つながってみえても、
当たり判定の無い部分が継ぎ目に出来てしまう可能性があります。
それから、龍神録はレーザーが進行方向に動くこと、キャラがレーザーを横切ることは想定していますが、
レーザー自体が回転することは想定していません。
進行方向であればどんなに早くレーザーが動いても、軌跡からあたったかどうか判定します、
また、キャラクタが動いた軌跡からも当たり判定を計算します。
しかし進行方向以外に回転したりすると、当たらない可能性があります。
現に龍神録のオマケ弾幕、芸術〜の弾幕はレーザーを回転させているため、キャラが止まっていて、回転したレーザーが上を回転して移動すると、時々すり抜けることがあります。
赤がレーザーだとして矢印の方向に回転しているとします。この時、緑の場所にいると当たらないってことです。
もしレーザーを回転させたいならこの辺をうまく処理する必要がありそうです。
702ポイント を手に入れた。
|
|
|
|
|
Name: yu ..初心者(6,014ポイント)
Date: 2009/01/07(水) 20:50
No:26590
|
|
Title: Re:レーザーの消し方
|
|
>当たり判定範囲について、先端が丸くなっては変です?
すみません。orz
勘違いです;
>もしレーザーを回転させたいならこの辺をうまく処理する必要がありそうです。
回転は・・・自分では無理そうなので、やめておきます。
本当に数学が苦手で、習いたての三角関数で精一杯です。
やっぱりいきなりstg作るのは無謀だったかな・・・
小さいゲームから取り掛かった方が良かったかもしれません。
本当にstgの質問ばっかりしてごめんなさい。
長方形と円の当たり判定なんて全く分かりませんでしたw
222ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..伝説なるハッカー(947,218ポイント)
Date: 2009/01/07(水) 21:10
No:26591
|
|
Title: Re:レーザーの消し方
|
|
まだ一度もゲームを作り上げた事がないなら小さいゲームを一つ作り上げてみるっていうものいい経験かもしれません。
サンプルプログラミングの館とか参考にしてもらってもいいと思います。
最初はジャンケン作るだけでも案外大変だと思います。
まずコンソールでジャンケンできるようにしてから、次にDXライブラリで・・。みたいな流れがいいでしょうか?
>本当に数学が苦手で
私も大の苦手です!
数学の難しい事はよくわかりませんw
でも、「解る事で実装する」これを積み重ねていけば案外誤魔化せる事多いんですよ。
長方形と円がわからなければ、計算は面倒になりますがいっぱい円並べてもいいわけですし、
ベジェ曲線とか、物理的な制御を使った運動とか使わなくても、適当に作った計算式でそれっぽくなるように
試行錯誤してもいいわけですし、
または、サインって何?コサインって何?って状態だとしても、
「斜辺にサインをかけたらy成分が出る」って事だけ解ってたら計算出来るわけですから、
大事なのは知識より知恵ですよ!
例えばテレビを見るとき、基盤の構造や電子の流れまで全て解っている人はごく一部だと思います。
でもそんなこと全く知らなくてもテレビはみんな操作できます。
「中身の理論」を知らなくても「使い方」を知ってるからです。
小学生でもシューティング作ってる人知ってます。
サインやコサインの理屈は知らないらしいですが、使い方を知っているから作れるらしいです。
シューティングを作る為に必要な数学的知識なんてごくごく僅かだと思います。
後は関数の「使い方」を知る事で中身の理論知らなくても誤魔化せると思います。
最後に、好きこそものの上手なれ、これは本当にそのとおりだと思います。
・・ということで、今現在の知識量は問題じゃなく、
自分の「作りたい!」と思うゲームを作るのが一番だと思いますよ☆
706ポイント を手に入れた。
|
|
|
|
Name: ざこ ..中級者(11,574ポイント)
Date: 2009/01/07(水) 13:22
No:26524
|
|
Title: C++
|
|
今までC言語ばかり勉強してきましたがC++も勉強しようと一番簡単な所から始めたのですが何故かエラーになります。
#include <iostream>
#include <string>
using namespace std;
class Neko
{
private:
string name;
public:
Neko(string s){
name = s;
}
void naku(){
cout<<"にゃあ。俺様は"<<name<<"だ。"<<endl;
}
};
int main()
{
Neko dora("ボス"); //「ボス」というの名前を持ったdoraが生成される
cout<<"あなたの名づけた猫がメモリ上に生成されました。"<<endl;
cout<<"猫が鳴きます。"<<endl;
dora.naku();
}
エラーは cout<<"にゃあ。俺様は"<<name<<"だ。"<<endl;の所で
fatal errorC2679 二項演算子 '<<' class std::basic string<char,struct std::char_traits<char>,class std::allocator<char> です。
name の所が悪いっぽいんですが原因がわかりません。
似たような構文使ってもこんなエラーはでませんでした。原因と対策を教えて下さい。
VC++6.0のコンソールアプリケーションを使ってます。
126ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(139,186ポイント)
Date: 2009/01/07(水) 13:31
No:26526
|
|
Title: Re:C++
|
|
同じ環境(VC++6.0)で同じソース(コピペしただけ)で実行してみましたが、エラーは出ませんよ?
なんというエラーが出ていますか?(mainの戻り値がないのは、とりあえず無視しましたが…)
80ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(139,296ポイント)
Date: 2009/01/07(水) 13:44
No:26528
|
|
Title: Re:C++
|
|
試しに、Nekoクラスを下記のように変更してみてもらえますか?
class Neko
{
private:
string name;
public:
Neko(string s)
{
name = s;
}
Neko(char* s)
{
name = s;
}
void naku()
{
cout << "にゃあ。俺様は " << name << "だ。" << endl;
}
};
110ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(139,439ポイント)
Date: 2009/01/07(水) 13:59
No:26536
|
|
Title: Re:C++
|
|
Nekoクラスのメンバ関数のnakuを下記のように書き換えてみてください。
これだと、どこでエラーが出ますか?
void naku()
{
cout << "にゃあ。俺様は ";
cout << name;
cout << "だ。";
cout << end;
}
108ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(139,463ポイント)
Date: 2009/01/07(水) 14:03
No:26538
|
|
Title: Re:C++
|
|
うわ、間違ってた…(^_^;)
cout << endl;
ですね。一文字抜けてましたm(_ _)m
24ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(139,572ポイント)
Date: 2009/01/07(水) 14:14
No:26542
|
|
Title: Re:C++
|
|
ということは、std::coutでオーバーロードされている<<演算子に、std::stringを表示するためのものが用意されていないって事かな?下記ならどうですか?多分、これでいけると思うんだけど…
void naku()
{
cout << "にゃあ。俺様は ";
cout << name.c_str();
cout << "だ。";
cout << endl;
}
109ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..中級者(11,908ポイント)
Date: 2009/01/07(水) 14:18
No:26544
|
|
Title: Re:C++
|
|
おおいけました。お手数ですがname.c_str();というのがどこから出てきたのか教えて下さい。
29ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(139,922ポイント)
Date: 2009/01/07(水) 14:32
No:26549
|
|
Title: Re:C++
|
|
このサンプルソースのNekoクラスの中にnakuというメンバ関数があるように、std::stringクラスにもメンバ関数が存在します。
c_strというメンバ関数は、std::stringの中の文字列の終端に'\0'を足した、編集不可能な文字列へのポインタを返します。
つまり、今回のようにstd::stringクラスのままでは駄目だけれど、const char*のような型であれば問題ない場合にc_strを使って従来の(C言語の際に使用していたような)文字列と同じような物に変換やればいいわけです。
しかし、同じVC++6.0で動作が違うのは気になりますね。ひょっとしたら、サービスパックが入ってない(もしくは最新ではない)のかもしれませんね。
287ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(10,487ポイント)
Date: 2009/01/07(水) 15:45
No:26559
|
|
Title: Re:C++
|
|
私もVC++6.0 使ってみましたがエラーは発生しませんでしたね
インストールに失敗しているのではないでしょうか?
36ポイント を手に入れた。
|
|
|
|
Name: mi ..初心者(6,181ポイント)
Date: 2009/01/07(水) 15:16
No:26553
|
|
Title: ファイル処理について
|
|
こんにちは、はじめまして。
ファイル処理で少し躓いているので質問させて下さい。
FileReadというファイルを読み込む関数があるのですが、
グローバル変数としてchar FileAddress[40]と宣言し、
その変数を使ってFileReadで処理をさせたいです。
例えば、
char FileAddress[40];
void Initialize(void)
{
strcpy(FileAddress, "test.txt");
}
void FileRead(void)
{
FILE *fp;
fp = fopen(FileAddress, "r");
}
というようにしたいのですが、
Microsoft Visual Studio C ランタイム ライブラリは致命的なエラーを検出しました。
と出てしまいます。
ですが、
char FileAddress[40];
void FileRead(void)
{
FILE *fp;
strcpy(FileRead, "test.txt");
fp = fopen(FileAddress, "r");
}
この場合、エラーは出ず、普通に動作します。
ヘッダはstring.hとstdio.hをインクルードしていますし、
関数の呼び出し順も間違っていないと思います。
原因がさっぱりわかりません;
コンパイラはVC++ 2008EEです。
397ポイント を手に入れた。
|
|
|
|
Name: mi ..初心者(6,204ポイント)
Date: 2009/01/07(水) 15:18
No:26554
|
|
Title: Re:ファイル処理について
|
|
タグの使い方が違ったのかな;
見づらくなってしまってすいません。
23ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(46,976ポイント)
Date: 2009/01/07(水) 15:36
No:26556
|
|
Title: Re:ファイル処理について
|
|
まず、
void FileRead(void)
でちゃんとfcloseしていますか?
fpはFileReadのみで有効です。
以下はvisual c++,vistaで動作確認済みです
#include<stdio.h>
#include<string.h>
char arr[100];
void copy(void)
{
strcpy(arr,"test.txt");
}
void FileRead(void)
{
char str[100];
FILE *fp;
fp = fopen(arr, "r");
if(fp)
{
fscanf(fp,"%s",str);
printf("%s",str);
fclose(fp);
}
else
printf("fread_error");
}
int main(void)
{
copy();
FileRead();
return 0;
}
赤:追加
244ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(10,451ポイント)
Date: 2009/01/07(水) 15:38
No:26558
|
|
Title: Re:ファイル処理について
|
|
#include <string.h>
char FileAddress[40];
void Initialize(void)
{
// strcpy(FileAddress, "test.txt");
strcpy_s(FileAddress, "test.txt");
}
void FileRead(void)
{
FILE *fp;
// fp = fopen( FileAddress, "r" );
fopen_s( &fp, FileAddress, "r");
if( fp )
fclose( fp );
}
int _tmain(int argc, _TCHAR* argv[])
{
Initialize();
FileRead();
return 0;
}
こうでしょうか?
エラーが発生しませんでしたが
デバッカで一行ずつ実行されてみてはいかがでしょうか?
Visual C++ 2008 EE
162ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(47,188ポイント)
Date: 2009/01/07(水) 15:45
No:26560
|
|
Title: Re:ファイル処理について
|
|
あ、fcloseと書かなくても動作しますね^^;
んん〜確かに、dicさんの言うように、ブレイクポイント立てて動作を見るのが
一番はやく解決できると思いますが。。
あと、fopenの読み込みエラーは書いておいたほうがよいと思います。
(自分のにも書いていませんので、追加しておきます。^^;)
2倍のポイントを手に入れた! 212ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(4,980ポイント)
Date: 2009/01/07(水) 15:50
No:26561
|
|
Title: Re:ファイル処理について
|
|
#include <stdio.h>
char FileAddress[40];
void Initialize(void)
{
strcpy(FileAddress, "test.txt");
}
void FileRead(void)
{
FILE *fp;
fp = fopen(FileAddress, "r");
}
int main(void)
{
Initialize();
FileRead();
return 0;
}
これ、動きましたよ?BCCですが・・・
ということは、コード的には問題ないはずです。
やはりVCは謎いっぱいってことですかね。
143ポイント を手に入れた。
|
|
|
|
|
Name: mi ..初心者(6,618ポイント)
Date: 2009/01/07(水) 16:35
No:26562
|
|
Title: Re:ファイル処理について
|
|
kazuoniさん、dicさん、SCIさん
お返事ありがとうございます。
ソースなんですが、他の処理がいろいろ書いてあるので
かなり端折ってあります。
fcloseを書き忘れていたようで申し訳ないです;
実際には
void FileRead(void)
{
FILE *fp;
fp = fopen(FileAddress, "r");
if(fp == NULL)
{
fclose(fp);
}
//処理
fclose(fp);
}
となっています。
dicさんのようにfopen、strcpy等を変えてみましたが、
warningが消えたのみです。
またブレークポイントで動作を見たのですが、
if(fp == NULL)
{
fclose(fp); ←ここ
}
でエラーになるようです;
エラーの内容ですが
Debug Assertion Failed!
Program: ...sual Studio 2008\Projects\Test\Test.exe
File:f:\dd\vctools\crt_bld\self_x86crt\src\fclose.c
Line: 47
Espression:(stream != NULL)
For infomation on how your program can cause an assertion
failuer,see the Visual C++ documentation on asserts
(ながながとすみません)となっているので
fcloseが原因のようなのですが…。
414ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(139,961ポイント)
Date: 2009/01/07(水) 16:40
No:26563
|
|
Title: Re:ファイル処理について
|
|
ファイルポインタがNULLなのに、クローズ処理をしているからではないでしょうか?
2倍のポイントを手に入れた! 54ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(38,287ポイント)
Date: 2009/01/07(水) 16:42
No:26564
|
|
Title: Re:ファイル処理について
|
|
fp == NULLということは「ファイルを開くのに失敗」しているのだからfcloseする必要はないししてはいけません。
3ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(47,267ポイント)
Date: 2009/01/07(水) 16:43
No:26565
|
|
Title: Re:ファイル処理について
|
|
そのfcloseの処理で
fscanf,fgets,fgetcを使っていませんか?
たぶんそれでうまく処理ができていないと思うのですが。
自分の予期した通りにそこまで動いていますか?
文字列読み取り時のfpの動きをひとつずつ見ていってみてください。
空白文字、改行文字の問題だと思います。
79ポイント を手に入れた。
|
|
|
|
|
Name: mi ..初心者(6,678ポイント)
Date: 2009/01/07(水) 16:45
No:26568
|
|
Title: Re:ファイル処理について
|
|
なるほど、fcloseではなくreturnやexitにすべきですね。
でも、if(fp == NULL)を通るってことは
ファイルが読み込めていないんですよね;
60ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(38,333ポイント)
Date: 2009/01/07(水) 16:48
No:26570
|
|
Title: Re:ファイル処理について
|
|
> ファイルが読み込めていないんですよね;
ちょっと違う。
「ファイルを開くことに失敗している」が正しいです。
開こうとしているファイルはexeと同じフォルダにありますか?(カレントディレクトリを変更していなければ)
46ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(10,585ポイント)
Date: 2009/01/07(水) 17:00
No:26572
|
|
Title: Re:ファイル処理について
|
|
void FileRead(void)
{
FILE *fp;
fp = fopen(FileAddress, "r");
if(fp == NULL)
{
fclose(fp); // ← ここで1回
}
//処理
fclose(fp); // ← ここで2回
}
2回 fclose() してます
また、ファイルを開くのを失敗した時にも fclose() します
98ポイント を手に入れた。
|
|
|
|
|
Name: mi ..初心者(6,763ポイント)
Date: 2009/01/07(水) 17:01
No:26573
| 解決!
|
Title: Re:ファイル処理について
|
|
なるほど、ファイルを開くことに失敗しているですか…。
あとは何か簡単なミスをしている感じですね。
もう少し自力で頑張ってみます。
どうしてもわからなければ、また質問させて下さい。
皆さんお付き合いいただきありがとうございました。
85ポイント を手に入れた。
|
|
|
|
Name: 徳竹 ..ぴよぴよ(125ポイント)
Date: 2009/01/07(水) 14:07
No:26539
|
|
Title: c言語についての質問です
|
|
c言語を用いてN×Nの二次元配列の要素を一次元配列にコピーするというプログラムを
以下の様に作ったのですが上手くいきませんどこをどう直せばいいのでしょうか?
本来1,2,3,4,5,6,7,8,9と表示したいのですが3,6,9,0,0,.....,0と表示されてしまいます。
環境はlinux,コンパイラはgccです。低レベルな質問で申し訳ありません、よろしくお願いします。
#include<stdio.h>
#define N 3
double a[N][N];
double b[N*N];
int main(void)
{int i,j,k=0;
a[0][0]=1;
a[0][1]=2;
a[0][2]=3;
a[1][0]=4;
a[1][1]=5;
a[1][2]=6;
a[2][0]=7;
a[2][1]=8;
a[2][2]=9;
{ for(i=0;i<N;i++)
{for(j=0;j<N;j++)
b[k]=a[i][j];
k++;
}}
for(i=0;i<N*N;i++)
printf("%f\n",b[i]);
return(0);
}
125ポイント を手に入れた。
|
|
|
|
Name: 徳竹 ..ぴよぴよ(140ポイント)
Date: 2009/01/07(水) 16:45
No:26567
| 解決!
|
Title: Re:c言語についての質問です
|
|
お二人とも素早い回答ありがとうございます。上手くいきました。
15ポイント を手に入れた。
|
|
|
|
Name: ひよこ ..入門者(4,457ポイント)
Date: 2009/01/06(火) 19:24
No:26490
|
|
Title: エラーになるのですが
|
|
BCC Developerでシューティングゲームの館の33章までのプログラムを実行しようとしたら下のようにでてくるのですがどうすればいいでしょうか?
「Error:Unresolved external '_main' referenced from C:\BORLAND\BCC55\LIB\c0x32.obj」
2倍のポイントを手に入れた! 178ポイント を手に入れた。
|
|
|
|
Name: ひよこ ..入門者(4,487ポイント)
Date: 2009/01/06(火) 19:27
No:26491
|
|
Title: Re:エラーになるのですが
|
|
すいません。タイトル忘れました。
タイトルは「エラーになるのですが」です。
ごめんなさい。
30ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..初心者(6,113ポイント)
Date: 2009/01/06(火) 21:32
No:26497
|
|
Title: Re:無題
|
|
Windowsアプリケーションにしたら下のように出てきたんですけど、どうすればいいのでしょうか?
Error:Unresolved external '_extern void img_sound_load'referenced from C:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_initialization'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ SetColor'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_PlayerShotCalc'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_PlayerControl'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ Background'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ PlayerShotDisp'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ EnemyCalcDisp'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ EnemyControl'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ EnemyShotControl'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ EnemyShotCalcDisp'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_CollisionDetection'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ Background2'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_FpsTimeFanction'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
2倍のポイントを手に入れた! 1,626ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..初心者(6,249ポイント)
Date: 2009/01/07(水) 12:36
No:26517
|
|
Title: Re:無題
|
|
なんかやってるうちに下のように出てきたのですがどうすればいいのでしょうか
Error: Unresolved external 'LoadGraph(const char *)' referenced from C:\WINDOWS\デスクトップ\SHOOT\DEBUG\IMG_SOUND_LOAD.OBJ
Error: Unresolved external 'LoadDivGraph(const char *, int, int, int, int, int, int *)' referenced from C:\WINDOWS\デスクトップ\SHOOT\DEBUG\IMG_SOUND_LOAD.OBJ
136ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(4,662ポイント)
Date: 2009/01/07(水) 12:46
No:26518
|
|
Title: Re:無題
|
|
DxLib.hはインクルードしていますよね?
ヘッダだけではなく、ライブラリもプロジェクトに入れてみてください。
2倍のポイントを手に入れた! 82ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..初心者(6,329ポイント)
Date: 2009/01/07(水) 13:04
No:26519
|
|
Title: Re:無題
|
|
ShootのファイルVCPROJECTとslnを除いてすべてやりなおしたら下のように出ました。
どうすればいいでしょうか?
Error: 'C:\WINDOWS\デスクトップ\SHOOT\DXUSECLIB.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
80ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..初心者(6,556ポイント)
Date: 2009/01/07(水) 14:09
No:26540
|
|
Title: Re:無題
|
|
上のようなエラーは出なくなったんですが下のように出てきたんですけど、どうすればいいのでしょうか?
Error:Unresolved external '_extern void img_sound_load'referenced from C:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_initialization'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ SetColor'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_PlayerShotCalc'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_PlayerControl'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ Background'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ PlayerShotDisp'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ EnemyCalcDisp'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ EnemyControl'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ EnemyShotControl'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ EnemyShotCalcDisp'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_CollisionDetection'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_ Background2'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
Error:Unresolved external '_FpsTimeFanction'referenced fromC:\Windows\デスクトップ¥SHOOT2¥DEBUG¥MAIN.OBJ
227ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..上級者(22,496ポイント)
Date: 2009/01/07(水) 14:50
No:26551
|
|
Title: Re:無題
|
|
WinMain( )関数内にある
extern void img_sound_load();
extern void initialization();
extern void SetColor();
extern void Background();
extern void PlayerShotCalc();
extern void PlayerShotDisp();
extern void PlayerControl();
extern void EnemyControl();
extern void EnemyCalcDisp();
extern void EnemyShotControl();
extern void EnemyShotCalcDisp();
extern void CollisionDetection();
extern void Background2();
extern void FpsTimeFanction();
をWinMain( )関数の外(上)に移動してください
202ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..初心者(6,593ポイント)
Date: 2009/01/07(水) 15:36
No:26557
| 解決!
|
Title: Re:無題
|
|
ありがとうございます。できました。
答えてくださった方、本当にありがとうございました。
2倍のポイントを手に入れた! 14ポイント を手に入れた。
|
|
|
|
Name: 組木紙織 [URL] ..熟練のプログラマー(68,249ポイント)
Date: 2009/01/05(月) 15:13
No:26449
|
|
Title: マルチスレッドクラス
|
|
以前この掲示板にお世話なり製作していたWin32用のマルチスレッド操作クラスのインターフェース
が大体できました。
そのことの報告です。
内部構造や例外安全性などはまだ十分に考えておらず、
デバッグもまだまともにしていないので実際に使えるものではないものです。
そのことを考慮した上で、何か意見、アドバイスが欲しいと思います。
一応環境は次のようになっています。
Windows Vista
VS2005:SE
135ポイント を手に入れた。
|
|
|
|
Name: 組木紙織 ..熟練のプログラマー(68,407ポイント)
Date: 2009/01/07(水) 13:25
No:26525
|
|
Title: Re:マルチスレッドクラス
|
|
今回は経過報告のつもりと、こんな感じのインターフェースにしたいと思うけど、使いやすそうですか?
という意味で立てたものだったので、薄っぺらくても大丈夫です。
これから内部を書き換えてきちんと出せるものができたらもう一度報告するつもりです。
>うわ、前回のにしても1年近く前ですね。
そういえばそうですね。
一年前からずっとこれだけをやっていたわけではなく、別言語やライブラリでのスレッドの扱い方を
調べてたり、まったく関係ないこともしていたので、実質はそんなにやっていなのですが。
158ポイント を手に入れた。
|
|
|
|
Name: 天使 ..ぴよぴよ(471ポイント)
Date: 2009/01/07(水) 06:22
No:26511
|
|
Title: 起動に時間がかかる
|
|
起動に時間がかかるのですがどこが間違えているのでしょうか?
またFPSを60で固定したいのですが0割?が起きているみたいでできません・・・
VS2005 C++ XP
75ポイント を手に入れた。
|
|
|
|
Name: SCI ..入門者(4,580ポイント)
Date: 2009/01/07(水) 06:45
No:26512
|
|
Title: Re:起動に時間がかかる
|
|
天使さん
実行確認してませんが、ぱっと見る限りではゲームループを挟む位置を間違えていると思います。
メッセージループに入る前にGameMain()で処理が止まってませんか?
FPSについては0除算が起きるようなら、起きないように最初は計算しないとかで対処できますね。
71ポイント を手に入れた。
|
|
|
|
Name: こ〜ふぃ ..ぴよぴよ(379ポイント)
Date: 2009/01/06(火) 22:36
No:26500
|
|
Title: テキストファイルの比較について
|
|
明けましておめでとうございます。
早速ですが、質問です。
私は、c言語の素人で素人ながら音声認証プログラムを作成しようと考えているのですが、
その際に、本人と他人を区別するための特徴量という数値として
39次元×5コくらいの数値の比較が必要なのです。
数値が上から39×5コが書かれたテキストファイルを出力することは出来るのですが、
肝心の比較計算が出来ずに困っています。
テキストファイルには、
1.418060e+00
-5.935938e-01
1.012918e+00
.
.
.
のように出力されています。
同様なテキストファイルがいくつかあり、それぞれの上から1番目同士、2番目同士・・・と比較し、
差を出力させたいのですが、出来ません。
テキスト比較や、一致などの方法は調べたのですが、数値の計算の方法はわかりませんでした。
どのようにしたら良いでしょうか?ご指南のほどお願いします。
379ポイント を手に入れた。
|
|
|
|
Name: SCI ..入門者(4,509ポイント)
Date: 2009/01/06(火) 23:04
No:26502
|
|
Title: Re:テキストファイルの比較について
|
|
それなら、ここの龍神録の「敵出現データ」と同じような方法でできますね。文字列として読み込んで、atofもしくはstrtodを使う方法です。
ただ、「一行に浮動小数値が一つだけ」という仕様が保証されるなら、fscanfでも簡単に実装できます。
ポイントは「文字列を実数に変換する」という部分です。
数値を読み込んでしまえば、差は簡単に計算できますね。
164ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(78,849ポイント)
Date: 2009/01/06(火) 23:53
No:26503
|
|
Title: Re:テキストファイルの比較について
|
|
C++でのやり方も書いておきます。
#include <iostream>
#include <fstream>
#include <algorithm>
#include <functional>
#include <iterator>
#include <vector>
int main()
{
std::vector<double> a, b;
std::ifstream ifsa("a.txt");
std::ifstream ifsb("b.txt");
std::copy(std::istream_iterator<double>(ifsa), std::istream_iterator<double>(), std::back_inserter(a));
std::copy(std::istream_iterator<double>(ifsb), std::istream_iterator<double>(), std::back_inserter(b));
std::transform(a.begin(), a.end(), b.begin(), a.begin(), std::minus<double>());
std::copy(a.begin(), a.end(), std::ostream_iterator<double>(std::cout, "\n"));
}
ちょっと冗長なように見えますが、こうせざるを得ない理由があります。
251ポイント を手に入れた。
|
|
|
|
|
Name: こ〜ふぃ ..ぴよぴよ(452ポイント)
Date: 2009/01/07(水) 06:11
No:26510
| 解決!
|
Title: Re:テキストファイルの比較について
|
|
lbfuvabさん
SCIさん
たかぎさん
解答どうもありがとうございました。
fscanfで試行錯誤してみます。
またつまづいたら質問したいと思いますのでよろしくお願いします。
73ポイント を手に入れた。
|
|
|
|
Name: GFD ..ぴよぴよ(799ポイント)
Date: 2009/01/01(木) 00:46
No:26293
|
|
Title: 動画方法
|
|
明けましておめでとう御座います。
今年もよろしくお願い致します。
早速ですが、以前聞いた質問なんでどうやったらゲームの動画を作れるかを聞きました。
それで、DxrecとDxtoryを使うと良いと、返事を受けたのですが、どちらのほうが使いやすいでしょうか、
自分には両方とも少し難しいのでお勧めのほうを使おうと思っています。
140ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(943,643ポイント)
Date: 2009/01/01(木) 01:47
No:26302
|
|
Title: Re:動画方法
|
|
あけましておめでとうございます^^
今年もよろしくお願いしますm(_ _)m
どの辺が使いにくいでしょうか?
私は両方ともとても使いやすいと思ったのですが。
おそらく軽いのはDxtoryだと思います。私は普段これを使っています。
ただ,これは無料版だとかなり大きく広告が入るので,そういうのが嫌な時はrecでしょうか。
でもこちらは無料版だと確か少ししか録画出来なかったと思うので,やはりDxtoryが無難ではないでしょうか?
104ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..かけだし(1,441ポイント)
Date: 2009/01/02(金) 02:46
No:26354
|
|
Title: Re:動画方法
|
|
明けましておめでとうございます。
ここの過去ログを拝見していると
動画関連で困った方などもおられるみたいで、参考までに書いておきます。
上記二つのソフトは管理人様が仰るフリーとしてはかなり使いやすく
難しくはないかと思われます。
自分は「AmaRecCo」という動画ソフトを使って実際ニコニコに上げてみたことがあります。
広告が出ないという点で使用することを選びました。
動画や音も結構綺麗に撮れました。
使用方法はGFDさん自身でお調べ下さい。
164ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..中級者(13,800ポイント)
Date: 2009/01/02(金) 03:10
No:26355
|
|
Title: Re:動画方法
|
|
うちのボロPCではふつうではまともに録画出来ないので、某ソフトでアプリの動作速度を落としてdisplay2aviで録画してます。
29ポイント を手に入れた。
|
|
|
|
|
Name: GFD ..ぴよぴよ(935ポイント)
Date: 2009/01/06(火) 21:55
No:26498
|
|
Title: Re:動画方法
|
|
Dixq様へ
Dxtoryを使ってみましたが、初期設定のままで録画してみると次のような警告が出た着ました。
低品質にして登録しても同じものが出たきました。
これは、私のパソコンが悪いのでしょうか? それとも設定が間違っているのでしょうか?
このような質問をして大変申し訳ございません。
頭の悪い自分に、ありがたいアドバイスをよろしくお願い致します。
136ポイント を手に入れた。
|
|
|
|
|
Name: GFD ..かけだし(1,018ポイント)
Date: 2009/01/06(火) 22:15
No:26499
|
|
Title: Re:動画方法
|
|
BEMANI様へ
何とか動画を録画することが出来ました。
ですが、ビデオ圧縮設定を標準で撮りましたので、少々画質が悪いです。
欲を願えば、高画質標準で撮りたいです。!
上の警告は全て試しました、これ以外に方法がありますか?
83ポイント を手に入れた。
|
|
|
|
Name: DAI ..ぴよぴよ(761ポイント)
Date: 2008/12/27(土) 18:54
No:26092
|
|
Title: グラフを縮小させたい
|
|
学校の課題で、ある重み付きグラフ(頂点と辺がある方です)の縮小グラフの作り方を考えています。
重みというのは、辺の長さみたいなものです。
具体的に言うと、まず、元のグラフの情報として、
#define N 6
#define M 9999
G[N+1][N+1]={{0,0,0,0,0,0,0},
{0,0,4,M,3,M,2},
{0,4,0,3,M,2,M},
{0,M,3,0,2,M,4},
{0,3,M,2,0,4,M},
{0,M,2,M,4,0,3},
{0,2,M,4,M,3,0}};
を与えます。これはN=6頂点のグラフの隣接行列という情報です。
例えばG[2][1]が4というのは頂点Aと頂点@の間に重み4の辺があるよ、という意味です。
G[3][1]がMというのはBと@の間は無限距離=辺が無い、という意味です。
同じ頂点同士に辺は置けないので、0としています。
なので、必然的にG[A][B]とG[B][A]は同じ要素になります。
このとき、このグラフの頂点たちをグループ分けして、そのグループをひとつの頂点として考えて、
新たにその頂点同士のグラフを作る、ということ考えています。
例えば、Group1(G1)を頂点@A、G2を頂点BC、G3を頂点DEというふうに3グループに分割します。
グループ分けした後、どのようにそのグループ同士を辺で繋ぐかというと、グループ間の中にある辺の中
で重みが一番小さいものを1本採択します。辺が1本も無ければ、グループ間の辺ももちろん作りません。
G1とG2を例にすると、まず元のグラフのG[1][2]とG[1][3]とG[2][3]とG[2][4]の要素を取り出して、
その中で一番小さい要素を、G1とG2の間にある辺の情報とします。
これを同様にG2とG3、G3とG1に対しても行います。
そして、新たなG1G2G3に対する以下の隣接行列G'を得ます。
G'[3+1][3+1]={{0,0,0,0},
{0,0,3,2},
{0,3,0,4},
{0,2,4,0}};
ここまでが作りたいプログラムの概要です。
このような規模の小さいグラフで、分割の情報も単純であれば、私でもプログラムすることはできるのですが、
できたらどんな頂点数でもどんな分割の仕方でも対応できる汎用性のあるプログラムにしたいのです。
一番悩んでいるのは、どのように頂点の分割を入力情報として与えたら良いのかというところです。
ややこしい話ですみませんが、よろしくお願いします。
ちなみに環境はVista/VisualC++です。
761ポイント を手に入れた。
|
|
|
|
Name: non ..プログラマー(25,532ポイント)
Date: 2008/12/27(土) 20:19
No:26094
|
|
Title: Re:グラフを縮小させたい
|
|
No25941のVARIOさんの課題の次の課題なのでしょうか?
同じ、大学の課題なのでしょうか?
さて、ぱっと読んだ感じでは、特に難しくないとは思ったのですが、読み違いもあるかも。
学校の課題なら、もっと条件をはっきりして欲しいなという気がしました。
1 グループの最大数は?
例えば、何か定数で与えられているのか。
2 グループの中の頂点数は?
すべてのグループ同じかまたは異なるのか。また、どのような形(変数)で与えられるのか?
3 新たな配列Gは動的に用意するのか?
25ポイント を手に入れた。
|
|
|
|
|
Name: DAI ..ぴよぴよ(506ポイント)
Date: 2008/12/28(日) 01:32
No:26108
|
|
Title: Re:グラフを縮小させたい
|
|
すみません、同一人物です^^;
説明が足りなくてすみませんでした。
まず、前提として頂点のグループ分けの情報は、予め自分で入力します。
上の例で言うと、元のグラフの隣接行列Gと、この頂点をグループにしたいという
G1={@A}、G2={BC}、G3={DE}の情報は自分で用意します。これに準じて
新しいグラフG'を作りたいのです。
1、グループの最大数は元のグラフの頂点数です。
なので元のグラフが6頂点ならグループの数は1から6の間の値を取ります。
2、上の例では全て同じにしましたが、グループの中の頂点数は特に制限はありません。
同じ場合もありますし、異なる場合もあります。
3、動的に用意できるのであればそれでもちろん良いのですが、最初にグループ分けの情報と共に
グループの数も定まるので、グループの数を元に配列を静的に用意する形でも構いません。
nonさんいつもありがとうございます。よろしくお願いします。
255ポイント を落としてしまった。
|
|
|
|
|
Name: non ..プログラマー(25,957ポイント)
Date: 2008/12/28(日) 09:32
No:26112
|
|
Title: Re:グラフを縮小させたい
|
|
前の課題を自力で解けたのなら、グループ情報をプログラムでどのように宣言したかを
C言語で示してください。
>G1={@A}、G2={BC}、G3={DE}の情報は自分で用意します。
名前を変えるのは規約違反です。
84ポイント を手に入れた。
|
|
|
|
|
Name: DAI ..ぴよぴよ(607ポイント)
Date: 2008/12/30(火) 01:16
No:26190
|
|
Title: Re:グラフを縮小させたい
|
|
前の課題は、解けたというより理論の方を勘違いしていたので、解決としてしまいました。
お手数おかけしますが、グループ情報もどのように宣言したら良いのかも含めて御助言願いたいです。
よろしくお願いします。
101ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(26,002ポイント)
Date: 2008/12/30(火) 09:09
No:26194
|
|
Title: Re:グラフを縮小させたい
|
|
どのようにデータを持つか。の、一例です。
#include <stdio.h>
#define N 6
#define M 9999
#define Gp 3
G[N+1][N+1]={ {0,0,0,0,0,0,0},
{0,0,4,M,3,M,2},
{0,4,0,3,M,2,M},
{0,M,3,0,2,M,4},
{0,3,M,2,0,4,M},
{0,M,2,M,4,0,3},
{0,2,M,4,M,3,0}};
GRP[Gp][N]= { {1,2,0,0,0,0},
{3,4,0,0,0,0},
{5,6,0,0,0,0}};
newG[Gp+1][Gp+1]={0};
void dispNet(void)
{
int i,j;
for(i=0;i<Gp+1;i++){
for(j=0;j<Gp+1;j++)
printf("%d ",newG[i][j]);
printf("\n");
}
}
int foundNet(int grp1,int grp2)
{
int min=M+1;
int i,j;
for(i=0;GRP[grp1][i]!=0;i++){
for(j=0;GRP[grp2][j]!=0;j++){
if(G[GRP[grp1][i]][GRP[grp2][j]]!=0)
if(G[GRP[grp1][i]][GRP[grp2][j]]<min)
min=G[GRP[grp1][i]][GRP[grp2][j]];
}
}
if(min==M+1)
return 0;
return min;
}
int main(void)
{
int i,j;
for(i=0;i<Gp-1;i++)
for(j=i+1;j<Gp;j++)
newG[i+1][j+1]=newG[j+1][i+1]=foundNet(i,j);
dispNet();
return 0;
}
8ポイント を手に入れた。
|
|
|
|
|
Name: DAI ..ぴよぴよ(660ポイント)
Date: 2009/01/06(火) 14:23
No:26481
| 解決!
|
Title: Re:グラフを縮小させたい
|
|
返事が遅くなり申し訳ありません。
nonさん、ありがとうございました。
おかげさまで何とかなりそうです。
本当に、ありがとうございます。
53ポイント を手に入れた。
|
|
|
|
Name: 米子 ..ぴよぴよ(230ポイント)
Date: 2009/01/03(土) 02:18
No:26381
|
|
Title: IME操作
|
|
いつも拝見させていただいています。
現在、DirectXにてゲームを開発しており、
そのゲーム内で日本語入力をしたいのです。
調べてみたところ「DXUTのCustomUI」「IME操作」という二つの方法が見つかったのですが、
日本語入力GUIのためにDXUTはちょっと使いたくないのです。
そこでIMEを利用しようと考えたのですが、よいサイトがみつからず
どうにもそこでつまづいてしまっています。。。
だれかご教授おねがいできないでしょうか?
または、よい参考サイトさんなどあればいただけるとうれしいです。
PS)
猫でも〜はみましたが、WindowsAPIでの方法がメインで
どうにも理解できませんでしたorz
230ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(46,698ポイント)
Date: 2009/01/03(土) 11:19
No:26386
|
|
Title: Re:IME操作
|
|
何年か前にDirectXでIME入力を実装してみたことがありましたが、
あのときは非常に扱いづらく、ソースを棄ててしまったので見せられませんが…。
猫でも〜で使われている WindowsAPI を使った実装法で書いていたものでしたが、
確か DXUT も内部で WindowsAPI を使っていると思います。
まず、日本語入力はメッセージ処理で行います。
最低限必要な処理は、
・日本語入力が可能かどうか
・日本語入力中(未変換時)の画面への表示
・日本語変換中の画面への表示
・変換候補リストの表示(無くても処理は出来る)
です。これらは猫でも〜で全部のっているはずなので、
後は実装の仕方です。
240ポイント を落としてしまった。
|
|
|
|
|
Name: 米子 ..ぴよぴよ(291ポイント)
Date: 2009/01/06(火) 05:50
No:26473
|
|
Title: Re:IME操作
|
|
>>御津凪さん
猫でも〜ですと、文字列の表示にエディットボックスを利用しているようですが・・・
>>dicさん
ダイアログは見栄えの面でつかいたくないです;
61ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(4,345ポイント)
Date: 2009/01/06(火) 06:05
No:26474
|
|
Title: Re:IME操作
|
|
米子さん
>猫でも〜ですと、文字列の表示にエディットボックスを利用しているようですが・・・
GUI環境の概観や表示機能と日本語入力は分離して考えるべきです。
別に特定のGUI環境とWindowsAPIの間に必然的な結合があるわけではありません。
104ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(46,619ポイント)
Date: 2009/01/06(火) 10:29
No:26478
|
|
Title: Re:IME操作
|
|
> 猫でも〜ですと、文字列の表示にエディットボックスを利用しているようですが・・・
あちらの方法はメインとなるエディットボックスをサブクラス化して、
そのプロシージャの中でIME関連のメッセージ処理やWindowsAPI処理を行っていますね?
つまり、DirectXではメインウインドウのプロシージャでその処理を行えば良い、というわけです。
79ポイント を落としてしまった。
|
|
|
|
Name: dic ..中級者(9,065ポイント)
Date: 2009/01/04(日) 16:01
No:26414
|
|
Title: シューティンゲームソースコードのパラメータ化
|
|
今回はシューティングゲームの実装について質問します
今私はシューティングゲームのプログラムのソースコード入力に取り組んでいてて
ある点に気づきました。
それはシューティングの要素である敵、弾の出し方、敵の動き方をパラメータ化
できるのではないのかという点です
しかし、私の頭ではどのようにすればうまくパラメータ化するのかが困っています
今、分かるのは要素を関数で分けて、敵の変数に関数へのポインタをもたせ
これを呼び出すことで、うまいことパラメータ化できるのではないかということです
今知りたいのは、どのようにパラメータ化するのか、どのようにして仕様を
決めていくのかそのやり方についてです
前回のスレで動画をアップロードした通り、一通りの基礎的シューティングの
プログラムは分かっています
なかなか文章が下手で伝わりにくいかもしれませんが、ご教授お願いします
69ポイント を手に入れた。
|
|
|
|
Name: lbfuvab ..中級者(14,667ポイント)
Date: 2009/01/04(日) 18:43
No:26422
|
|
Title: Re:シューティンゲームソースコードのパラメータ化
|
|
ええと、敵の構造体に敵自身の移動の情報とその弾の移動の情報を入れるという事でしょうか?
それなら構造体内に関数ポインタを入れれば良いんじゃないかなと思います。
84ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(78,527ポイント)
Date: 2009/01/04(日) 19:26
No:26424
|
|
Title: Re:シューティンゲームソースコードのパラメータ化
|
|
Abstract FactoryパターンやStrategyパターンについて調べると吉です。
C++であれば、動的に変更する必要があるなら仮想関数を使って、静的に決定できるのであればテンプレートを使って実現するとよいでしょう。
69ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(9,083ポイント)
Date: 2009/01/05(月) 07:23
No:26438
|
|
Title: Re:シューティンゲームソースコードのパラメータ化
|
|
lbfuvabさん たかぎさん 回答ありがとうございます
う〜ん やっぱり文章がダメのようでした
私が言いたかったことは、敵、弾、動きをパラメータ化するアルゴリズムの
仕様をどのようにして決めていくか?
ということです
それとデザインパターンは知っているつもりでまだ実用で使えるレベルではないので
簡素な方法はないでしょうか?
18ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(4,171ポイント)
Date: 2009/01/05(月) 08:24
No:26439
|
|
Title: Re:シューティンゲームソースコードのパラメータ化
|
|
「パラメータ」とは媒介変数のことです。
プログラミング言語の場合には引数(とその他の変数)で実現されます。
対象と対象を対応付けるために、媒介変数表示という手段をとりますね。
つまり、「敵、弾、動きをパラメータ化」とは普段「関数」や「クラス」で実装していることに過ぎません。
したがって「パラメータ化」する「アルゴリズム」とは「敵、弾、動きを媒介変数表示形で実装」する「方法」と捉えることができますが、おそらくこの意図ではありませんね。
私も最初読んだときはファクトリーやストラテジーを思い浮かべました。
或いは、スクリプトエンジンの実装を指しているとも考えました。
「パラメータの仕様」と言われれば、数学的にもプログラミング的にも媒介変数の取捨選択に関するだろうと思います。
まず「パラメータ」が数学的なものなのか、C言語的(引数)なものなのか、どのような意図なのでしょう?
361ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(9,664ポイント)
Date: 2009/01/05(月) 16:23
No:26450
|
|
Title: Re:シューティンゲームソースコードのパラメータ化
|
|
SCIさん回答ありがとうございます
パラメータ化とはC言語で言う引数のことです
まぎらわしくてすいません
引数にて動きなどを指定する形にできないものか考えているところです
管理人さんの作られている関数へのポインタをインデックス値で
区別つけているようにです
なんとなくイメージは沸いているのですが、具体的にソースコードに変換できないのです
そこで、どういった方法でアルゴリズム、などを決定していくのかを聞きたいのです。
今のイメージは以下のようになり、これより優れた方法はないかなと思っているところです
#include <stdio.h>
void funcDraw()
{
printf( "Draw\n" );
}
void funcMove()
{
printf( "Move\n" );
}
void funcMath()
{
printf( "Math\n" );
}
void (*func[3])() = { funcDraw, funcMove, funcMath };
typedef struct
{
int i, j, k;
} Obj_t;
void funcObj( Obj_t *obj )
{
func[obj->i]();
func[obj->j]();
func[obj->k]();
}
void main()
{
Obj_t a1, a2, a3;
a1.i = 0;
a1.j = 1;
a1.k = 2;
a2.i = 0;
a2.j = 0;
a2.k = 0;
a3.i = 1;
a3.j = 1;
a3.k = 1;
funcObj( &a1 );
funcObj( &a2 );
funcObj( &a3 );
}
581ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(10,169ポイント)
Date: 2009/01/05(月) 16:55
No:26452
|
|
Title: Re:シューティンゲームソースコードのパラメータ化
|
|
書いている内になんとなく分かってきました
で、以下のようになりました
#include <stdio.h>
#include <stdlib.h>
void funcDraw(){ printf( "Draw\n" );}
void funcMove(){ printf( "Move\n" );}
void funcMath(){ printf( "Math\n" );}
void funcDash(){ printf( "Dash\n" );}
void funcPrint(){ printf( "Print\n" ); }
void func1x1(){ printf( "1x1\n" );}
void (*func[6])() = { funcDraw, funcMove, funcMath, funcDash, funcPrint, func1x1 };
typedef struct
{
int i, j, k;
} Obj_t;
void funcObj( Obj_t *obj )
{
func[obj->i]();
func[obj->j]();
func[obj->k]();
}
// 弾、敵などのオブジェクトに関数へのポインタのインデックス値を代入する
void setObj( Obj_t *obj, int move, int draw, int func )
{
obj->i = move; // 動作関数へのポインタのインデックス値
obj->j = draw; // 描画関数へのポインタのインデックス値
obj->k = func; // オリジナル関数へのポインタのインデックス値
}
void main()
{
Obj_t a1, a2, a3;
setObj( &a1, 0, 1, 2 );
setObj( &a2, 3, 4, 5 );
setObj( &a3, rand()%6, rand()%6, rand()%6 );
funcObj( &a1 );
funcObj( &a2 );
funcObj( &a3 );
}
505ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(4,241ポイント)
Date: 2009/01/05(月) 20:41
No:26462
|
|
Title: Re:シューティンゲームソースコードのパラメータ化
|
|
なるほど、なんかオブジェクトに順次実行させる共通処理の中身を、組み換えしたいということですね。
オブジェクト自体に関数ポインタを持たせてループで実行していくのとかでもできそうですね。
>4通りの意味
意味が広いか狭いかの違いだけで、本質は同じですよ。
70ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(78,598ポイント)
Date: 2009/01/06(火) 00:22
No:26470
|
|
Title: Re:シューティンゲームソースコードのパラメータ化
|
|
これだとデリゲートを使えばうまくいきそうな気もします。
C++では、Boost.FunctionまたはBoost.Signalを使うとよいでしょう。
あらかじめ配列を作っておく必要がある、あるいは呼び出す関数を3つに固定しなければならない理由があるなら、違うかもしれませんが...。
71ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(10,289ポイント)
Date: 2009/01/06(火) 08:58
No:26477
| 解決!
|
Title: Re:シューティンゲームソースコードのパラメータ化
|
|
デリゲートですか初耳ですが、調べたところ委譲のことのようですね
勉強になります
配列を3つに固定する必要はないのですが
オブジェクト指向でいくか、構造体で簡素にいくかで迷っているものでして
オブジェクト指向は保守の時の解読力が私にはあまりないので、なかなか使い切れないのです
boostもまだ、未勉強でして、これはもう構造体でいくしかないのかな
ご回答ありがとうございました
58ポイント を手に入れた。
|
|
|
|
Name: kaiten ..初心者(6,718ポイント)
Date: 2009/01/05(月) 16:41
No:26451
|
|
Title: {}?
|
|
おかしなタイトルですみません。いまいち言い方が思いつかなかったもので。
いろいろ探していてhttp://tricklib.com/" target="_blank">evil_for.hなるものを入手したのですが疑問に思ったことがあるので……
普通のfor文のように{}が使えるようになっているのですが、このようにする方法が知りたいのです。
ソース見て寸刻で頭がこんがらがってしまったのですが、一体どのような方法で行っているのでしょうか?
解ればでいいので教えていただけるとありがたいです。
#最近質問してばかりだなぁ……
217ポイント を手に入れた。
|
|
|
|
Name: Mist ..プログラマー(36,850ポイント)
Date: 2009/01/05(月) 16:59
No:26453
|
|
Title: Re:{}?
|
|
ヘッダの中身を読んだ?
431行目〜456行目みるとわかると思うけど、evil_for = forなんだから{}が使えるのは当たりまえ。
47ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(37,257ポイント)
Date: 2009/01/05(月) 17:05
No:26455
|
|
Title: Re:{}?
|
|
もうちょっと詳しく書くと
evil_for(c) {
...
}
は
#define evil_for(c) evil_for_ex(c, c.begin(), evil_i(c) != c.end(), ++evil_i(c))
と定義されているから
evil_for_ex(c, c.begin(), evil_i(c) != c.end(), ++evil_i(c)) {
...
}
となり、そして
#define evil_for_ex(c, begin, expr, incr) \
for(evil_for_tools::unknown_holder c##_evil_i( \
evil_for_tools::copy_object(begin), evil_for_tools::get_deleter(c)); \
expr; incr)
と定義されているので
for(evil_for_tools::unknown_holder c##_evil_i(evil_for_tools::copy_object(begin),
evil_for_tools::get_deleter(c));
expr; incr) {
...
}
となる。
407ポイント を手に入れた。
|
|
|
|
|
Name: kaiten ..初心者(6,882ポイント)
Date: 2009/01/06(火) 08:46
No:26476
| 解決!
|
Title: Re:{}?
|
|
自分で思っていたより稚拙…というかしょーもない質問してしまったようです(汗
#defineをこのように使ったことがなかったので…といっても予測ついていいレベルですね。
しかし、恐らく指摘していただかなければ自分ではずっとわからないと思って終わらせていたと思います。
Mistさんのおかげで理解することができました。ありがとうございます。
2倍のポイントを手に入れた! 94ポイント を手に入れた。
|
|
|
|
Name: kaiten ..初心者(6,306ポイント)
Date: 2009/01/03(土) 10:16
No:26385
|
|
Title: オペレータの引数に関数を取る
|
|
冬休みをいいことに入り浸っているkaitenです。
聞くばかりで申し訳ないのですがまた質問させていただきます。
環境はvista、VC++2008EEです。
今回はエラーなどではないのですが処理の方法が解らない(というか仕様上出来るのだろうか)ので。
というのも、オーバーロードしたオペレータの引数に関数を取りたいのです。
かつ、取る関数の引数は不明。といった条件としてこれは可能なのでしょうか?
別のアプローチも考えているのですが、今回の処理に関係なく気になる点なのでまずはお願いします。
51ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(303,879ポイント)
Date: 2009/01/03(土) 11:26
No:26387
|
|
Title: Re:オペレータの引数に関数を取る
|
|
えーと、オペレータの引数に関数(へのポインタ?)を1つとるけど、
その関数の引数の型、数は不明、ということでいいでしょうか?
そういうことであれば、その関数の引数丸ごと関数オブジェクトに
くるんでしまえば出来なくもないです。
例えば
#include <iostream>
#include <boost/bind.hpp>
struct Hoge {};
template <typename Func>
const Hoge& operator <<(const Hoge& hoge, Func f)
{
f();
return hoge;
}
// 引数と型が異なる関数
enum E { e_0, e_1, e_2 };
void test_a(E e, int i) { std::cout << "a" << i << std::endl; }
void test_b(int i1, E e, int i2) { std::cout << "b" << i1 * i2 << std::endl; }
void test_c(int i1, int i2, E e, int i3) { std::cout << "c" << i1 * i2 * i3 << std::endl; }
int main(void)
{
Hoge hoge;
hoge << boost::bind(&test_a, e_0, 3)
<< boost::bind(&test_b, 3, e_1, 5)
<< boost::bind(&test_c, 3, 5, e_2, 7);
return 0;
}
こんなかんじとか。
580ポイント を手に入れた。
|
|
|
|
|
Name: tkmakwins15 [URL] ..比類無きプログラマー(92,680ポイント)
Date: 2009/01/03(土) 11:31
No:26388
|
|
Title: Re:オペレータの引数に関数を取る
|
|
つまり、引数つきのマニピュレーターを作りたいということですか?
そうだとすると、普通の関数では難しいです。ひとつの解決方法としては…
#include<iostream>
struct MyManipObject{
int a;
void operator()(std::ostream& o)const{/*ここにやりたいことを書く*/
o<<"マニピュレータの引数は:"<<a;
}
private:
MyManipObject(int in):a(in){}
friend MyManipObject mymanip(int);
};
std::ostream &operator<<(std::ostream& o,const MyManipObject& obj)
{
obj(o);
return o;
}
MyManipObject mymanip(int in)
{
return MyManipObject(in);
}
int main()
{
std::cout<<mymanip(7)<<std::endl;
}
これをMinGWでコンパイルしたバイナリを添付しておきます。(できないようなのでアップローダーにアップしておきます。)
https://www.webfile.jp/dl.php?i=455717&s=80f11368d95e81afef35
関数の数だけこれを繰り返せば、とりあえずやりたいことは実行できると思います。
122ポイント を手に入れた。
|
|
|
|
|
Name: kaiten ..初心者(6,501ポイント)
Date: 2009/01/03(土) 13:36
No:26389
|
|
Title: Re:オペレータの引数に関数を取る
|
|
お二方ありがとうございます。
携帯からだと厳しいものがありますね。帰宅してからじっくり見させていただきます。
やりたいことをもっと全体的に書いた方がいい気がしたので追記という形で。
現在switch構文もどきのような関数を作ろうとしているんです。(switch構文やif文素直に使えってツッコミはなしでお願いしますw)
case〜:に当たる部分は恐らく作れたのですが肝心の処理を書く部分は流石にどうしようもなさそうなので関数をよぶことに限定しようと思ったのです。
引数なしの関数に限定すれば問題なさそうだったのですがあまりに寂しいのでこうして質問させていただきました。
195ポイント を手に入れた。
|
|
|
|
|
Name: YuO ..プログラマー(26,523ポイント)
Date: 2009/01/04(日) 00:42
No:26399
|
|
Title: Re:オペレータの引数に関数を取る
|
|
それだったら,
struct Operation {
virtual ~Operation (void) {}
virtual void Execute (void);
};
というようなクラスを一個用意して,処理に当たる部分をExecute関数として実装した派生クラスを用意すればよいのではないでしょうか。
あとは,switch相当部分はOperationの派生クラスをnewするようにすればよいです。
# Strategyパターンになるはず……。
107ポイント を手に入れた。
|
|
|
|
|
Name: kaiten ..初心者(6,788ポイント)
Date: 2009/01/06(火) 08:34
No:26475
| 解決!
|
Title: Re:オペレータの引数に関数を取る
|
|
質問しっぱなしとかよくないよ俺…
教えていただいた方法で何とか実現できそうだったので解決押しときます。
疑似switch文とは別の物になりましたが……
70ポイント を手に入れた。
|
|
|
|
Name: 紅葉 ..中級者(10,037ポイント)
Date: 2008/12/31(水) 14:59
No:26258
|
|
Title: 行列にXYZ座標と回転の情報を
|
|
またまた質問なのですが
行列にXYZ座標と回転の情報を入れたいのですがうまくいきません。
D3DXMATRIX mPos,mRot;
D3DXMatrixIdentity(&mPos);
D3DXMatrixIdentity(&mRot);
D3DXMatrixIdentity(&GRoll.Ball.Mat);
D3DXMatrixTranslation(&mPos, GRoll.Ball.Pos.x, GRoll.Ball.Pos.y, GRoll.Ball.Pos.z);
D3DXMatrixRotationYawPitchRoll(&mRot, GRoll.Ball.Rot.Yaw, GRoll.Ball.Rot.Pit, GRoll.Ball.Rot.Rol);
D3DXMatrixMultiply(&GRoll.Ball.Mat,&mRot,&mPos);
GRoll.Ball.Matのみグローバル変数のMatrix型です。
どこが間違えているか御指摘頂けないでしょうか?
231ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(132,831ポイント)
Date: 2008/12/31(水) 15:16
No:26260
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
> 行列にXYZ座標と回転の情報を入れたいのですがうまくいきません。
毎度のお願いですが、「うまくいきません」だけではなくて、
「どのように」うまくいかないか、例えば
・コンパイル時にこんなエラーメッセージが出る
・実行時にこんなエラーメッセージが出る
というようなことを「具体的に」提示していただけますか?
具体的な回答は、具体的な質問から生まれます。
129ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..中級者(10,255ポイント)
Date: 2008/12/31(水) 16:39
No:26262
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
エラーなどはでないのですが
実行時に違った値が入ってしまいます。
デバックで行列でと座標と回転を直接入れる2パターンで描画しても
違う結果になっています。
VS2005
Xp
C++
DirectX
上記の者でコンパイルしています。
2倍のポイントを手に入れた! 218ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(55,817ポイント)
Date: 2009/01/02(金) 22:17
No:26376
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
あなたの文章があまりにも分かりづらいので、誰も回答できないだけです。
boxさんもおっしゃっていますが、具体的な回答は、具体的な質問から生まれます。
>実行時に違った値が入ってしまいます。
まずこの文章、期待した値にならないということが書かれていますが
望む結果と実際の結果が記述されていないため、回答しようがありません。
>デバックで行列でと座標と回転を直接入れる2パターンで描画
これもよくわかりません。
行列を使った場合の描画のプログラムと
座標、回転を直接入れるプログラムを提示していただければ、まだ回答することもできますが・・・。
169ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..中級者(10,246ポイント)
Date: 2009/01/05(月) 06:06
No:26436
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
ソースになります。
2つ描画しています。
これが同じ結果になりません。
また床の傾きに応じた回転をしたいのですがうまくいきません。
69ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..中級者(10,272ポイント)
Date: 2009/01/05(月) 06:07
No:26437
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
DATAになります。
testの解凍した直下に解凍したものを入れてください。
26ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..中級者(10,292ポイント)
Date: 2009/01/05(月) 22:42
No:26466
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
>>GPGA 様
一応、ソースをあげときました。
よろしければ見ていただけますと助かります。
20ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(56,343ポイント)
Date: 2009/01/05(月) 22:52
No:26467
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
ボールの回転の扱いが、1.0で一周になっているのが原因です。
D3DXMatrixRotationYawPitchRoll関数に指定する値はラジアンなので
ラジアン値に変換する必要があります。
D3DXMatrixRotationYawPitchRoll(&mRot, GRoll.Ball.Rot.Yaw, GRoll.Ball.Rot.Pit, GRoll.Ball.Rot.Rol);
↓
const float yaw = F(RAD(GRoll.Ball.Rot.Yaw));
const float pit = F(RAD(GRoll.Ball.Rot.Pit));
const float rol = F(RAD(GRoll.Ball.Rot.Rol));
D3DXMatrixRotationYawPitchRoll(&mRot, yaw, pit, rol);
FマクロとRADマクロは、このプログラムのライブラリで定義されていたので
そのまま使用しています。
163ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(56,358ポイント)
Date: 2009/01/05(月) 23:01
No:26468
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
訂正
×ボールの回転の扱いが、1.0で一周になっているのが原因です。
○ボールの回転を、角度で扱っているのが原因です。
15ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..中級者(10,481ポイント)
Date: 2009/01/05(月) 23:19
No:26469
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
できました>< 天才ですね・・・
もうひとつ問題点があるのですが
Gs_DrawModel(GRoll.Ball.Pos.x,GRoll.Ball.Pos.y,GRoll.Ball.Pos.z,M_BOX,1,1,1,GRoll.Ball.Rot.Yaw+GRoll.Ball.AxisCnt,GRoll.Ball.Rot.Pit,GRoll.Ball.Rot.Rol);
を
Gs_DrawModel(GRoll.Ball.Pos.x,GRoll.Ball.Pos.y,GRoll.Ball.Pos.z,M_BOX,1,1,1,GRoll.Ball.Rot.Yaw,GRoll.Ball.Rot.Pit,GRoll.Ball.Rot.Rol);
に変えていただくとわかると思うのですが
マウスで操作すると面にそった角度で転がります。
この角度で回転するようにしたいですがうまくいきません。
説明が下手で申し訳ないのですがどのように書けばうまく回るでしょうか?
189ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(56,769ポイント)
Date: 2009/01/06(火) 02:23
No:26471
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
Gs_DrawModel関数を使用する方法だと(個人的に)説明しづらいので
Gs_DrawKanadeAxis関数を使用する方法で説明します。
今回の問題は、すでに正規化された角度に対して、Yに回転角度を足しこむためにおかしくなっています。
一度Y回転させた後に、正規化された角度の行列計算入れることで、正しく動作します。
D3DXMATRIX mat;
// 初期化
D3DXMatrixIdentity(&GRoll.Ball.Mat);
// まずY回転
D3DXMatrixRotationY(&mat, F(RAD(GRoll.Ball.AxisCnt)));
GRoll.Ball.Mat *= mat;
// その後、正規化された角度にする
const float yaw = F(RAD(GRoll.Ball.Rot.Yaw));
const float pit = F(RAD(GRoll.Ball.Rot.Pit));
const float rol = F(RAD(GRoll.Ball.Rot.Rol));
D3DXMatrixRotationYawPitchRoll(&mat, yaw, pit, rol);
GRoll.Ball.Mat *= mat;
// 最後に移動
D3DXMatrixTranslation(&mat, GRoll.Ball.Pos.x, GRoll.Ball.Pos.y, GRoll.Ball.Pos.z);
GRoll.Ball.Mat *= mat;
411ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..中級者(10,490ポイント)
Date: 2009/01/06(火) 05:33
No:26472
|
|
Title: Re:行列にXYZ座標と回転の情報を
|
|
できました><
本当にありがとうございます。
助かりました。
9ポイント を手に入れた。
|
|
|
|
Name: D.D ..ぴよぴよ(108ポイント)
Date: 2009/01/04(日) 21:08
No:26426
|
|
Title: エラーがわかりません。
|
|
こんばんわ。はじめまして。
[1] 質問文
1. DXライブラリ置き場より必要なものを揃え設定
2. 龍神録プロジェクトをダウンロード
3. 龍神録プログラミングの館第2章より説明通りにソースを貼り付けビルド
4. 以下のエラーが出ました。
エラー 1 error C2371: 'DWORD' : 再定義されています。異なる基本型です。 basetsd.h 122
[2] 環境
[2.1] OS : Windows XP SP2
[2.2] コンパイラ名 : VC++ 2005EE
以上のような症状がでました。
教えてください。よろしくお願いします。
108ポイント を手に入れた。
|
|
|
|
Name: D.D ..ぴよぴよ(360ポイント)
Date: 2009/01/05(月) 21:05
No:26464
|
|
Title: Re:エラーがわかりません。
|
|
>Dixqさん
龍神録プログラミングの館の[この章までのプロジェクトを一括ダウンロード]の、
ところをクリックてダウンロードしたファイルを使用したら正しくコンパイルできました!
ただファイルのダウンロードする時、保存を選択し解凍すると書庫が壊れていますとなります。
ですので、開くを選択→解凍ツール起動→指定フォルダに解凍と行いデータを取得しました。
とりあえず、コンパイルできるようになったので頑張って勉強して弾幕を作ってみようと思います。
またわからないことがあった場合に質問すると思いますのでその時はよろしくお願いします!
252ポイント を手に入れた。
|
|
|
|
Name: s-rush ..初心者(8,252ポイント)
Date: 2009/01/04(日) 01:00
No:26400
|
|
Title: 入れ替えの関数
|
|
いつもお世話になってます。
また分からないことが出てきたので、質問させていただきます。
2つの構造体をswap関数でメンバすべてを入れ替える関数を作ったのですが、
うまいこといきません。
メンバの中にまた構造体を組み込んでいるのが原因なのでしょうか?
ソースを載せておきます。
#include <stdio.h>
#include <string.H>
typedef struct{
int number;
char name[64];
}poke_skill;
typedef struct{
int number;
char name[64];
poke_skill tec;
}poke_tag;
void swap(poke_tag *a, poke_tag *b)
{
poke_tag *temp;
*temp = *a;
*a = *b;
*b = *temp;
}
int main()
{
poke_tag poke[2]={ {1,"フシギダネ",{5,"たいあたり"}},
{2,"フシギソウ",{6,"つるのむち"}}
};
printf("%d\n" ,poke[0].number);
printf("%s\n" ,poke[0].name);
printf("%d\n" ,poke[0].tec.number);
printf("%s\n" ,poke[0].tec.name);
swap(&poke[0], &poke[1]);
printf("%d\n" ,poke[0].number);
printf("%s\n" ,poke[0].name);
printf("%d\n" ,poke[0].tec.number);
printf("%s\n" ,poke[0].tec.name);
return 0;
}
コンパイルはエラーは出ないのですが、実行させるとこのようなエラーで止まってしまいます。
'System.NullReferenceException' のハンドルされていない例外が test.exe で発生しました。
追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。
セグメントエラーのことだとは思うのですが、原因が分かりません。
お忙しいとは思いますが、またお願いします。
開発環境は前回同様、Visual C++ 2008 Express Editionです。
459ポイント を手に入れた。
|
|
|
|
Name: SCI ..入門者(3,305ポイント)
Date: 2009/01/04(日) 01:05
No:26401
|
|
Title: Re:入れ替えの関数
|
|
構造体の実体 = 構造体の実体
という代入文になってますね。
メンバごとに代入するか、memcpy関数を使うといいのでは。
2ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..初心者(8,503ポイント)
Date: 2009/01/04(日) 01:14
No:26403
|
|
Title: Re:入れ替えの関数
|
|
SCIさん、素早い回答ありがとうございます。
一応メンバごとに代入するように変更してみました。
以下変更部のソース
void swap(poke_tag *a, poke_tag *b)
{
poke_tag *temp;
temp->number = a->number;
strcpy(temp->name, a->name);
a->number = b->number;
strcpy(a->name, b->name);
b->number = temp->number;
strcpy(b->name, temp->name);
}
ですが、やはり実行中に同様のエラーが出てしまいます。
251ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(3,810ポイント)
Date: 2009/01/04(日) 01:30
No:26406
|
|
Title: Re:入れ替えの関数
|
|
「temp」という変数は実体がなければなりませんよ。
今ちゃんと見たら、最初のソースでも「temp」が未初期化のアドレスですね。
直接の原因はここのようです。
41ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(133,126ポイント)
Date: 2009/01/04(日) 09:13
No:26411
|
|
Title: Re:入れ替えの関数
|
|
>コンパイルはエラーは出ないのですが
最初に投稿されたコードのswap関数で、
ワーク変数tempに関する警告が出ませんか?
引数a,bはpoke_tag *型ですので、*a,*bはpoke_tag型ですね。
tempはpoke_tag型でないと勘定が合いません。
50ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..初心者(8,846ポイント)
Date: 2009/01/04(日) 22:24
No:26428
|
|
Title: Re:入れ替えの関数
|
|
swap関数の部分を以下のように変更したところ、エラーが出ずに実行できました。
void swap(poke_tag *a, poke_tag *b)
{
poke_tag temp;
temp = *a;
*a = *b;
*b = temp;
}
poke_tag *temp;
とする必要がなかったのですかね?
boxさんのおっしゃる通り警告が出ていました。
初期化されていないとかなんとか・・・
以前大学で、同じswap関数を教わったのですが、
その時のソースはこうです。
void swap(int *a, int *b)
{
int *temp;
*temp = *a;
*a = *b;
*b = *temp;
}
構造体を扱う方との違いはtempに"*"がついているんですが、
双方の間で、違いっていうのは何なんですか?
もう少しお付き合いお願いします。
343ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(46,157ポイント)
Date: 2009/01/04(日) 23:12
No:26429
|
|
Title: Re:入れ替えの関数
|
|
まずポインタという概念を学んでください。
学校の教科書なり、C言語解説ページなり。
int *a;
これで変数aはintへのポイント型となります。
> poke_tag *temp;
> とする必要がなかったのですかね?
結論を言えばその通りです。
> 以前大学で、同じswap関数を教わったのですが、
> その時のソースはこうです。
>
> void swap(int *a, int *b)
> {
> int *temp;
> *temp = *a;
> *a = *b;
> *b = *temp;
> }
実行してみましたか?
同じように、アクセス違反が起こります。
なぜなら両方初期化がされていないからです。
int *temp;
と宣言するとします。
tempは簡単にいえば住所です。何番地みたいな。
*tempはその住所にいる人(数)です。
上のように初期化しないまま
*temp=
のように呼び出すと、住所不定のため、その人(数字)が誰か(何か)分かりません。
もしポインタの勉強をされたようであるなら、
もう一度復習してみてください。
188ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(133,240ポイント)
Date: 2009/01/04(日) 23:13
No:26430
|
|
Title: Re:入れ替えの関数
|
|
> poke_tag *temp;
> とする必要がなかったのですかね?
はい。してはいけません。
> 以前大学で、同じswap関数を教わったのですが、
> その時のソースはこうです。
そのときのソースには重大な誤りがあります。
> int *temp;
この状態は、int型へのポインタ変数tempを定義した、というだけです。
tempの中身(つまり、どこを指しているか)は不定です。
関数の中で
int n;
とローカル変数nを定義しただけではnの中身は不定であるのと同じことです。
さて、tempがどこを指しているかが不定の状態で
> *temp = *a;
これをやってしまうと、最悪、プログラムが落ちます。
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
が、正しいソースです。
114ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(133,344ポイント)
Date: 2009/01/04(日) 23:21
No:26431
|
|
Title: Re:入れ替えの関数
|
|
swap関数のtempをどうしてもポインタ変数にしたければ、
#include <stdlib.h>
void swap(int *a, int *b)
{
int *temp;
temp = malloc(sizeof(int));
if (temp == NULL) {
/* 動的確保できなかったときの処理 */
}
else {
*temp = *a;
*a = *b;
*b = *temp;
}
}
のように書くことはできます。
でも、面倒だと思います。
104ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..中級者(9,099ポイント)
Date: 2009/01/04(日) 23:31
No:26432
|
|
Title: Re:入れ替えの関数
|
|
返事ありがとうございます。
Cygwinで実行したことはありますが、普通に動きました。
このプログラムの虫食いが試験問題として出たのですが、
その時の私の答えは
int temp;
として"*"をつけていなかったのですが、
不正解として返却されました。
絶対に先生が間違ってると思い抗議したのですが、
その時の返答が
「引数としてポインタを使ってるんだから、
swap関数内で宣言する変数もポインタでないとだめだから"*"はいるぞ」
と言われて(多少言葉が違うかもしれませんが)結局不正解とされていたんです。
ポインタは一通りの基礎を勉強してある程度は使えるつもりですが、
考え方、概念として kazuoniさんやboxさんのおっしゃるイメージは持っていたので腑に落ちなかったのですが
やっぱり先生の言っていたことが間違っていたということでいいんですよね?
253ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(133,386ポイント)
Date: 2009/01/04(日) 23:40
No:26433
|
|
Title: Re:入れ替えの関数
|
|
> 「引数としてポインタを使ってるんだから、
> swap関数内で宣言する変数もポインタでないとだめだから"*"はいるぞ」
その論理は破綻しています。
引数がポインタ変数であることと、
当該関数でローカルに定義する変数がポインタ変数であるかないかは
全く別の話です。
> やっぱり先生の言っていたことが間違っていたということでいいんですよね?
先生の話は大間違いです。
42ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..中級者(9,292ポイント)
Date: 2009/01/04(日) 23:51
No:26434
| 解決!
|
Title: Re:入れ替えの関数
|
|
> その論理は破綻しています。
> 引数がポインタ変数であることと、
> 当該関数でローカルに定義する変数がポインタ変数であるかないかは
> 全く別の話です。
そうですよね。
ありがとうございます。
これでやっとポインタに関するもやもやが取れました。
やっぱりポインタって、先生でも間違えるほど難しい概念なんでしょうかね??
今は別の関数を作っています。
内容的には簡単なのですが、もっとスマートに書くアルゴリズムを模索中です。
こちらの方もまた質問させていただくかもしれないです。
またその時はよろしくお願いします。
今回回答して下さった方、本当にありがとうございました。
193ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(26,434ポイント)
Date: 2009/01/05(月) 09:49
No:26441
|
|
Title: Re:入れ替えの関数
|
|
>やっぱりポインタって、先生でも間違えるほど難しい概念なんでしょうかね??
そこまで、難しい話ではありません。先生がうっかり間違えたのか、先生がいった意味を
間違えて捉えたものだと思います。先生に、再度確認すべきです。(先生の名誉のためにも)
120ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..中級者(9,202ポイント)
Date: 2009/01/05(月) 13:18
No:26448
|
|
Title: Re:入れ替えの関数
|
|
>先生に、再度確認すべきです。(先生の名誉のためにも)
確認しておきたいのですが、その方は非常勤の方なので今は連絡がつかないです。
今の担当教授にもう一度話を聞いてみます。
90ポイント を落としてしまった。
|
|
|
|
Name: ざこ ..中級者(11,243ポイント)
Date: 2009/01/05(月) 09:38
No:26440
|
|
Title: オセロ
|
|
前にオセロについてご質問させていただきましたが
現在ではリバース可能な場所にのみ置けるように以下のように設定しています。
BOOL COseroView::CanDropDown( int x, int y, int vect_x, int vect_y )
{
int put_stone;
if( m_FlagForWhite )put_stone = WHITE_STONE;
else put_stone = BLACK_STONE;
x += vect_x;
y += vect_y;
if( x < 0 || x >= MASU_NUM || y < 0 || y >= MASU_NUM )return( FALSE );
if( m_Board[x][y] == put_stone )return( FALSE );
if( m_Board[x][y] == BLANK )return( FALSE );
x += vect_x;
y += vect_y;
while( x >= 0 && x < MASU_NUM && y >= 0 && y < MASU_NUM )
{
if( m_Board[x][y] == BLANK )return( FALSE );
if( m_Board[x][y] == put_stone )return( TRUE );
x += vect_x;
y += vect_y;
}
return( FALSE );
}
BOOL COseroView::CanDropDown( int x, int y )
{
if( x >= MASU_NUM || y >= MASU_NUM )return( FALSE );
if( m_Board[x][y] != BLANK )return( FALSE );
if( CanDropDown( x, y, 1, 0 ) )return( TRUE ); //右
if( CanDropDown( x, y, 0, 1 ) )return( TRUE ); //下
if( CanDropDown( x, y, -1, 0 ) )return( TRUE ); //左
if( CanDropDown( x, y, 0, -1 ) )return( TRUE ); //上
if( CanDropDown( x, y, 1, 1 ) )return( TRUE ); //右下
if( CanDropDown( x, y, -1, -1 ) )return( TRUE ); //左上
if( CanDropDown( x, y, 1, -1 ) )return( TRUE ); //右上
if( CanDropDown( x, y, -1, 1 ) )return( TRUE ); //左下
return( FALSE );
}
これにリバースできる場所がない場合判定をしてゲームを終了したいのですが
どうすればいいのかわかりません。
2倍のポイントを手に入れた! 1,048ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(138,866ポイント)
Date: 2009/01/05(月) 10:17
No:26442
|
|
Title: Re:オセロ
|
|
前箇所検索して、全部FALSEが返ってきたら、置ける場所が無いという事ですね。
一箇所でもTRUEが返った場合は、どこかに置ける場所があるという事です。
68ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..中級者(11,408ポイント)
Date: 2009/01/05(月) 10:25
No:26443
|
|
Title: Re:オセロ
|
|
仰ることはわかるのですが・・
試しに
void Nothing()
{
int x,y,no;
for(x=0;x<MASU_NUM;x++){
for(y=0;y<MASU_NUM;y++){
if(CanDropDown(x,y)==FALSE
no++;
}
}
if(no==64){
//ゲーム終了の処理
}
}
という関数いれてみたのですが何の変化もありません。。
これは全マス調べて置ける所が無い場合ゲーム終了としているつもりなのですが。
マスを調べFALSEだった場合noを+1し全マス調べる。noが64個あった場合置ける所がない?ということですので
こうなってます。
165ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..プログラマー(36,803ポイント)
Date: 2009/01/05(月) 10:39
No:26445
|
|
Title: Re:オセロ
|
|
こういう場合、関数が終了したときにnoがどんな値になっているかを調べるとか、CanDropDownがFALSEをきちんと返しているかどうかを確認すればすぐにわかることですよ。
デバッグですばやくバグを見つけられる力を上げていかないといいプログラマーにはなれません。
113ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..中級者(11,448ポイント)
Date: 2009/01/05(月) 10:45
No:26446
| 解決!
|
Title: Re:オセロ
|
|
なんかそんな感じでした。きちんとできたと思います。ありがとうございました。
2倍のポイントを手に入れた! 40ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(138,933ポイント)
Date: 2009/01/05(月) 10:50
No:26447
|
|
Title: Re:オセロ
|
|
私がやるならば、こんな感じかな?
// 置ける箇所がある場合はFALSEを、無い場合はTRUEを返す
BOOL Nothing()
{
for(INT x = 0; x < MASU_NUM; x++)
{
for(INT y = 0; y < MASU_NUM; y++)
{
// TRUEが返ってきた場合は置ける箇所があるので、FALSEを返す
if (CanDropDown(x, y) == TRUE)
{
return FALSE;
}
}
}
// 全箇所検査して、一度もTRUEが返ってこなかったので、置ける箇所は無かったと判断して、TRUEを返す
return TRUE;
}
67ポイント を手に入れた。
|
|
|
|
Name: ゆーずぃ ..ぴよぴよ(572ポイント)
Date: 2008/12/30(火) 12:07
No:26198
|
|
Title: プロトタイプ宣言と戻り値について
|
|
こんにちは。
以下のソースなのですが、どういったプロトタイプ宣言をしたら良いでしょうか?
それこそ覚えていないくらい(汗)の様々なパターンを試してみたのですが
どうやっても何かしらのエラーが出てしまいます。また、自作関数をmainの前に持ってくれば
プロトタイプ宣言が無いとの警告は出ますが無事にコンパイルできます。
他のint型系のプロトタイプ宣言は試行錯誤(一発ではできません;;)の後に
なんとか成功したのですが・・・
なんといいますか、プロトタイプ宣言の戻り値がいまいち理解できていません。
私の理解では、戻り値とは関数内で宣言したローカル変数をグローバルに使えるようにする
ものかなと思っています…。
なので、もし宜しければ戻り値の説明もお願いできませんでしょうか?
宜しくお願いいたします。
#include <stdio.h>
char donaiyanen[20];
main(){
SAKUHYOU("どないやねん");
return 0;}
char SAKUHYOU(donaiyanen){
printf("\n%s\n ENTERで終了",donaiyanen);
getchar();
return 0;}
349ポイント を手に入れた。
|
|
|
|
Name: 初級者 ..入門者(3,259ポイント)
Date: 2008/12/30(火) 12:16
No:26199
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
#include <stdio.h>
void SAKUHYOU(char *s);
int main(void)
{
SAKUHYOU("どないやねん");
return 0;
}
void SAKUHYOU(char *s)
{
printf("\n%s\n ENTERで終了", s);
getchar();
}
今回は戻り値はありません。よってvoid。
46ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(77,908ポイント)
Date: 2008/12/30(火) 12:22
No:26200
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
関数定義の側で関数原型(プロトタイプ)がありませんので...
char SAKUHYOU();
とせざるを得ないでしょう。
ただし、仮引数donaiyanenはint型として扱っていますので、int型とchar*型のサイズが異なる処理系では誤動作します。
理想的には、
char SAKUHYOU(const char*);
char SAKUHYOU(const char *donaiyanen)
{
...
}
と記述すべきです。
160ポイント を手に入れた。
|
|
|
|
|
Name: ゆーずぃ ..かけだし(1,081ポイント)
Date: 2008/12/30(火) 13:35
No:26201
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
>初級者様
早速の返信をありがとうございます。
二つ程質問をさせて下さい。
*s を使っていますが、これは宣言する必要が無いのは何故でしょうか?
また、return 0はたしか正常終了という意味ですよね?なんとなくで関数の最後には入れなければならないものだと思っていたのですが、こちらでは省いていますね。試しにreturn 0;を入れてコンパイルしてみたらエラーになりました。これは当たり前のことなのでしょうが、ますます分からなくなってしまいました。もともとreturn 0;を入れる理由というのは何なのでしょうか?わかり辛い質問で申し訳ありませんが(質問をする私が良くわかっていないので;;)、ご教授願います。
>たかぎ様
こちらも早速の返信をありがとうございます。
三つほど質問をさせて下さい。
戻り値にchar型を使用していますが、初級者様はvoid型でいいとおっしゃっていました。char型を用いたのは私の元ソースを尊重して作成してくださったからでしょうか?そうではなく、たかぎ様のお考えでchar型を使用したのであれば、戻り値がcharとvoidで食い違う理由を教えて頂けませんでしょうか。
二つ目ですが、constは定数を書き換えられないようにするものですよね。もしこの関数を引数を変えて何度も使用するといった場合でもちゃんとそれぞれの引数が反映されるのでしょうか?
また、ここでconstを使う理由・メリットとは何でしょうか?
三つ目ですが、
>仮引数donaiyanenはint型として扱っていますので
とありますが、何故int型として扱われるのですか?何か暗黙のルール等があるのでしょうか?
宜しくお願いします。
>ご回答頂く皆様
なにぶん理解がいたっていませんもので、長々と質問をしてしまうかもしれませんが、お時間の許す限りでいいのでお付き合いください。宜しくお願いいたします。
509ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(26,042ポイント)
Date: 2008/12/30(火) 13:50
No:26202
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
たかぎさんへ
>ただし、仮引数donaiyanenはint型として扱っていますので
型を省略した場合はintと判断されるのでしょうか?
40ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(78,198ポイント)
Date: 2008/12/30(火) 14:34
No:26205
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
> 戻り値にchar型を使用していますが、初級者様はvoid型でいいとおっしゃっていました。char型を用いたのは私の元ソースを尊重して作成してくださったからでしょうか?そうではなく、たかぎ様のお考えでchar型を使用したのであれば、戻り値がcharとvoidで食い違う理由を教えて頂けませんでしょうか。
元がchar型だったからです。
> 二つ目ですが、constは定数を書き換えられないようにするものですよね。
ここでは、ポインタの参照先が更新不可になります。よって、文字列の内容を書き換えるような操作を禁止できます。
> もしこの関数を引数を変えて何度も使用するといった場合でもちゃんとそれぞれの引数が反映されるのでしょうか?
反映されます。
> また、ここでconstを使う理由・メリットとは何でしょうか?
例えば、文字列定数を渡した場合、実際には文字列の書き換えを行うことはできませんので、間違った操作をするとコンパイルエラーにすることができます。
間違った処理を記述したときには、実行時よりリンク時に、リンク時よりコンパイル時にエラーにしてしまう方が得策です。
> >仮引数donaiyanenはint型として扱っていますので
> とありますが、何故int型として扱われるのですか?何か暗黙のルール等があるのでしょうか?
すみません。これは不正確でした。
関数宣言子に(仮引数並びではなく)識別子並びがある場合、関数宣言子と関数本体の間に、識別子並びの描く識別子に対応した宣言が必要になります。
↓こんな感じに
char SAKUHYOU(donaiyanen)
const char *donaiyanen;
{
...
}
通常、識別子並びだけでその後の宣言を省略した場合は勝手にint型とみなされる場合が多いのですが、正確には未定義の動作になるようです。
2倍のポイントを手に入れた! 290ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..かけだし(2,290ポイント)
Date: 2008/12/30(火) 14:46
No:26206
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
ゆーずぃさん
>*s を使っていますが、これは宣言する必要が無いのは何故でしょうか?
プロトタイプで宣言する必要がないのはなぜか、という意味ですね?
プロトタイプ宣言では関数名と戻り値・引数の型を知らせているので、具体的にそこで使う変数名(仮引数名)
は必要の無い情報なんです。「関数定義」ではもちろん必要になりますけどね。
もちろん書いてもいいです。分かりやすいですし。
>また、return 0はたしか正常終了という意味ですよね?
はい、確かにそうなんですけど、C++言語規格で定められているのは「main関数は正常終了時にint値を返す」で、
慣習的(規格ではなかったような)に「プログラム(main)の正常終了時に0を返す」となっています。また、省略するとmainは0を返します。
ですから、自分で作った関数なんかは自分の好きなものを返していいんですよ。
例えば、atoi()なんて、ちゃんと処理ができたら10とか100とか返しますよね?
>戻り値にchar型
これはソースを最小限の変更にとどめただけだと思います。上で述べた通り、何か意図がない限り戻り値の型を固定する必然性はありません。
>ここでconstを使う理由・メリットとは何でしょうか?
「呼び出された先で値が変更されないようにする」というのが理由でしょうね。
SAKUHYOU("どないやねん")とした結果、「なんでやねん」と表示されたら困りますよね(笑)
仮引数にconst修飾子をつけると関数内部で値の書き換えができなくなります(コンパイルエラーになります)。
ただし、SAKUHYOU("あ")とかSAKUHYOU("い")とか、呼び出すときに渡す実引数は自由ですよ。
>何故int型として扱われるのですか?
C言語規格に「規定の実引数拡張」というのがあって、型情報のない実引数に対して整数なら汎整数拡張、
実数ならfloat→doubleに拡張される、というようなものがあったのですが、C++では未定義だったような・・・
C言語の場合、func()とfunc(void)は別物(前者は型関知なし)なのですが、C++では一緒だった気がします。
どっちにしろ、型が決定できるような関数なら、原則として型は省略しない方がいいでしょう。思わぬバグになってしまうので・・・
520ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..入門者(3,316ポイント)
Date: 2008/12/30(火) 16:07
No:26208
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
関数のプロトタイプ宣言、実引数、仮引数、戻り値について、
入門書を隅から隅まで読んでじゅうぶん理解してください。
57ポイント を手に入れた。
|
|
|
|
|
Name: ゆーずぃ ..かけだし(1,078ポイント)
Date: 2009/01/04(日) 01:12
No:26402
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
返信が遅くなり、申し訳ございませんでした。今しばらくお付き合い頂ければ幸いに思います。
>たかぎ様
大変分かりやすい回答をありがとうございました。これからもお世話になるかとは思いますが、宜しくお願い致します。
>SCI様
気にするなだなんて、滅相もございません!本当に有難うございます。
せっかくお越し頂いたので、もう少し私の質問地獄にお付き合い下さい(><;)笑
>>*s を使っていますが、これは宣言する必要が無いのは何故でしょうか?
という私の質問なのですが、これはプロトタイプ宣言時に、ということではなく*s に関係する変数の宣言自体が行われていないようでしたので、*sを使うにあたって*sという変数を宣言する必要は無いのかなと思ったのです。
次にreturn 0;についてなのですが、main関数は正常終了時に0を返すというのはわかりました。ですが、
>ですから、自分で作った関数なんかは自分の好きなものを返していいんですよ。
例えば、atoi()なんて、ちゃんと処理ができたら10とか100とか返しますよね?
とおっしゃっていましたが、
1.自分で作った関数に返した好きな数字は何に使われるのですか?好きに返したreturnの結果を何かで参照して使ったりするのでしょうか? それとも元々何の意味も持っていない為に、何事も無かったかのように消滅して終りなのでしょうか??
2.私の淡い知識では -1はEOFだと認識しておりましたが、それはmain関数に限ったことなのでしょうか?もし自作関数のテキトー戻り値に-1を入れても問題はないのですか?
3.atoi()についてなのですが、これはint型に変換する為の関数ですよね。int型に変換するだけなのに何故テキトーな戻り値が発生するのでしょうか?というか発生させるのは人の手で、ですか?それともヘッダ内の処理でテキトーな戻り値を自動的に発生させているということでしょうか?
その他については理解しました。勉強になります。
なんだかものすごい的外れなことばかり言って大変に恐縮ですが、お手すきの時間がございましたら宜しくお願い致します。
>初級者様
勉強不足で申し訳ございません。ですが、入門書だけではわからない実際の動作や、実戦時に使える知識が欲しかったものでこちらに質問させて頂きました。(とはいえこの様な初心者が100年早い!のですが^^;)
暖かい叱咤と、貴重なソースをありがとうございました。
3ポイント を落としてしまった。
|
|
|
|
|
Name: SCI ..入門者(3,769ポイント)
Date: 2009/01/04(日) 01:24
No:26404
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
なるほど、つまりvoid SAKUHYOU(char *s)
{
printf("\n%s\n ENTERで終了", s);
getchar();
}
このとき、「なぜsが使えるか」ということですね?
宣言していないように見えるかもしれませんが、SAKUHYOU(char *s)で宣言されています。
>1.
自分で使いたいように使えばいいです。必要ないなら返さなくてもいい。
例えば、「失敗したら-1、成功したら0」というように「自分で決めておく」と、関数が成功したか失敗したか呼び出し元で知ることができますよね。
>2.
EOFも、fgetsとかfreadの仕様として組み込まれているだけです。これはmain関数とは関係のないことですね。
もちろん、自作関数が-1を返したって全然問題ないです。
>3.
テキトーというか、この例を出したのは「正常終了は0を返す」という文の否定として挙げただけです。
内部でテキトーな数値が作られているわけではありません。
「関数」や「戻り値」について調べてみてはいかがでしょう?
464ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..入門者(2,574ポイント)
Date: 2009/01/05(月) 02:18
No:26435
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
例えば、ゆーずぃさんが、
整数だけしか計算出来ないとある友達に「1+1は?」と聞いたとます。
その友達は計算した結果をゆーずぃさんに教えるということにします。
すると、とある友達は「2だよ」と答えました。
ここで、関数は「とある友達」という事になります。
関数とはプログラム中に呼べば「何かしらの動作をする」ものですよね。
この場合ですと、とある友達(関数)が「1+1という計算をした」ということになります。
しかし、整数だけしか計算できない友達ですので「1.5+3.2は?」
のような小数計算をさせようとすると「型が違います」と怒られます。
小数を計算する用の友達(関数)が必要になるわけです。
そして引数はゆーずぃさんが、とある友達に「1+1は?」と聞いた時に出た数字のことですよね。
とある友達に、引数を二つ渡しています。(1と1)
今は小数を使わず整数ですので、整数ですよという意味のint型であったりと
型とは、そういった感じで使っていきます。
最後に戻り値ですが、とある友達が「2だよ」と答えました。
それが戻り値です。
とある友達(関数)から足し算の答えが返ってきた(戻り値)というだけです。
この答えをどう使うかは、関数を作った本人が一番理解していると思うので、
判断して使っていきましょう。
しかし、その友達がゆーずぃさんに答えを教えなかったとします。
すると、「戻り値がありません」と怒られます。
つまり、returnを書いていないからということです。
また、その友達が「2.0だよ」と小数で答えた場合、
「戻り値の型が違います」と怒られます。
関数を作るときは、型を揃えるよう気を付けてください。
流れとしては、
・何か処理したい。(関数を呼ぶ・関数を自分で作る)
・その為にはどうしたらいいでしょうか(引数がいるのかどうか)
・型があっているのか。
・その関数で得た結果を返してもらいたいのか(戻り値がいるかどうか)
という感じで考えればいいかなーと思います。
書き方としては、
戻り値 関数名(引数1、引数2)というのが基本ですので
よく見かける void main(void)は
戻り値なし、mainという名前の関数、引数なし
という意味になります。
int main(void)となると
戻り値int型、mainという名前の関数、引数なし
ということですので、この場合mainの最後に return で整数を返して下さい。
そうしないと、「戻り値はint型と言っているのに、何も返していない」と怒られます。
長くなりましたけど、最初に使う関数・引数・戻り値のイメージはこんな感じです。
(あくまでイメージとしてとらえてくださいね;)
933ポイント を手に入れた。
|
|
|
|
|
Name: ゆーずぃ
Date: 2009/01/16(金) 03:47
No:261981232045226
|
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
SCI様、BEMANI様
有り難いコメントを頂いたにもかかわらず、返信が遅れまして申し訳ありませんでした。
大変勉強になりました。SCI様が言われたように色々と自分でも調べてみましたが、まだまだ戻り値は奥が深そうです。ですが、皆様のお陰で靄が晴れた気分です。本当にありがとうございました。これからも様々な処で壁に突き当り、皆様にご迷惑をお掛けするかもしれませんが、その際は何卒宜しくお願い致します。
|
|
|
|
|
Name: ゆーずぃ
Date: 2009/01/16(金) 03:48
No:261981232045326
| 解決!
|
Title: Re:プロトタイプ宣言と戻り値について
|
|
チェックをつけ忘れましたが、これにて解決とさせていただきます。本当に有難うございました。
|
|
|
|
Name: きらりん ..かけだし(1,873ポイント)
Date: 2008/12/28(日) 00:52
No:26106
|
|
Title: 名前空間について
|
|
前日に立てたスレッドでは、お世話になりました!
教えてもらった方法でファイル分割はできるようになったんですが、新たな壁にぶちあたりましたorz
ある.cppファイルで宣言したnamespace内の関数をmain内で使用しようと思ったのですがよくわからないエラーがでて困ってます;
こんな感じのことをしてみました。
//********************************************
//test.cpp
//********************************************
#include "Dxlib.h"
namespace test {
void kansu() {
DrawFormatString(0,20,GetColor(255,255,255),"test");
}
}
//********************************************
//main.cpp
//********************************************
#include "DxLib.h"
#include "GV.h"
using namespace test;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
while(!ProcessMessage() && !ClearDrawScreen() && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){
ClearDrawScreen();
kansu();
wait_fanc();
fps();
ScreenFlip();
}
DxLib_End() ;//終了処理をする関数
return 0 ;
}
//********************************************
という感じです。
するとエラーが、
error C2871: 'test' : この名前を指定された名前空間は存在しません。
error C3861: 'kansu': 識別子が見つかりませんでした
とでてしまいました・・・。
また、test.cppをincludeしてみたら良いのかなと思ってmainでincludeしてみると
error LNK2005: "void __cdecl test::kansu(void)" (?kansu@test@@YAXXZ) は既に main.obj で定義されています。
fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
コンパイルについてよくわかってないんですが、cppは勝手に読み込まれるものなのかなと思って、ファイル名を.h(test.h)にしたものをmainでincludeしてコンパイルしてみたらコンパイルが通りました。
しかしこれで書くのはおかしいんじゃないか・・・と思って色々調べたんですがわかりませんでした;
744ポイント を落としてしまった。
|
|
|
|
Name: きらりん ..かけだし(2,322ポイント)
Date: 2009/01/01(木) 23:58
No:26345
|
|
Title: Re:名前空間について
|
|
聞いておきながら、帰省という罠を忘れていて返信大変遅れました・・・。
本当に申し訳ないです。
上記サイトを読んでもよくわからなかったのですが、名前空間を使ったファイルを読み込ますには、拡張子.hファイルの方が良いということなのでしょうか。。。
2倍のポイントを手に入れた! 130ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..中級者(10,153ポイント)
Date: 2009/01/02(金) 03:30
No:26357
|
|
Title: Re:名前空間について
|
|
素人の知識で申し訳ないのですが
test.hを作成しここにkansu関数のプロトコル宣言をします。
これをmain.cpp でインクルードしてください。
ご存知でしたら申し訳ありませんがプロトコル宣言とは
void kansu(void);
みたいに書き処理の使用前に処理を書かなくても使えるようにすることです。
150ポイント を落としてしまった。
|
|
|
|
|
Name: きらりん ..入門者(2,670ポイント)
Date: 2009/01/03(土) 17:40
No:26390
|
|
Title: Re:名前空間について
|
|
僕の質問の仕方が間違ってるのかな・・・;
自作関数の話じゃなくて、namespaceの話です><
35ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..入門者(3,298ポイント)
Date: 2009/01/03(土) 17:57
No:26391
|
|
Title: Re:名前空間について
|
|
>紅葉さん
言わずもがなですが、
プロトコル宣言
ではなくて
プロトタイプ宣言
です。
18ポイント を落としてしまった。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(56,180ポイント)
Date: 2009/01/03(土) 18:24
No:26393
|
|
Title: Re:名前空間について
|
|
//********************************************
// test.h
//********************************************
#ifndef INCLUDE_TEST_H
#define INCLUDE_TEST_H
namespace test {
void kansu();
}
#endif // INCLUDE_TEST_H
//********************************************
// test.cpp
//********************************************
#include "Dxlib.h"
#include "test.h"
namespace test {
void kansu() {
DrawFormatString(0,20,GetColor(255,255,255),"test");
}
}
//********************************************
//main.cpp
//********************************************
#include "DxLib.h"
#include "GV.h"
#include "test.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
while(!ProcessMessage() && !ClearDrawScreen() && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){
ClearDrawScreen();
test::kansu();
wait_fanc();
fps();
ScreenFlip();
}
DxLib_End() ;//終了処理をする関数
return 0 ;
}
元のソースでusing namespaceを使っていますが
using namespaceを使うなら、最初からnamespace使わなければいいのでは?
363ポイント を手に入れた。
|
|
|
|
|
Name: きらりん ..入門者(2,825ポイント)
Date: 2009/01/04(日) 17:39
No:26420
| 解決!
|
Title: Re:名前空間について
|
|
>>GPGA様
このソースのおかげで皆様が言っていた意味がやっとわかりました!
プロトタイプ宣言の中にもnamespaceを書かないといけなかったんですね・・・。
using namespaceは実際自分でやりたいと思ってることをするときは使わないのですが、この例ではあったほうが書きやすいかなと思って書いてました。余計わかりにくくなったみたいですみません;
155ポイント を手に入れた。
|
|
|
|
Name: アンドリュー ..ぴよぴよ(29ポイント)
Date: 2009/01/03(土) 20:06
No:26395
|
|
Title: 並べ替えのアイデア
|
|
0 から n-1 の合計n個の数字が、配列a[n]に入ってるのですが、
並んでいる順番をばらばらにしたいのです。
たとえば、
a[5]={0,1,2,3,4}
を、
a[5]={3,0,4,2,1}
といった具合に。
乱数を使い、実行するたびに結果が異なるようにしたいのですが、
何かいい方法はないでしょうか?
ついでに言うと、配列の数が5ではなく10000とか100000とかでも
比較的早く、まんべんなくばらばらになるような方法を…。
29ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(133,076ポイント)
Date: 2009/01/03(土) 20:28
No:26396
|
|
Title: Re:並べ替えのアイデア
|
|
ほんの一例です。
0からn-1の範囲にある整数の乱数を2個(i,jとします)発生させて、
a[i]とa[j]を入れ替えます。
この操作を所定の回数だけ繰り返せば、a[]の中身がばらけると思います。
「所定の回数」をいくつにすればいいかは、いろいろ試してみてください。
95ポイント を手に入れた。
|
|
|
|
|
Name: アンドリュー ..ぴよぴよ(0ポイント)
Date: 2009/01/03(土) 20:50
No:26398
| 解決!
|
Title: Re:並べ替えのアイデア
|
|
ぼくがやろうとしていることはランダムソートと呼ぶのですか!
たしかに入れ替えを繰り返すうちにばらつきが出てきますね。
いろいろ調べてみようと思います。ありがとうございました。
48ポイント を落としてしまった。
|
|
|
|
|
Name: lbfuvab ..中級者(14,293ポイント)
Date: 2009/01/04(日) 05:44
No:26409
|
|
Title: Re:並べ替えのアイデア
|
|
後、一応自前で実装するならこうします。
xor128内のx,y,z,wの値を変えると、毎回違う結果になります。
#include<stdio.h>
#define SWAP(a,b) (a^=b,b^=a,a^=b)
#define MAX 0xffffffff
unsigned long xor128(){ //速さならXorShift
static unsigned long x=123456789,y=362436069,z=521288629,w=88675123;
unsigned long t;
t=(x^(x<<11));x=y;y=z;z=w; return( w=(w^(w>>19))^(t^(t>>8)) );
}
int shuffle(int *buf,int len){
int i;
for(i=0;i<len;i++)
SWAP(buf[i],buf[(int)(xor128()/(double)MAX)]);
return 0;
}
260ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(3,810ポイント)
Date: 2009/01/04(日) 06:19
No:26410
|
|
Title: Re:並べ替えのアイデア
|
|
>#define SWAP(a,b) (a^=b,b^=a,a^=b)
これは今回のように仕様が確定している前提では上手くいきますね。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(304,110ポイント)
Date: 2009/01/04(日) 11:24
No:26412
|
|
Title: Re:並べ替えのアイデア
|
|
ちょっと疑問に思ったのですが、
>(int)(xor128()/(double)MAX)
この結果は毎回0か1のどちらかしかならないような気がしますが、
それはそういうものなのでしょうか?
>SWAP(buf[i],buf[(int)(xor128()/(double)MAX)]);
仮に上の buf[i]と buf[?]の交換だったとして、この SWAPの方式だと
もし iと ?が同じだった場合破綻しませんか?
231ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..中級者(14,583ポイント)
Date: 2009/01/04(日) 15:27
No:26413
|
|
Title: Re:並べ替えのアイデア
|
|
>>(int)(xor128()/(double)MAX)
>
> この結果は毎回0か1のどちらかしかならないような気がしますが、
>それはそういうものなのでしょうか?
>それはそういうものなのでしょうか?
>
>
>>SWAP(buf[i],buf[(int)(xor128()/(double)MAX)]);
>
> 仮に上の buf[i]と buf[?]の交換だったとして、この SWAPの方式だと
>もし iと ?が同じだった場合破綻しませんか?
わわわっ、すいません。間違ってました。
コンパイルせずに書くとやっぱりまずいですね。
2行目は
#define SWAP(a,b) ((a!=b)?(a^=b,b^=a,a^=b):0)
15行目は
SWAP(buf[i],buf[(int)((xor128()/(double)MAX)*len)]);
にします。
失礼しました。
290ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(138,798ポイント)
Date: 2009/01/04(日) 17:17
No:26417
|
|
Title: Re:並べ替えのアイデア
|
|
私が好きなのは、Fisher Yatesかな?
理論自体はboxさんが言われているのと同じですね。
シンプルで、なおかつ最低限のシャッフル回数で済むのでスピードもそこそこです。
サンプルソースを載せておきますね。
#include <stdlib.h>
// int* buf = データ格納用バッファ
// int length = データ格納用配列の長さ
void shuffle(int*buf, int length)
{
int i, index, swap;
// 配列の初期化
for (i = 0; i < length; ++i)
{
buf[i] = i;
}
// シャッフル
for (i = length - 1; i >= 0; --i)
{
index = rand() % length;
swap = buf[i];
buf[i] = buf[index];
buf[index] = swap;
}
}
188ポイント を手に入れた。
|
|
|
|
Name: もんと ..ぴよぴよ(299ポイント)
Date: 2008/12/31(水) 22:50
No:26282
|
|
Title: DXライブラリ3Dの導入
|
|
C言語初心者です。
OSはWindowsXP。
Visual C++ 2008を使用して3Dのゲームを作ってみたいと思っているのですが、
DXライブラリ3D導入時に下記のビルドエラーが発生します。
---------------------------------------------------------------
リンクしています...
DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_CLSID_DirectMusicPerformance" は未解決です。
DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_IID_IDirectMusicPerformance8" は未解決です。
DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_CLSID_DirectMusicLoader" は未解決です。
DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_IID_IDirectMusicLoader8" は未解決です。
DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_CLSID_DirectMusicSegment" は未解決です。
DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_IID_IDirectMusicSegment8" は未解決です。
DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_GUID_StandardMIDIFile" は未解決です。
C:\Documents and Settings\ABC\デスクトップ\test\Debug\test.exe : fatal error LNK1120: 外部参照 8 が未解決です。
----------------------------------------------------------------
これはどういった部分が問題となっているのでしょうか?
参考にさせていただいたサイト↓このサイトの手順通りに行っています。
http://fatalita.sakura.ne.jp/3DLib/Install/LIB/index.html
299ポイント を手に入れた。
|
|
|
|
Name: もんと ..ぴよぴよ(413ポイント)
Date: 2008/12/31(水) 23:39
No:26287
|
|
Title: Re:DXライブラリ3Dの導入
|
|
確認しました。
双方の掲示板において大変な違反行為をしてしまったようです。
申し訳ありませんでした。
56ポイント を手に入れた。
|
|
|
|
|
Name: もんと ..ぴよぴよ(494ポイント)
Date: 2009/01/01(木) 00:59
No:26294
|
|
Title: Re:DXライブラリ3Dの導入
|
|
解答有難う御座います。
まずマルチポストの件ですが知恵袋の方の回答の締め切りをしました。
これでマルチポストにならないかと聞かれると正直解りませんので、lbfuvabさんのお答えに対する返事はgooの方に問い合わせてからにさせていただきます。
重ね重ね申し訳ありません。
81ポイント を手に入れた。
|
|
|
|
|
Name: もんと ..ぴよぴよ(552ポイント)
Date: 2009/01/01(木) 08:29
No:26322
|
|
Title: Re:DXライブラリ3Dの導入
|
|
解答有難う御座います、そして明けましておめでとう御座います。
確認しましたが、2008/12/12の時点でJEX氏が質問に対する回答を保留されております。(PCが破損されたとかで)
Chatより、28日の時点でもその状態は続いているようです。
58ポイント を手に入れた。
|
|
|
|
|
Name: もんと ..ぴよぴよ(846ポイント)
Date: 2009/01/01(木) 10:38
No:26324
|
|
Title: Re:DXライブラリ3Dの導入
|
|
解答有難う御座います。
1.VS2008EE、DirectX9SDK(DXSDK_Nov08.exe)、PlatFormSDK(PSDK-x86.exe)をインストール
2.VS2008EEにてプロジェクトを作成
3.新しい項目C++ファイルを作成(Main.cpp)
4.新しいフィルタを作成(DxLib3D)
5.C:\Documents and Settings\ABC\デスクトップ\test\testにmyLibフォルダ、DxLib.hを投入。
6.DxLib3DフィルタにmyLibフォルダをドラッグアンドドロップ
7.C:\Documents and Settings\ABC\デスクトップ\test\testにDxLibAd.libとDxLibWd.lib、『DxLibA.libと DxLibW.libを投入。
8.プロジェクトのプロパティでDebugとReleaseの構成プロパティ→全般→文字セットをマルチバイトに変更。
9.プロジェクトのプロパティで構成プロパティ→C/C++→コード生成→ランタイム ライブラリをDebugはマルチスレッド デバッグ (/MTd)、Releaseはマルチスレッド (/MT)に変更。
10.以下のソースを実行
---------------------------------------------------
#include "DxLib.h"
int DxMain()
{
if ( FAILED(mL.Init() ) )
return -1;
WaitKey();
return 0;
}
---------------------------------------------------
以上です。
以下のサイトを参考にしました。
http://fatalita.sakura.ne.jp/3DLib/Install/LIB/index.html
294ポイント を手に入れた。
|
|
|
|
|
Name: もんと ..ぴよぴよ(914ポイント)
Date: 2009/01/01(木) 11:26
No:26326
|
|
Title: Re:DXライブラリ3Dの導入
|
|
解答有難う御座います。
ディレクトリの設定とはIncludeフォルダとLibフォルダをVC++ ディレクトリに追加することでしょうか?
もしそうであれば自動的に登録されているのですが。
68ポイント を手に入れた。
|
|
|
|
|
Name: もんと ..かけだし(1,031ポイント)
Date: 2009/01/01(木) 12:09
No:26329
|
|
Title: Re:DXライブラリ3Dの導入
|
|
勘違いしているようでしたらすみません。
DirectX9SDKをインストールした時点でVS2008EEのツール→オプション→プロジェクトおよびソリューション→VC++ ディレクトリ のインクルードファイルに「C:\Program Files\Microsoft DirectX SDK (November 2008)\Include」というものがすでに存在しています。
これ以外にDirectXで必要な設定が存在するのでしょうか?
117ポイント を手に入れた。
|
|
|
|
|
Name: もんと ..かけだし(1,123ポイント)
Date: 2009/01/04(日) 01:29
No:26405
|
|
Title: DXライブラリ3Dの導入
|
|
PCを変え、体験版ではなく製品版のVS2008を導入したら正常に動作しました。
原因はわかりませんでしたがこれで開発ができそうです。
有難う御座いました。
2倍のポイントを手に入れた! 92ポイント を手に入れた。
|
|
|
|
Name: あなざぁ ..入門者(2,803ポイント)
Date: 2008/12/29(月) 00:19
No:26164
|
|
Title: [DXライブラリ]VC++2008の初期設定で
|
|
こんばんは。
VC++ 2008でDXライブラリを用いてゲームプログラミングをしようと思うのですが、
初期設定で失敗してしまったような気がする箇所があります。
http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html#R2
上記のページで紹介されている、「VisualC++ 2008 Express Edition でDXライブラリを使うための設定を行う」という部分の、
C ディレクトリリストにDXライブラリのパッケージ内に入っている
『プロジェクトに追加すべきファイル_VC用』フォルダのパスを追加します。
のところで、DXライブラリのフォルダのパスは追加したものの、誤って別の項目を削除してしまった気がするのです。
どなたかデフォルトの状態を教えてくださいませんか?
ちなみに今の状態は、
$(VCInstallDir)include
$(VCInstallDir)atlmfc\include
$(WindowsSdkDir)\include
$(FrameworkSDKDir)include
C:\Documents and Settings\...\My Documents\DxLib_VC\プロジェクトに追加すべきファイル_VC用
となっています。
344ポイント を手に入れた。
|
|
|
|
Name: Justy ..ハッカー(295,862ポイント)
Date: 2008/12/29(月) 02:27
No:26173
|
|
Title: Re:[DXライブラリ]VC++2008の初期設定で
|
|
多分それで問題ないと思いますよ。
うちのは 2008 STD版ですが、上4つ+自分で追加したパスになっていますから。
36ポイント を手に入れた。
|
|
|
|
|
Name: あなざぁ ..入門者(2,824ポイント)
Date: 2009/01/03(土) 18:16
No:26392
| 解決!
|
Title: Re:[DXライブラリ]VC++2008の初期設定で
|
|
返信が遅れてしまい申し訳ありません;
ありがとうございます。安心しました!
21ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(44,490ポイント)
Date: 2009/01/03(土) 03:09
No:26382
|
|
Title: Re:リバーシ作ってみました
|
|
正月なのにとっても暇なのでリバーシ遊んでみましたw
やっぱりAIって難しそうですね。。
・一番多くとる場所
・角攻め
・先読み
・・・
考えるのにとても苦労しそうですね。。
参考ページはあるものの、
独自のを実装しようとしたら疲れそうです。。
制作お疲れ様でした!
87ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..中級者(14,013ポイント)
Date: 2009/01/03(土) 03:57
No:26384
|
|
Title: Re:リバーシ作ってみました
|
|
>正月なのにとっても暇なのでリバーシ遊んでみましたw
本当にありがとうございます。
>独自のを実装しようとしたら疲れそうです。。
そうですよね。
これも楽にするために今の盤面しか考えないからどうしても弱いんです。
しかも検索に時間かけると非同期がどうだのマルチスレッドがどうだのとさらに問題が・・・・
118ポイント を手に入れた。
|
|
|
|
Name: notta ..ぴよぴよ(97ポイント)
Date: 2009/01/02(金) 17:36
No:26365
|
|
Title: 識別子
|
|
一時停止の機能を付けると
エラーで
龍神録プロジェクト\50章\mydat\source\main.cpp(58) : error C3861: 'control_main': 識別子が見つかりませんでした
って出ました。
よくわかりません教えてください。
97ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(44,403ポイント)
Date: 2009/01/02(金) 18:26
No:26367
|
|
Title: Re:識別子
|
|
^^;
それがどんな書き方かよく分かりませんが、
とりあえず言えることは
control_mainという変数が宣言されていないから
このようなエラーがでます。
型がよく分かりませんが、int型であれば、
int control;
などの変数宣言が書かれていないことになります。
<訂正>
× int control
○ int control_main
125ポイント を手に入れた。
|
|
|
|
|
Name: notta ..ぴよぴよ(128ポイント)
Date: 2009/01/02(金) 20:11
No:26375
| 解決!
|
Title: Re:識別子
|
|
ありがとうございます。おかげで助かりました。
まだ基本もほとんど知らないのでもっと勉強してからやってみたいと思います。
31ポイント を手に入れた。
|
|
|
|
|
Name: array [URL] ..熟練のプログラマー(42,835ポイント)
Date: 2009/01/03(土) 03:44
No:26383
|
|
Title: Re:識別子
|
|
すみません。修正しておきますね。
ここに書かせてもらいますと
--- function.h ---
//control.cpp
GLOBAL void control_main();
が抜けてるた為だと思います。
というか、ご迷惑おかけしました> Dixqさん、kazuoniさん
以外にしっかり、見てくれてる方が居るんだなと嬉しくも思いますが
C言語サイト内の内容外だと、掲示板利用者さん達が把握してないと思うので
私の方にも掲示板置いておこうと思います。
152ポイント を手に入れた。
|
|
|
|
Name: しょしょしょしんしゃ ..中級者(11,408ポイント)
Date: 2009/01/02(金) 23:30
No:26377
|
|
Title: クラメールの公式のプログラミング
|
|
Cプログラム 二乗法を実行
えーと あるプログラムで悩んでいます。
問題文は以下の通りです。
xy平面に分布する次の10個の点について、
直線 y=ax+b で近似する最小二乗法のCプログラムを書き、
実行してaとbを求めよ。
例えば、
(x,y)=(2,4),(3,6),(4,9),(5,9),(6,13),(7,14),(8,15),(9,20),(10,19),(11,21)
といった感じです。
友人と考えたのですが、なかなかできませんでした。
エラーが発生して、どこが間違っているのですか?
以下がプログラムです。もしかすると、エラーが出ない場合もあります。
どうかお願いします。
#include <stdio.h>
int main(){
int x[10]={2,3,4,5,6,7,8,9,10,11};
int y[10]={4,6,9,9,13,14,15,20,19,21};
int xny[3]; //[x,1,y]_テーブル
int xy[2][3]; //正規方程式
double del; //_係数の行列式
double a,b; //回帰式の係数
int i,j,k,n=10;
//_連立方程式をクリヤー
for(i=0;i<2;i++) {
for(j=0;j<2;j++) {
xy[i][j]=0;
}
}
//_連立方程式構築
for(k=0;k<n;k++) {
//_[x,1,y]_テーブル準備
xny[0]=x[k];
xny[1]= 1;
xny[2]= y[k];
//_連立方程式に積和累計
for(i=0;i<2;i++){
for(j=0;j<3;j++){
xy[i][j]+=xny[i]*xny[j];
}
}
}
//_連立方程式を解く(クラーメルの公式)
del=xy[0][0]*xy[1][1]-xy[1][0]*xy[0][1];
a=(xy[0][2]*xy[1][1]-xy[1][2]*xy[0][1])/del;
b=(xy[0][0]*xy[1][2]-xy[1][0]*xy[0][2])/del;
printf("a=%f,b=%f\n",a,b);
return 0;
}
217ポイント を手に入れた。
|
|
|
|
Name: box ..ハッカー(132,981ポイント)
Date: 2009/01/03(土) 00:25
No:26378
|
|
Title: Re:クラメールの公式のプログラミング
|
|
> //_連立方程式をクリヤー
> for(i=0;i<2;i++) {
> for(j=0;j<2;j++) {
> xy[i][j]=0;
jは0,1だけでいいですか?
30ポイント を手に入れた。
|
|
|
|
Name: 孫 ..ぴよぴよ(395ポイント)
Date: 2009/01/02(金) 18:44
No:26369
|
|
Title: 宿題をやっておりまして・・・・・。2
|
|
宿題なのですが、『宿題をやっておりまして・・・・・。』で、
Dixg(管理人)に言われたとうり、C++を入れて自力でやっていたんですが、
何回もやっても、どうしてもエラーが出てしまうので、
力をお貸しいただけないかと、またきてしまった訳でして、よろしくお願いします。
{
char str[255];
int i;
printf("文字列の入力");
getchar(str);
i=0;
while(str != \0){
i++;
}
while(i>0){
printf("%c",str[i]);
i--;
}
}
getchar(str)のところで「error C2660: 'getchar' : 関数に 1 個の引数を指定できません。」
while(str!=\0)のところで「error C2017: エスケープシーケンスの使い方が正しくありません。」
となってしまいます。
なぜでしょうか。
212ポイント を手に入れた。
|
|
|
|
Name: non ..プログラマー(26,314ポイント)
Date: 2009/01/02(金) 19:16
No:26370
|
|
Title: Re:宿題をやっておりまして・・・・・。2
|
|
>
> {
> char str[255];
> int i;
>
> printf("文字列の入力");
> getchar(str);
getcharは1文字を入力します。文字列を入力するなら、gets(str)です。
> i=0;
> while(str != \0){
文字を表すには、'\0'のようにシングルクォーテーションで囲みます。
ただ、strはアドレスになりますから、
while(str[i]!='\0')と書きます。
> i++;
> }
> while(i>0){
> printf("%c",str[i]);
> i--;
> }
> }
>
> getchar(str)のところで「error C2660: 'getchar' : 関数に 1 個の引数を指定できません。」
>
> while(str!=\0)のところで「error C2017: エスケープシーケンスの使い方が正しくありません。」
>
> となってしまいます。
> なぜでしょうか。
>
125ポイント を手に入れた。
|
|
|
|
|
Name: dic ..中級者(9,116ポイント)
Date: 2009/01/02(金) 19:30
No:26371
|
|
Title: Re:宿題をやっておりまして・・・・・。2
|
|
getchar はファイルへのポインタを指定します
\0 ではエスケープシーケンスとして認識できません
'\\0' と指定しましょう
ファイルからの入力か
キーボードからの入力か分かりませんが
孫 さん予想した動きをするものを作ってみました
#include <string.h>
int _tmain(int argc, _TCHAR* argv[])
{
char str[255];
int i;
printf("文字列の入力");
scanf( "%s", str );
// getchar(str);
i=0;
// while(str[i] != '\\0'){
// i++;
// }
i = strlen( str ) - 1;
while(i>=0){
printf("%c",str[i--]);
// i--;
}
return 0;
}
参考になれば幸いです
318ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..かけだし(1,641ポイント)
Date: 2009/01/02(金) 19:32
No:26372
|
|
Title: Re:宿題をやっておりまして・・・・・。2
|
|
>>getchar(str);
getchar()には引数を指定できませんので「関数に1個の引数を指定できません。」と出ます。
getcharは1文字ですので、文字列を入れたいのであれば gets(str)になります。
>>while(str != \0){
>> i++;
>>}
文字列の比較をやっているここですが、
エスケープシークエンス(\0)にシングルクォーテーションが入っていないためエラーになります。
書くのであれば while(str != '\0') と書きましょう。
あと、このwhile文では永久ループになってしまいます。
「str」に格納した文字が最後でないなら i++(文字数をカウント) としていますが、
このままだと、「i」が増えるだけで「str」は「\0」にならず、ループから抜けないないです。
書くのであれば while(str[i] != '\0')です。
「i」は1→2→3・・・と増えていき、'\0'が来たら抜けます。
最後のwhileで画面に出力されていますが、
このままだと入力した文字が逆に出力されますが大丈夫でしょうか?
「i」は5→4→3・・・と減っていくので、abcdと入力すると「dcb」と表示されます。
逆に表示するという宿題であれば問題ないです。
また、while(i>0) としているので、配列の0番目の要素(最初に入力した文字)は表示されません。
450ポイント を落としてしまった。
|
|
|
|
|
Name: 孫 ..ぴよぴよ(425ポイント)
Date: 2009/01/02(金) 20:04
No:26374
| 解決!
|
Title: Re:宿題をやっておりまして・・・・・。2
|
|
親切にどうもありがとうございます。
喉につっかえたものが取れました。
30ポイント を手に入れた。
|
|
|
|
Name: BEMANI ..かけだし(1,673ポイント)
Date: 2009/01/02(金) 03:44
No:26359
|
|
Title: 本当にただの雑談です
|
|
新年明けましておめでとうございます。
去年ありました、しょうもないミスで結構時間費やした〜
というプログラム経験でも。
float a = 1 / 2;
テクスチャを張るときに計算をしようとしていた時の話なのですが、
めちゃくちゃ簡単に書くと上のような感じです。
自分的には0.5が入ってくれていると信じていたのですごく悩みました。
計算間違ってないよな〜 とデバッグもせず、違うところが間違っていると思い込んでいました。
皆様もそういった、しょうもないミスで悩んだ経験を書いてみませんか><;
それでは皆様、皆様良いお年を過ごしてくださいませ〜。
232ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(942,979ポイント)
Date: 2009/01/02(金) 04:22
No:26360
|
|
Title: Re:本当にただの雑談です
|
|
あけおめです〜♪
いや〜苦労した話なら山のようにありますよw
VC++を使い始めたばかりの頃だったでしょうか、
計算結果がうまくいかなかったので、デバッグしてみたんですね。
自動変数の確認で、例えばある変数の中身が途中どのように変わっているか確認するような感じですね。
その時、あるiの値がどうしても予想外の値になってしまっていたんです。
よくわからないから最初からみていこうと
i=0;
の直後を見たのですが、iに0以外が入ってるんです。
なんでだよ〜!と散々まる一日悩んで、結局原因は、設定が「Release」になっていたという・・。
または、オーバーフローすると全然違うところで用意した変数の中身が変わる場合があるってこと知らなかった頃、
途中で入るはずのない値が変数に入ってた時本当に悩みました。
でもきっとそういうのって必要な経験で、例えばしょうもないミスで重大なバグにつながったりした経験があると、
より一層エラーチェックやバグ回避プログラムに気を配るようになると思いますし、
その方法も、痛い経験が活かされたものになるんだと思います。
私は過去の痛い経験から、今ではいたるところで変数に変な値が入ったら
printf("error number : ○○○○\n");
みたいに表示するようにしています・・ビビりすぎかも^^;
あ〜そういえばもうひとつ。またJustyさんの話を勝手にして申し訳ないんですが・・・。
以前Justyさんにトライグラフの話を聞きました。
たとえばこんなプログラム
#include <stdio.h>
int main(){
int i,a=0;
for(i=0; i<10; ++i){ //aの値は??/
++a;
}
printf("a=%d",a);
return 0;
}
実行結果は
a=10
になりそうですが・・・?違う値になるんですよね。
こいつのせいで随分苦労させられたって話お聞きしました。
あれ以来ハテナを2つ書くのは意識的にしないようにしています^^;
きっと思い出せればきりがないほどあるんでしょうけど、思い出せず残念です!
こういうトピ見ると、「人のふり見て我ふり直せ」で気をつけることができていいですねw
852ポイント を落としてしまった。
|
|
|
|
|
Name: BEMANI ..かけだし(2,070ポイント)
Date: 2009/01/02(金) 04:55
No:26361
|
|
Title: Re:本当にただの雑談です
|
|
>>こういうトピ見ると、「人のふり見て我ふり直せ」で気をつけることができていいですねw
自分も気をつけねば!
という項目が増やせれば色々役に立つことが多いかなーと
淡い期待をしながら新年掲示板に書き込みしてみました><
>>でもきっとそういうのって必要な経験で例えばしょうもないミスで重大なバグにつながったりした経験があると
>>より一層エラーチェックやバグ回避プログラムに気を配るようになると思いますし、
>>その方法も、痛い経験が活かされたものになるんだと思います。
自分は経験浅いですが、一度ミスしたところは気を配るようにしています。
管理人様のように大きなプロジェクトを作っているとバグも凄く出るのだろうなと思います。
今自分のプロジェクトですら、沢山出ているので;
上に書いて頂いたコードですがこういうのもあるんですね。
a=10 じゃないの?
と思って実行した所 あれ?ってなりました。
こんなところにもバグって出るんですね・・・
三文字表記は注意します><
397ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(44,278ポイント)
Date: 2009/01/02(金) 08:33
No:26362
|
|
Title: Re:本当にただの雑談です
|
|
自分はまだプログラミング歴が浅く、
夏にやっとポインタの理解ができたばかりなんで、
毎回が悪戦苦闘なんですがw
初期のころは、「=」と「==」の違いで悩んだ記憶がありますかねー。
visual c++では丁寧に意図したことと合致してます?みたいな警告が出るんですが、
自分の学校のやつはでなく、
「よしっ!!コンパイル通った!!提出して終わり!!」
って思ったらなんだこの動作・・・答えがっ・・・。
コードが非効率だった分、だらだら長いコードだったので、
どこで変数が変になるのかprintfで調べってました。。
そしたらほぼ最後のif文で代入してる・・・orz
でもやればやるほど成長はできるのですね。
まだまだひよっ子な自分ですが、
最近やっと自分のやりたいことを記述できているような気がします。
バグを実感できるのはこれからですかね・・・。
367ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..かけだし(2,091ポイント)
Date: 2009/01/02(金) 18:04
No:26366
|
|
Title: Re:本当にただの雑談です
|
|
ポインタは慣れるまでが大変ですよね;
「=」と「==」自分もやった事あります;
自分的には合ってるのに と思い込んだ瞬間からバグが発生しそうですよね><
kazuoniさんも制作頑張ってください!
こっそり応援しときますw
21ポイント を手に入れた。
|
|
|
|
|
Name: dic ..初心者(8,982ポイント)
Date: 2009/01/02(金) 19:34
No:26373
|
|
Title: Re:本当にただの雑談です
|
|
プログラムはパズルみたいで
難しい問題でも簡単にとけると楽しいものですね
関数の管理方法が複雑になってしまい
オブジェクト指向を導入したもののさらに油に火をそそいだ状態になったりと
今では簡素な管理方法で管理したりなど
高度なものであるほど見栄えはいいですが、維持が難しいもので
保守的な面から見て、バランスが難しいなぁと感じた一年でした
管理人さんの新しい弾幕期待してます
134ポイント を落としてしまった。
|
|
|
|
Name: ムンバ ..上級者(21,552ポイント)
Date: 2009/01/01(木) 20:50
No:26339
|
|
Title: 自作ゲームに使う画像作成ソフトについて
|
|
こんばんは。お世話になります。
ちょっとC言語とは外れてるのかもしれませんので
雑談になるかと思われます。すみません。(謝
線路の画像(1枚32×32ピクセル・png)を(今の所、あと曲線とポイント)
自作ゲームに取り入れようと思って書いて見たのですが・・・
付属のペイントでは、とてもじゃないけど、うまくいきませんでした。^^;
正直、画才は全く無く添付させて頂いた線路を書くのが精一杯でした。(涙
何か画像作成ソフトは無いかと検索してみたのですが
たくさんあってどれが良いのか解りません。
お勧めのソフトがあれば、ご紹介頂けないでしょうか?すみません。
添付させて頂いた画像の様な線路を書きたいのです。
「A」と「C」の距離を均一にしたり、曲線の線路も書きたいので綺麗な曲線を描き
曲線の線路の幅も「B」の2本の線路の距離と同じようにできる様な
そんなソフトがあればご紹介頂きたいと思います。
できれば、お試しでフリーソフトの方がいいのですが
電気屋のポイントが2万円分貯まってるので、有償でしたらこの範囲のものがあれば。(汗
将来的には、背景画像など
こちらのサンプルプログラミングの館等でご紹介されてるソフト内の画像の様なものも
書ければ書きたいと思っています。
(OS:Windows VISTA)
元旦早々、かなり自分勝手な質問かと思われますが
ご意見頂ける方いらっしゃいましたら、ご指導の程、宜しくお願い致します。<_ _>
532ポイント を手に入れた。
|
|
|
|
Name: SCI ..入門者(3,369ポイント)
Date: 2009/01/01(木) 21:06
No:26340
|
|
Title: Re:自作ゲームに使う画像作成ソフトについて
|
|
フリーのペイント系ソフトは、PixiaやGIMP、PictBearとかでしょうか。
フリーのドロー系ソフトは、OpenOfficeに入ってる奴とか、Inkscapeとかでしょうか。
とりあえず、「MS-Paint」ではぼかしすらできないので・・・
ただ、「ドット絵」を書くなら話はまったく別になります。
2倍のポイントを手に入れた! 176ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..上級者(21,291ポイント)
Date: 2009/01/01(木) 21:35
No:26341
|
|
Title: Re:自作ゲームに使う画像作成ソフトについて
|
|
SCIさん、早速のご解説ありがとうございます。^^
先日は、ご指導頂きありがとうございました。
じゃんけんゲームの、ご報告ができていなかったので(場違いとは思いますが)
この場をお借りして大変申し訳御座いませんが、ご報告させて頂きます。
お時間あれば添付ファイル、見て頂きご指摘の程、お願い致します。
こちらの規約違反かもしれませんので
差し障りあれば、お手数ですが削除お願い申し上げます。(謝
「ペイント系ソフト」「ドロー系ソフト」「ドット絵」調べてみます。
線路を書きたいのです。<_ _>
261ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(303,202ポイント)
Date: 2009/01/01(木) 21:48
No:26342
|
|
Title: Re:自作ゲームに使う画像作成ソフトについて
|
|
既に既出ですが、Gimp2と Inkscapeの2つを揃えておけば十分でしょう。
普通の線路なら、ガイドとグリッドをうまく使えば書けるかと。
50ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(3,315ポイント)
Date: 2009/01/01(木) 22:13
No:26343
|
|
Title: Re:自作ゲームに使う画像作成ソフトについて
|
|
添付ファイル見ました。ちゃんと動いていい感じです。
あとは、LoadDivGraphを使ったり関数を作ったりするとすっきりすると思いますよ〜
54ポイント を落としてしまった。
|
|
|
|
|
Name: ムンバ ..上級者(21,529ポイント)
Date: 2009/01/01(木) 23:07
No:26344
|
|
Title: Re:自作ゲームに使う画像作成ソフトについて
|
|
Justyさん、ご指導ありがとうございます。
SCIさんのご紹介頂いたソフトも参考にさせて頂きまして
「Gimp2」「Inkscape」の二つで、線路を書いてみたいと思います。
ありがとうございます!
SCIさん、ご指摘ありがとうございます。(謝
LoadDivGraph関数も調べてみます。
自作関数や自作ヘッダも、まだまだこれからですね。^^;
「ペイント系ソフト」と「ドロー系ソフト」の違いは
http://www.ing-jet.net/store/gazou/gazou_soft.html
を見てみました。
勉強になりました。ありがとうございます。
線路の画像できたら、ご報告させて頂きたいと思います。
ありがとうございました。<_ _>
238ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..上級者(21,554ポイント)
Date: 2009/01/02(金) 00:28
No:26350
|
|
Title: Re:自作ゲームに使う画像作成ソフトについて
|
|
ご紹介頂いた「Inkscape」ですと、pngファイルで保存できないのですが
何か良い方法はありますか?^^;
25ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..上級者(21,567ポイント)
Date: 2009/01/02(金) 00:44
No:26351
|
|
Title: Re:自作ゲームに使う画像作成ソフトについて
|
|
こちらのサンプルプログラミングの館等でご紹介されてるソフト内の画像は
どの様な方法で作成されているのでしょうか?
ご指導、宜しくお願い致します。
13ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(303,299ポイント)
Date: 2009/01/02(金) 01:02
No:26352
|
|
Title: Re:自作ゲームに使う画像作成ソフトについて
|
|
>ご紹介頂いた「Inkscape」ですと、pngファイルで保存できないのですが
そんなことはないはずですが……。
ttp://tavmjong.free.fr/INKSCAPE/MANUAL/html/File-Export.html
ttp://inkscape.paix.jp/manual/basic-file.html#file-6
97ポイント を手に入れた。
|
|
|
|
|
Name: ムンバ ..上級者(21,639ポイント)
Date: 2009/01/02(金) 11:06
No:26363
| 解決!
|
Title: Re:自作ゲームに使う画像作成ソフトについて
|
|
Justyさん、色々とありがとうございました。
ご紹介頂いたページも含めまして勉強させて頂きます。
探すと解説されてるページが色々ありました。
これで線路を書いてみたいと思います。
ご指導どうもありがとうございました。<_ _>
<編集で追加です。>
線路できました〜♪
Inkspaceでpngファイルで保存するには、エクスポートする事によってできました。
嬉しくて、編集画面でファイルとこのコメント追加させて頂きました。
お気づきでしたら見てみて下さい。
レスは要りません。^^本当にどうもありがとうございました。(謝
72ポイント を手に入れた。
|
|
|
|
Name: くろーと ..ぴよぴよ(82ポイント)
Date: 2008/12/30(火) 21:19
No:26220
|
|
Title: ウィルスバスター2008の反応
|
|
こんばんわ。はじめまして。正月前に失礼します。テンプレを使って質問します。
[1] 質問文
[1.1] プログラムのお勉強のちにゲーム作成。
[1.2] ゲームプログラミングの館より[2].ウィンドウを表示する。のプログラムソースから。
[1.3] ウィルスバスター2008の過敏な反応。(添付ファイルをご覧くださいませ)
[1.4] 放置して続けても大丈夫でしょうか?
[2] 環境
[2.1] OS : Windows Vista Business
[2.2] コンパイラ名 : VC++ 2008EE
[3] その他
・C言語はかじった程度です。Rubyも少々基礎をかじりました。
以上のような症状がでました。
何が不審なのかがよくわかりません。気にせずに続けても大丈夫でしょうか。
教えてください。よろしくお願いします。
--
くろーと
82ポイント を手に入れた。
|
|
|
|
Name: くろーと ..ぴよぴよ(196ポイント)
Date: 2009/01/01(木) 23:58
No:26346
| 解決!
|
Title: Re:ウィルスバスター2008の反応
|
|
>Mistさん
ありがとうございます。引き続けて作業を行ってみます。
>Dixqさん
ありがとうございます。ググってさっそく例外設定を行いました。
>All
ありがとうございました。無事に解決することができました。
114ポイント を手に入れた。
|
|
|
|
|
Name: 紅葉 ..中級者(10,303ポイント)
Date: 2009/01/02(金) 03:25
No:26356
|
|
Title: Re:ウィルスバスター2008の反応
|
|
確かですが
不正変更の監視を無効にすればでなくなります。
わたしもなったことがあります><
48ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(938,005ポイント)
Date: 2008/12/27(土) 18:49
No:26091
|
|
Title: 久しぶりに龍神録の館更新
|
|
龍神録プログラミングの館を久しぶりに更新しました。
http://dixq.net/rp/
わざわざ報告するほど変化は無いんですが、「もう更新しないの?」って声があったので、一応まだまだ作り続けますという報告です^^;
後、ゲームプログラミングの館も久しぶりに1章だけ追加しました。
------
18:30現在、今日はすごくうちのHP重い気がするんですが、気のせいですかね・・。
しかも前のHPも重い・・。
もし直らないようならサーバーレンタル元に問い合わせようと思ったんですが「12/27〜1/4は休み」って書いてあったんで、最悪このまま1週間以上・・。う〜ん、困った;
2倍のポイントを手に入れた! 282ポイント を手に入れた。
|
|
|
|
Name: array [URL] ..熟練のプログラマー(42,499ポイント)
Date: 2008/12/27(土) 19:11
No:26093
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
文字弾幕楽しみです^^
そういえば2か月ぶりの更新になるんですね。
私も【にわかの俺が】に感化されて、また色々プログラムに触れてるのですが
やっぱりゲームを作るのは楽しいですね。私も東方にどこまで似せられるかを
目標にして頑張ってみたくなりました。
76ポイント を落としてしまった。
|
|
|
|
|
Name: yu ..初心者(5,000ポイント)
Date: 2008/12/27(土) 21:47
No:26098
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
更新お疲れ様です。
>18:30現在、今日はすごくうちのHP重い気がするんですが、気のせいですかね・・。
自分もすごく・・・おもいです・・・。
朝は大丈夫だったんですけどね〜
【にわかの俺が】を見ましたがクオリティ高いですね。
スペカ発動のエフェクトとかほとんど同じでしたね。本家と
動画みててこの弾幕データ使ったんだな〜とか思ったりw
自分が作ってる東方もどきと比べるとクオリティの差で悲しくなってきます・・・;
133ポイント を手に入れた。
|
|
|
|
|
Name: きらりん ..入門者(2,617ポイント)
Date: 2008/12/28(日) 00:33
No:26105
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>>18:30現在、今日はすごくうちのHP重い気がするんですが、気のせいですかね・・。
>>しかも前のHPも重い・・。
僕のPCだと縦長のホームページは嫌ってくらい重いです・・・。ページをPC内に保存してみてみても重かったのでスペックが悪いんでしょうね・・・。
縦長と言えばDXlibのヘルプの中のサンプルプログラムのところも重いですね。僕だけなんでしょうか?
2倍のポイントを手に入れた! 300ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(938,999ポイント)
Date: 2008/12/28(日) 07:15
No:26109
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>>arrayさん
すっかり放置ですみません^^;
やはり時間を見つけてなるべくコンスタントに作っていくよう頑張ります!
実は私も【にわかの俺が】に影響されましたw
作るなら妖々夢のファンタズムのコピー作りたいな・・。
※メール送ったんでお願いします〜☆
>>yuさん
今はアクセスが重いの直ってるみたいですね。
う〜ん、昨日のトップページの累計アクセスがいつもの1/4しかない。
そのわりには7500アクセスある・・。
ほとんど【にわかの俺が】動画から探してきてくださった方々だと思いますが、
せっかく来て下さったのに重くて帰っちゃったかな・・。
はぁ〜、でもこのサーバーレンタル月200円の破格だからあまり文句言えないな・・。
>自分が作ってる東方もどきと比べると
作っていくうちになれますよ^^
エフェクト系を忠実に再現するようにすると見栄えがグッと上がりますよw
>>きらりんさん
ということはゲームプログラミングの館とか重いですか?
スレイプニルとかIEとか使ってる人は縦長のHP読みづらいようですね。
そういう時はGoogleChromeオススメです。
http://www.google.com/chrome/?hl=ja
とっても軽いですよ。うちのパソコンだと、ようこそ画面から切り替わって2秒以内に立ち上がるんですが、
かつてそんなブラウザありませんでしたw
重いページもどういう仕組みなのか、メモリ食わずに見ることが出来るみたいです。
2倍のポイントを手に入れた! 982ポイント を手に入れた。
|
|
|
|
|
Name: きらりん ..かけだし(2,192ポイント)
Date: 2008/12/28(日) 12:46
No:26118
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>>ということはゲームプログラミングの館とか重いですか?
そうですね;
pagedownを押しっ放しでスクロールしようとしてもスクロール一回分が0.5秒くらいかかります。
コピーして貼り付けなどもそのくらいかかりますね・・・w
タスクマネージャーによるとメモリをすごい食っているようです。
>>そういう時はGoogleChromeオススメです。
これすごかったですw
重さをまったく感じませんでした。むしろ限界まで軽い・・・w
>>エフェクト系を忠実に再現するようにすると見栄えがグッと上がりますよw
・・・ちょっと気になったんでw
エフェクト系ってどんなツールを使って作ってるんですか?自分ノーマルペイントとsaiくらいしか使ったことないのであんな綺麗なエフェクトどうやって作ってるのかなーって気になってましたw
319ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(46,928ポイント)
Date: 2008/12/28(日) 13:20
No:26125
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
> エフェクト系ってどんなツールを使って作ってるんですか?
東方のほとんどのエフェクトはDXライブラリのブレンド処理と素材の透明度を利用することで再現可能です。
(つまり、エフェクトもプログラミングできる)
ただし、DXライブラリでは(DirectDrawを使っている場合)ブレンドを多用すると重くなりますが。
90ポイント を手に入れた。
|
|
|
|
|
Name: 桃印 ..入門者(3,082ポイント)
Date: 2008/12/28(日) 13:32
No:26126
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>エフェクト系ってどんなツールを使って作ってるんですか?
これは、エフェクトで使ってる画像はどうやって作ってるってことでしょうか。
東方を解析・抽出したら分かりますが、実はあの美麗なエフェクトもちょちょっと画像加工したら作れるぐらいの、わりと簡単なものだったりします(それでも数は膨大ですがw)。
それらの画像を、御津凪の言うとおりブレンド等や変形処理でエフェクトとしているのです。
個人での使用が原則ですが、東方の画像をそのまま引用してエフェクトのコピーを実装してみるというのも一つの手かもしれません。エフェクトが完成したら、画像を差し替えたら良いのですしね〜。
横から失礼しましたっ。
224ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(939,933ポイント)
Date: 2008/12/28(日) 15:59
No:26140
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>>kazuoniさん
それはよかったです^^
ただクロムはつい先日正式版が公開されたばかりで、拡張性も低く、メニューとか最低限しかないので、
その辺はFireFoxで色々便利機能使ってた人には物足りないかもしれません。
遅いパソコンだと、どうしても拡張性よりレスポンの速さが欲しいですけどねw
>>きらりんさん
ゲームの館、やはり龍神録の館みたいに別々に書いたほうがよさそうですね。
IEだと130Mもかかるんですね・・。クロムだと10Mのようですが、色々と効率的に表示されてるんでしょうね。
エフェクトはよく見てみると、そんなに大げさなものじゃない場合が多いんですよ。
例えば龍神録のボムで言えば、
\dat\img\effect\に入っているbom画像を単に円形に動かしてドーンという効果音つけてるだけです。
http://dixq.net/rp/22.html
こちらの実行結果を見ていただければ、すごく簡単な処理を重ねてるだけだとわかると思います。
自分が「いいな〜」と思うエフェクトが何かあれば、それはどうやって実装されているのか予想し、
そっくりに作ってみること、勉強になりますよ。
何かゲームを忠実にコピーすることって楽しくもあり、勉強になるので、もし力がついてきたらチャレンジしてみてはどうでしょう。
475ポイント を手に入れた。
|
|
|
|
|
Name: karasu ..ぴよぴよ(68ポイント)
Date: 2008/12/29(月) 17:06
No:26189
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
更新分読ませていただきました。
説明が詳しくてわかりやすかったです。
エフェクトの話を読んでいたら作ってみたくなりましたw
今作っている分が完成したら私もエフェクト作っていってみたいですw
68ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(941,165ポイント)
Date: 2008/12/30(火) 05:36
No:26193
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>>karasuさん
ありがとうございます^^
わかりにくいところも多いと思うので、読んでて「この辺もうちょっと解説してよ!」ってとこあったら
気軽に言って下さい☆
>>Justyさん
いつもありがとうございます。
全部修正するのは難しいので一応50〜52章を修正しました。
また何か直すべき点があれば些細な事でも教えていただけると幸いです。
・・・って言い出したら挙げられないほど列挙されるかもしれませんが^^;
とりあえずdoubleを全部floatにして、多重定義関数を消したい今日この頃・・orz
252ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(300,970ポイント)
Date: 2008/12/30(火) 19:39
No:26218
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>また何か直すべき点があれば些細な事でも教えていただけると幸いです
そうですね、プロジェクトの設定は先の件が直っていれば問題はないはずです。
ソースの方は……うーん、メールでもいいでしょうか?
>とりあえずdoubleを全部floatにして、多重定義関数を消したい今日この頃・・orz
あれはあれでいいような気もしますw
でも一番の問題はDXライブラリでは位置が floatで、角度やスケールが doubleと
分かれていることですね。
かと思えば、一部は角度やスケールであっても floatだったり。
どういう基準があるんでしょうか……。
269ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(2,565ポイント)
Date: 2008/12/31(水) 02:41
No:26237
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
DirectXはテクスチャやポリゴンの座標情報をfloatで扱うからではないでしょうか。
なので、位置やサイズといったものはDirectXに合わせてfloatにした方がキャストが不要に・・・
一方(想像ですが)、角度やスケールを処理しているのはDXライブラリなんじゃないですか?
角度やスケールはDirectXに直接渡さないのでdoubleで実装している、というようなことは考えられないでしょうか。
内部を詳しく見たわけではないので推測ですが・・・
155ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(301,194ポイント)
Date: 2008/12/31(水) 03:41
No:26240
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>DirectXはテクスチャやポリゴンの座標情報をfloatで扱うからではないでしょうか。
こちらはそうでしょうね。
>角度やスケールを処理しているのはDXライブラリなんじゃないですか
これもそうです。
ただ、角度やスケールを処理すると言うことは頂点を生成しなければならないわけですが、
その元となっている座標が floatですし、実は内部でも角度やスケール値は
普通に floatにキャストしてから計算していたりします。
そうなると、普通に考えれば全て floatか全て doubleのどちらかで良さそうなのですが
何故混在しているのかが謎になります。
まぁきっと何か歴史的な事情があるのでしょう・・・。
224ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(943,106ポイント)
Date: 2008/12/31(水) 03:45
No:26241
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
そう考えるとそのように考えられますね。
ただDirectXを使うとdoubleの精度が悪くなる(floatと同じになる?)ということがあるようでして
[以下記事25684のJustyさんの記事より抜粋]
そもそもあれなんですよ。
DXライブラリを使うと、計算精度が悪くなるんですよね。
知っている人は知っている話なのですが
#define PI 3.141592653589793
volatile double add = 0;
double value1 = PI + add;
ChangeWindowMode(TRUE);
DxLib_Init();
double value2 = PI + add;
とすると value1と value2の値が微妙に異なるんですよ。
本来、addは 0なので value1も value2も PIの値になるはずなのですが、
value2は 3.1415927410...と小数点以下6桁目までしか一致しません。
そうなる理由はDXライブラリ、というか内部で使っている DirectXが
高速化の為に単精度まで精度を下げている為なのですが、こういうこともあるので
doubleを使うなら、精度を元に戻さないとあまり意味はないかな、と思うわけです。
なのでdoubleを使う意味があるのだろうか・・という話になっています。
う〜ん、、。
341ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(2,864ポイント)
Date: 2008/12/31(水) 03:57
No:26243
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
あ、やはりDXライブラリを使うと精度が落ちるのは事実なんですか?
というのも、以前簡単な惑星シミュレータを作ったんですが、3Dモードの有無によって惑星の軌道が微妙に異なるという結果があったんです。
3Dモード有りで実行すると、惑星たちは周回運動をするのに、無しで実行すると軌道が少しズレて発散してしまうんです。
これは、思わぬ収穫ですよ、Justyさん管理人さん(笑
128ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(301,344ポイント)
Date: 2008/12/31(水) 04:29
No:26244
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
管理人さん
>あれ・・、今問題となっているのは↑の記事の件ではありませんでした?
それもありますね。
でも、それが無かったとして dobleが本来の精度を持っていたとしても、
結局内部で doubleを floatにキャストしてから各種計算をしているようなので……。
SCIさん
>あ、やはりDXライブラリを使うと精度が落ちるのは事実なんですか?
最新のテスト版のライブラリではそれを回避する関数が増えていますけどね。
150ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(943,324ポイント)
Date: 2008/12/31(水) 04:53
No:26245
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
おぉ!
ちょっと試してみたんですが
#include "DxLib.h"
#define PI 3.1415926535
volatile double Add = 0;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
double pi1 = PI + Add;
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;
double pi2 = PI + Add;
printfDx("pi1 = %.10f\npi2 = %.10f",pi1,pi2);
ScreenFlip();
WaitKey();
DxLib_End();
return 0;
}
実行結果
pi1 = 3.1415926535
pi2 = 3.1415927410
#include "DxLib.h"
#define PI 3.1415926535
volatile double Add = 0;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
double pi1 = PI + Add;
SetUse3DFlag(FALSE);
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;
double pi2 = PI + Add;
SetUse3DFlag(TRUE);
double pi3 = PI + Add;
printfDx("pi1 = %.10f\npi2 = %.10f\npi3 = %.10f",pi1,pi2,pi3);
ScreenFlip();
WaitKey();
DxLib_End();
return 0;
}
実行結果
pi1 = 3.1415926535
pi2 = 3.1415926535
pi3 = 3.1415926535
つまり3D機能を使わない設定にすれば精度は落ちず、後から使う設定にしても精度が落ちないと・・。
・・・何か私誤解してますかね^^;
175ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(301,958ポイント)
Date: 2008/12/31(水) 05:57
No:26246
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>つまり3D機能を使わない設定にすれば精度は落ちず、後から使う設定にしても精度が落ちないと・
いえ、合ってますよ。
Direct3Dデバイスの初期化と同時に精度の設定が変更されますが、そのフラグがあると
Direct3Dデバイスを使わないので設定は変更されなくなります。
ちなみに精度の確認方法ですが VisualStudioのレジスタウインドウを表示して、
右クリックのコンテキストメニューから浮動小数点を選択肢したときに表示される
文字の中で CTRLのところの数値をみます。
その数値が 0x300のビットがあると仮数部の精度は 64bit(拡張倍精度)、
0x200のビットがあると53bit(倍精度)、どちらも無いと 24bit(単精度)になります。
2倍のポイントを手に入れた! 614ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(303,321ポイント)
Date: 2008/12/31(水) 22:37
No:26281
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>いつも通りDXライブラリが使え,なおかつ精度の高い計算が出来るということですか?
あ、すみません。
後から設定した場合はダメだと思います。
SetUse3DFlag()ってフラグを変更するだけなので・・
(そのフラグをみて DXLib_Initが Direct3Dを使うかを決める、と)
なので、そのテスト版で追加された関数を使うか、明示的に fldcw/fnstcwの命令を
使って直接 FPUのレジスタの値にビットを設定するしかないと思います。
243ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(3,193ポイント)
Date: 2009/01/01(木) 02:09
No:26311
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
あ、補足ですけど、私も「精度の問題」が発現したときは確か3DFlagを初期化前に行うか後に行うかで結果が変わりました。
参考までに・・・
17ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(303,152ポイント)
Date: 2009/01/01(木) 02:36
No:26318
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>初期化関数の前に呼ばないといけないとか何かの原因で,Direct3Dが使用可能になっていない・・?って事でしょうか?
なっていない、と思います。
DXLib_Initの段階で Direct3Dを使わないという選択をした時点で、
SetGraphMode()とかSetScreenMemToVramFlag(TRUE)等で内部的に再初期化を行わない限り、
Direct3Dは使えないと思います。
183ポイント を手に入れた。
|
|
|
|
|
Name: きらりん ..入門者(2,541ポイント)
Date: 2009/01/02(金) 00:15
No:26347
|
|
Title: Re:久しぶりに龍神録の館更新
|
|
>>No:26140
>>管理人様
ちょうど帰省があるのを忘れていて返信遅れました;
エフェクトのページ参考になりましたw
今自分の作っているゲームでも何か少しでもエフェクトを入れて見たいなと思いますb
>>自分が「いいな〜」と思うエフェクトが何かあれば、それはどうやって実装されているのか予想し、
>>そっくりに作ってみること、勉強になりますよ。
これから力をつけるためにやっていこうと思います^^
まだまだ力不足なのでまずは基礎からですが><
現行スレッドからみると、返信が遅くなってしまったため場違いなレスになってしまいすみませんorz
219ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(941,647ポイント)
Date: 2008/12/30(火) 14:32
No:26204
|
|
Title: Re:DXライブラリでゲーム作りました
|
|
おぉ、素晴らしいですね^^
ステージ7まで遊びました。
元ネタのゲームはやったことないですが、パズル要素の強いゲームですね。
今提案しても遅いかもしれませんが、
移動がブロックにつっかかって行きにくい時があるので
ボンバーマンみたいにブロックの途中で方向キーを押したら進める方向に自動的にちょっと軌道修正してやるようにしてはどうでしょうか。
後、間違ったアイテムを取ってしまうと詰んでしまうことがあるのでは無いかと思いますが、
「死ぬしかなくなる」という仕様より「状況は悪くなるが、何とかしようと思えば何とかなる」方が良くないかな?ということで、取ったアイテム置けるようにしてはどうでしょう?
そうするとパズル要素がなくなってしまうかもしれませんので、その辺は一概に決められないでしょうけど。
310ポイント を手に入れた。
|
|
|
|
|
Name: てつ [URL] ..入門者(3,343ポイント)
Date: 2008/12/30(火) 17:52
No:26209
|
|
Title: Re:DXライブラリでゲーム作りました
|
|
褒めていただきありがとうございます。
7面は確かに難しいですよねぇ。ヒントは「時間制限のあるステージ」という事。
とにかく急がなきゃだめなステージです。
アドバイスありがとうございます。今からの修正は時間的に無理っぽいので
それはまたバージョンアップ版で。
アイデア賞ほしいなぁ。
16ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..プログラマー(28,556ポイント)
Date: 2008/12/30(火) 23:35
No:26224
|
|
Title: Re:DXライブラリでゲーム作りました
|
|
最終面まで遊びましたが管理人さんと同様に操作性が一番気になりました。
正直言って7面以降ではストレスです。
また12面ではコンベアーの向こうが見えないのに
(敵がうろついてるので見れる場所までいけない、安全な場所ではコンベアーの先が見えない)
その向こうに敵がいるのはやや反則ぎみかと・・・(敵がいることが分かっていても対処できない)
また、12面のワープ先に敵がいてワープ直後に原因が分からないまま
ゲームオーバーというのは無理ゲーを通り越して不可ゲーに近いです。(これでクリアを諦めました)
難易度的には好みなので、上記の点が残念です。
最終調整ということで、一部マップデータの見直しとワープ先の安全の保障をされた方がいいと思います。
7面のゴースト(?)もギリギリ過ぎて、全ステージ中2番目の難しさになっているのでステージをラスト近くにする等、何らかの調整をしておいたほうが良さそうです。(この面の難しさにプレイを止める人が多そうです)
ちなみに8面のバットは謎の一つですか?
428ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(43,344ポイント)
Date: 2008/12/31(水) 00:30
No:26225
|
|
Title: Re:DXライブラリでゲーム作りました
|
|
遊ばさせていただきました^^
こんなパズルゲーは初めてだったので新鮮でした!
お二方の意見に自分も同意ですかね。。
ちょっと角に引っかかるのがきついですね。。
進め!進め!進め!って思ってもなかなか進まない。。
7で断念しましたorz
あと人生で初めて乗り物酔いと同じ酔いをPC画面から感じました。。(ゲームオーバーの画面)orz
あとマップデータとかは暗号化しないのですか?
いとも簡単に書き換えれてしまいますが^^;
119ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..プログラマー(28,464ポイント)
Date: 2008/12/31(水) 01:08
No:26227
|
|
Title: Re:DXライブラリでゲーム作りました
|
|
粘着の果てにクリアしましたw
敵が狭い範囲を行き来する場所が多い(タイミングがシビア)のも、1パターンな錯覚を覚えやすいですね。
>kazuoniさん
斜め押しを使わないとまず無理ですよw
逆に斜め押しを使うとかなり楽になりますw
92ポイント を落としてしまった。
|
|
|
|
|
Name: てつ [URL] ..入門者(3,521ポイント)
Date: 2008/12/31(水) 10:15
No:26248
|
|
Title: Re:DXライブラリでゲーム作りました
|
|
みなさま貴重なご意見ありがとうございます。
参考にさせていただきます。
細い通路は斜め押しで切り抜けてください。
近いうちに修正します。
それとバグありました。ゲームオーバー時に落ちたり、
最悪、電源を切らないといけない状態になるというバグです。
修正版アップしました。上のURLからダウンロードできます。
ちなみにマップデータの修正はまだ。
暗号化はわかりません。勉強します。では。
178ポイント を手に入れた。
|
|
|
|
|
Name: てつ [URL] ..入門者(3,612ポイント)
Date: 2008/12/31(水) 21:49
No:26277
|
|
Title: Re:DXライブラリでゲーム作りました
|
|
細い通路を通り易くしました。ぎりぎりコンテストに
間に合った。上のURLからダウンロードできます。
データを変えてる余裕はありませんでした。それにあれは
あれで気に入ってるので。
66ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..中級者(13,755ポイント)
Date: 2009/01/01(木) 02:13
No:26313
|
|
Title: Re:DXライブラリでゲーム作りました
|
|
暗号化に関しては
例えばレベルを保存したいなら(8bit符号なし整数値)
まず暗号化キーを用意します。(16bit符号なし整数値)
今49590とします(2進数で1100000110110110です)
そして改竄防止用の数を用意します。(8bit符号なし整数値)
今183とします(2進数で10110111です)
そしてレベルを71とします(01000111)
そしてレベルと改竄防止用の数とビット単位で交互に並べます(1001101000111111)
そしてそれを暗号化キーとXORします。(0101101110001001)
これをファイルに書き込み、保存します。
読み出し時は
暗号化キーとXORして16bitの数値を得ます。(1001101000111111)
これを分けて改竄防止用の数とレベルを得ます。
改竄防止用の数値が変更されてなければ、改竄は無かったということです。
2倍のポイントを手に入れた! 656ポイント を手に入れた。
|
|
|
|
|
Name: karasu ..ぴよぴよ(296ポイント)
Date: 2009/01/01(木) 06:07
No:26321
|
|
Title: Re:DXライブラリでゲーム作りました
|
|
少し遅れましたが、遊ばせていただきました。
7面が12以外の他の面よりかなり難しく感じました。(幽霊怖いです・・・)
12面は難しく断念してしまいましたorz
あと、8面のバットは見事に引っかかって何回かやり直してました・・・。
したことの無いタイプのゲームだったので、初めてのことが多く新鮮でしたw
クリアはできませんでしたが、楽しかったです^^
139ポイント を手に入れた。
|
|
|
|
|
Name: てつ [URL] ..入門者(3,708ポイント)
Date: 2009/01/01(木) 18:09
No:26336
| 解決!
|
Title: Re:DXライブラリでゲーム作りました
|
|
>lbfuvabさん
暗号化、ご教示ありがとうございます。
今後の作品に生かします。
>karasuさん
楽しかったですか!!
良かった。
作った甲斐があるというものです。
みなさまご意見ありがとうございました。
これにて意見募集締め切らせていただこうと思います。
では。
96ポイント を手に入れた。
|
|
|
|
Name: situmon ..上級者(18,826ポイント)
Date: 2008/12/31(水) 14:32
No:26257
|
|
Title: 美しい弾の画像を描く
|
|
いま弾の画像の製作をがんばっているのですが
管理人さんの作ったb4の弾の画像のような光ってるような弾
が作れません。
pixiaというソフトを使っているのですが美しい弾
を描くためのテクニックがあれば教えていただきたいです。
99ポイント を手に入れた。
|
|
|
|
Name: situmon ..上級者(18,898ポイント)
Date: 2009/01/01(木) 13:32
No:26332
|
|
Title: Re:美しい弾の画像を描く
|
|
<PNGの透過色が編集出来る画像ソフト
は何を使っていますか?
<すると周りが透過になると思うので,全体をぼかします。
ぼかしをうまく利用してあの美しい弾を・・・
72ポイント を手に入れた。
|
|
|
|
|
Name: libra ..ぴよぴよ(108ポイント)
Date: 2009/01/01(木) 15:01
No:26334
|
|
Title: Re:美しい弾の画像を描く
|
|
描くのとは違いますが、EXPLOSER という爆発画像生成のフリーソフトがあります。
exploser フリー でYahoo検索トップに出るはずです。
57ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(138,610ポイント)
Date: 2009/01/01(木) 16:14
No:26335
|
|
Title: Re:美しい弾の画像を描く
|
|
フリーなら個人的にはGIMPが使いやすくて好きかな?
有償なら、もっと多機能なのもあるんでしょうけど、ちょっとしたものならGIMPで充分かと。
70ポイント を手に入れた。
|
|
|
|
Name: 孫 ..ぴよぴよ(40ポイント)
Date: 2008/12/31(水) 23:48
No:26288
|
|
Title: 宿題をやっておりまして・・・・・。
|
|
はじめまして、孫です。
宿題のことで分からないところが出てきてしまって、
途中までやって見たのですが、先生の話が飛びすぎてて、まだわからないところが出てしまい、
知ってる物の中で頑張ってはいるのですが、やはりわからなくてみなさんに、
力を貸していただこうと、来たわけです。
その宿題がこれです。
入力された2つの実数を比較し、大きい値を返す関数(関数名 fmax)を使ったプログラムを作成しなさい。
#include<stdio.h>
@_______ fmax(A_______,B_______);
void main(void)
{
double a,b,max;
printf("2つの実数を入力してください");
scanf("C_______",D_______,E_______);
max=fmax(F_______,G_______);
printf(" %fのほうが大きい。\n",H_______);
}
double fmax(I_______ x,J_______ y);
{
double z;
if(K_______){
L_______;
}
else
M_______;
N_______ z;
}
@void Adouble
Bdouble C%f,%f
D&a E&b
Fa Gb
Hmax Idouble
Jdouble Kmax<z
Lmax=max+z M?????
Nreturn
@〜Hはこれでいいと思うのですが、I〜Nがあまりに分からないので、
分からないなりに描いてみたのですが、どうでしょうか。
どうかお力を貸していただけないでしょうか。
40ポイント を手に入れた。
|
|
|
|
Name: lbfuvab ..中級者(13,031ポイント)
Date: 2009/01/01(木) 00:33
No:26291
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
すいませんが
double fmax(I_______ x,J_______ y);
{
double z;
if(K_______){
L_______;
}
else
M_______;
N_______ z;
}
このあたり打ち間違えてますよね。多分。
94ポイント を手に入れた。
|
|
|
|
|
Name: 孫 ..ぴよぴよ(44ポイント)
Date: 2009/01/01(木) 01:00
No:26295
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
double(I_______ x,J_______ y);
ではなく
double(I_______ x,J_______y)
でしたすいません。
4ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(3,068ポイント)
Date: 2009/01/01(木) 01:06
No:26296
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
@から順番に見直してみた方がよさそうです。
宿題ということなので、あえて答えは書きませんが・・・
2倍のポイントを手に入れた! 52ポイント を手に入れた。
|
|
|
|
|
Name: 孫 ..ぴよぴよ(90ポイント)
Date: 2009/01/01(木) 01:15
No:26297
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
そうですか。最初っからですか。
自分の宿題なんで、
一から頑張ります
2倍のポイントを手に入れた! 46ポイント を手に入れた。
|
|
|
|
|
Name: box ..ハッカー(132,951ポイント)
Date: 2009/01/01(木) 01:19
No:26298
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
>@_______ fmax(A_______,B_______);
このプロトタイプ宣言と
>double(I_______ x,J_______y)
この実体定義において、関数名、戻り値の型、全引数の型が
一致している必要があります。よって、
>@void
これは正しくありません。
>C%f,%f
double型の入力を受け取る書式文字列は、%fではありません。
似てますけれど。
>Kmax<z
>Lmax=max+z
fmax関数では、maxという変数は定義していません。
引数で受け取ったx, yの大小を比べて、大きい方をzに代入してください。
120ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..プログラマー(28,687ポイント)
Date: 2009/01/01(木) 01:24
No:26300
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
まだ見てますかね?
関数部分のヒント。
とりあえず、今のままでは関数fmaxが2種類あることになります。・・・1番
そして、その関数fmax内にはmaxという変数は存在していません。・・・12、13番
61ポイント を手に入れた。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(43,676ポイント)
Date: 2009/01/01(木) 01:47
No:26303
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
・プロトタイプ宣言(関数原型宣言)
・有効範囲
などをググると参考になるかと思います。
今は条件演算子なんて流行ではないのですかね^^;
自分たちの大学では特別授業で扱いませんでしたが。
あ、明けましておめでとうございます。
今年もよろしくお願いします。
管理人さんの安否が心配です・・・。
ページ更新してる場合じゃ・・・^^;
2倍のポイントを手に入れた! 332ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(3,112ポイント)
Date: 2009/01/01(木) 01:50
No:26304
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
> 今は条件演算子なんて流行ではないのですかね^^;
三項演算子のことですか?あれは賛否両論ですよね。
ところでスレ主さん
ちょっと添付ファイルを見てくださいな
べ、別に私はツンデr(ry
39ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) [URL] ..伝説なるハッカー(943,898ポイント)
Date: 2009/01/01(木) 01:54
No:26305
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
あけましておめでとうございます^^
>kazuoniさん
ご心配おかけしました,生きておりますw
>孫さん
コンパイラはパソコンに入っていますか?
宿題を紙の上だけで解こうとしていませんか?
わからないことがあればとにかくプログラムを実行させてみることです!
また,とけそうにない問題も少しずつ分解してとくことで解ける事が多いです。
変数の中身を表示するプログラム
さらにキーボードから変数の中身を入力させるプログラム
さらにこれらの変数の大小を比較するプログラム
さらに大小を比較する部分を関数分けして書いたプログラム
そんな感じで少しずつ作っていけば作れると思います。
とりあえず,宿題の事はおいておいて,
「入力された2つの実数を比較し、大きい値を表示するプログラム」を作ってみてはどうでしょう?
できたら,答えにあうようにプログラムを変形してはどうでしょう?
その方がより解りやすいのではないかと思います。
255ポイント を手に入れた。
|
|
|
|
|
Name: 孫 ..ぴよぴよ(264ポイント)
Date: 2009/01/01(木) 01:59
No:26308
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
@dounle Adouble
Bdouble C%lf,%lf
D&a E&b
Fa Gb
Hmax Idouble
Jdouble Kx<y
Lz=y Mz=x
Nreturn
でどうでしょうか。
多分IJのところは先生の印刷ミスだと思います。
なので
double(I_______ a,J_______ b)
{
double z;
if(K_______){
L_______;
else
M_______;
N_______ z;
}
こういうことだと思います。
また指摘してくれると助かります。
174ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..入門者(3,176ポイント)
Date: 2009/01/01(木) 02:06
No:26310
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
解答は合ってます。
が、コードが間違っています。おそらく印刷ミスはないので、先生を信用しましょう。
(最初の「セミコロン」はタイプミスでしょう)
64ポイント を手に入れた。
|
|
|
|
|
Name: 孫 ..ぴよぴよ(183ポイント)
Date: 2009/01/01(木) 02:16
No:26314
| 解決!
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
いえ。
うちには、コンパイラが入っていないので、
でも、xがaの代わりになるんですね。
学校では、同じ文字を使っていたんで、こんな方法があることを知りませんでした。
81ポイント を落としてしまった。
|
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(43,767ポイント)
Date: 2009/01/01(木) 02:25
No:26317
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
代わり・・・なんだか微妙なニュアンスですが^^;
もう少し関数について勉強されたほうが良いかもしれませんね。
>(ry
(ryって(ryakuの略だったんですね。
最近こういうのについていけませんw
orzも「オーズ」なんて読んで意味も理解してませんでしたorz
91ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(26,189ポイント)
Date: 2009/01/01(木) 13:52
No:26333
|
|
Title: Re:宿題をやっておりまして・・・・・。
|
|
たかぎさんへ
> 標準関数にも、同名、同機能の関数が存在しますが
いつのまにか、標準関数になっているのですね。知らなかった。
課題を出した先生もきっと知らなかったというのが答えでしょう。
孫さんへ
単純な入力ミスです。
>@dounle
間違ってはいませんが、合っていると断定もできません。課題では不明なので。
>C%lf,%lf
104ポイント を手に入れた。
|
|
|
|
Name: kaiten ..初心者(5,646ポイント)
Date: 2008/12/31(水) 18:37
No:26271
|
|
Title: 無題
|
|
タイトルが思いつかないので無題で失礼します。
自分では理解できない事態になってしまったので質問させていただきます。
現在下記のような関数を作っているのですが、エラーが発生してしまいました。エラーは関数の下に書きます。
環境はvista、VC++2008EEでDxLibを使用しています。
コンパイルは通るのですが、実行時に下記のエラーが発生してしまいます。
これ以外に必要な情報があったら記載するので教えてください。
template <typename T_container, typename T_function>
void for_each(T_container &rcontainer, T_function ...)
{
//T_function(*func)();
va_list va1;
va_list va2
va_start(va1, rcontainer);
va_start(va2, rcontainer);
//for(int i=0;i!=n;++i)
while(va_arg(va2, T_function)!=NULL)
{
std::for_each(rcontainer.begin(), rcontainer.end(), std::mem_fun_ref(va_arg(va1, T_function)));
}
va_end(va2);
va_end(va1);
}
esTh.exe の 0x016b4470 でハンドルされていない例外が発生しました: 0xC0000005: Access violation
324ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(301,876ポイント)
Date: 2008/12/31(水) 19:14
No:26273
|
|
Title: Re:無題
|
|
これテンプレートですよね?
実体化するためには実際に使わないといけないわけですが、
これすごい妙なコードになっていて、どーやって使うのかさっぱりわからないのですが。
82ポイント を落としてしまった。
|
|
|
|
|
Name: kaiten ..初心者(5,954ポイント)
Date: 2008/12/31(水) 19:50
No:26274
|
|
Title: Re:無題
|
|
マ、マジっすか……
現在動いてる状態のコードはこれとは若干違うのでそっちも書いときます。
自分自身テンプレートの理解があやふやなまま書いたのでとんでもないことになっててもおかしくないと言えばそうなのですが……少々ショックw
template <typename T_container, typename T_function>
void for_each(T_container &rcontainer, int n, T_function ...)
{
//T_function(*func)();
va_list va1;
va_start(va1, n);
for(int i=0;i!=n;++i)
{
std::for_each(rcontainer.begin(), rcontainer.end(), std::mem_fun_ref(va_arg(va1, T_function)));
}
va_end(va1);
}
使用時は
for_each(player,2,&Player::Move,&Player::Draw);
こんな感じに使ってます。
308ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(302,387ポイント)
Date: 2008/12/31(水) 20:57
No:26275
|
|
Title: Re:無題
|
|
>いたのでとんでもないことになっててもおかしくないと言えばそうなのですが
いやいや、templateで可変引数というのは滅多に見かけない上に
va_startが2つもあったので、ちょっと面食らっただけです(w
1つ目の方はどこが可変引数の終端なのかを知るのに va_arg()が NULLかで
チェックしていますが、これは呼び出し側で明示的に NULLを入れないと
ダメですよね?
しかも va_startに参照型を渡している時点でOUTです。
2つ目の方はすっきりして大分マシになっています。
可変引数特有の型チェックが行われないことと nにマイナスを突っ込まれない限り
問題ないかと思います。
で、問題は
>0x016b4470 でハンドルされていない例外が発生しました: 0xC0000005: Access violation
これなんですよね。
2つ目に変えたのであれば、別のどこか原因ではないでしょうか。
例えばコンテナ側に入っている値に何か問題があるとか。
もう少し再現可能なコードはないでしょうか?
511ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(303,078ポイント)
Date: 2008/12/31(水) 21:04
No:26276
|
|
Title: Re:無題
|
|
ちなみにその手の可変的なことをするなら、こういう風に繋げると
コンパイルによる型チェックができますし、数を明示的に指定する必要もなくなりますよ。
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
template <typename Container>
struct ContainerCallMemberFunction
{
typedef Container ContainerType;
ContainerCallMemberFunction(ContainerType &c): m_pContainer(&c) {}
template <typename Func>
ContainerCallMemberFunction& operator << (Func f)
{
if(m_pContainer)
std::for_each(m_pContainer->begin(), m_pContainer->end(), std::mem_fun_ref(f));
return *this;
}
private:
ContainerType * m_pContainer;
};
template <typename Container>
ContainerCallMemberFunction<Container> MakeContainerCallMemberFunction(Container &c)
{
return ContainerCallMemberFunction<Container>(c);
}
struct Test
{
Test(int val_): val(val_) {}
int val;
void a() { std::cout << "a" << val << std::endl; }
void b() { std::cout << "b" << val << std::endl; }
void c() { std::cout << "c" << val << std::endl; }
};
int main(void)
{
std::vector<Test> v;
v.push_back(Test(100));
v.push_back(Test(200));
v.push_back(Test(300));
MakeContainerCallMemberFunction(v) << &Test::a << &Test::b << &Test::c;
return 0;
}
691ポイント を手に入れた。
|
|
|
|
|
Name: kaiten ..初心者(6,122ポイント)
Date: 2008/12/31(水) 23:32
No:26286
|
|
Title: Re:無題
|
|
>esTh.exe の 0x016b4470 でハンドルされていない例外が発生しました: 0xC0000005: Access violation
エラーに関してはおかげさまで解決しました。
va_startに参照型を渡せないことが解ってなかったのが原因だったようです。
教えていただいた方法を試して感動した後に読んでみて解らなかった点があるので質問させてください。
まずひとつ、クラスではなくて構造体なのはなぜなのでしょうか?あと、構造体ってコンストラクタ持てましたっけ?
もう一つはContainerCallMemberFunction& operator << (Func f) の部分なのですがなぜ&が付いているかです。
168ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..伝説なるハッカー(303,051ポイント)
Date: 2008/12/31(水) 23:52
No:26289
|
|
Title: Re:無題
|
|
>まずひとつ、クラスではなくて構造体なのはなぜなのでしょうか?あと、構造体ってコンストラクタ持てましたっけ?
classも structも unionもクラスキーが異なるだけで、全部クラスです。
つまり、structはクラスキー structのクラス、ということです。
クラスなので、コンストラクタを持てます。
>もう一つはContainerCallMemberFunction& operator << (Func f) の部分なのですがなぜ&が付いているかです。
参照でなくても動くとは思いますが、参照を返した方が効率もいいかな、と。
270ポイント を落としてしまった。
|
|
|
|
|
Name: kaiten ..初心者(6,255ポイント)
Date: 2009/01/01(木) 00:09
No:26290
| 解決!
|
Title: Re:無題
|
|
>全部クラス
そうだったのですか。勉強が足りませんでした。精進します。
>参照
そういうことなのですか。効率を考えたことがなかったので考えが及びませんでした。
疑問も氷解し、やりたかったことの方法も教えていただけたので解決とさせていただきます。
Justyさん、本当にありがとうございました。
133ポイント を手に入れた。
|
|
|
|
Name: tkmakwins15 [URL] ..比類無きプログラマー(92,029ポイント)
Date: 2008/12/30(火) 18:14
No:26211
|
|
Title: GCCのクロスコンパイル環境の構築
|
|
こんにちは、tkmakwins15です。
質問ですが、Windows XPでPentium上のFreeBSD用の実行バイナリを生成しようと思っているのですが、どうしてもうまくいきません。
とりあえず、以下のものをダウンロードしました。
MinGW(最新版だと思います。)
MSYS (バージョン1.0です。)
binutils-2.19.50.tar.bz2
gcc-core-4.3.2.tar.bz2
newlib-1.17.0.tar.gz
また、MinGWとMSYSのインストールは成功しています。とりあえず、標準C++の範囲内で、
#include<iostream>
int main()
{
std::cout<<"Hello World!"<<std::endl;
return 0;
}
というソースをtest.cppとすると、DOSプロンプト上で、
g++ test.cpp
とコンパイルすると成功して、実行結果も大丈夫でした。また、同じくDOSプロンプト上で、添付した画像のようにすると、しっかりとC:\CTEST\testboost.cppが消えました。
ですが、sh上でbinutils-2.19.50.tar.bz2を展開したディレクトリへカレントを設定し、configureコマンドを打っても、変なメッセージ(下の投稿でスクリーンショットを掲載します。)が出るだけで、全く成功していないようなのです。
ダウンロードファイルが足りないのでしょうか、それとも僕の設定がおかしいのでしょうか?ご教授ください。
お願いします。
383ポイント を手に入れた。
|
|
|
|
Name: Justy ..伝説なるハッカー(300,701ポイント)
Date: 2008/12/30(火) 19:08
No:26216
|
|
Title: Re:GCCのクロスコンパイル環境の構築
|
|
似たような症例があるようです。
このあたりを参考にして、rebaseを差し替えるとどうなりますか?
情報技術を勉強する人のブログ:
MSYS 1.0.10 のインストール時に Couldn't reserve space for cygwin's heap,
うんたら Win32 error 6 というエラーが出て失敗した時のメモ
ttp://miteidesu.seesaa.net/article/110789246.html
VistaでMSYSが変なエラーを吐いて突如動かなくなる件 - 駄目日記っぽぃ。
ttp://d.hatena.ne.jp/kazy/20080310/p1
WinAVR and Windows Vista - MadWizard.org
ttp://www.madwizard.org/electronics/articles/winavrvista
211ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(78,240ポイント)
Date: 2008/12/30(火) 21:38
No:26222
|
|
Title: Re:GCCのクロスコンパイル環境の構築
|
|
今回の問題とは直接関係ありませんが、MinGWでGCCをコンパイルするには、GCCのソースにパッチをあてる必要があります。Cygwinを使う方がよいと思いますが、いかがでしょうか?
また、単にFreeBSDのコンパイラが欲しいだけなら、VMwareやQEMUを使ってFreeBSDをインストールした方が確実です。
42ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(78,379ポイント)
Date: 2008/12/31(水) 10:15
No:26249
|
|
Title: Re:GCCのクロスコンパイル環境の構築
|
|
> また、追加で質問なのですが、Pentium上のFreeBSDのGCC構築ということになると、ターゲットの指定方法は、
> --target=i386-pc-FreeBSD7
> という指定でいいのでしょうか?
小文字でしか試したことがありません。
--target=i386-pc-freebsd
大文字交じりがOKだったとしても、後々コンパイルする際にi386-pc-FreeBSD7-gccと打たないといけないので面倒です。
ところで、gcc-coreだとCしか使えませんが、それでよいのでしょうか?
また、glibcではなくnewlibを選んだのは意図的ですか?
139ポイント を手に入れた。
|
|
|
|
|
Name: tkmakwins15 [URL] ..比類無きプログラマー(92,124ポイント)
Date: 2008/12/31(水) 10:25
No:26251
|
|
Title: Re:GCCのクロスコンパイル環境の構築
|
|
>ところで、gcc-coreだとCしか使えませんが、それでよいのでしょうか?
>また、glibcではなくnewlibを選んだのは意図的ですか?
うーん、参考先がnewlibを使っていたので、そうしただけです。glibcというのでもいいのですね。
>gcc-coreだとCしか使えませんが、それでよいのでしょうか?
とりあえずgcc-coreを入れて、後でC++のフロントエンドを導入するようにしてみます。
計画は、CGIプログラムを作るとして、boostのxpressiveとfilesystemを使うことにすることです。
こうすればWindowsバイナリとしてコンパイルした際に、Windows上のApacheでCGIそのものの実験は可能だと思いまして…
207ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(78,446ポイント)
Date: 2008/12/31(水) 10:41
No:26252
|
|
Title: Re:GCCのクロスコンパイル環境の構築
|
|
> とりあえずgcc-coreを入れて、後でC++のフロントエンドを導入するようにしてみます。
最終的にC++を使うのであれば、最初からビルドする方が得策です。
> 計画は、CGIプログラムを作るとして、boostのxpressiveとfilesystemを使うことにすることです。
やはりCGIですか...
boostを使うなら、なおのことC++は最初から構築すべきです。
67ポイント を手に入れた。
|
|
|
|
|
Name: tkmakwins15 [URL] ..比類無きプログラマー(92,294ポイント)
Date: 2008/12/31(水) 10:56
No:26253
|
|
Title: Re:GCCのクロスコンパイル環境の構築
|
|
とりあえず、binutilsのビルドすら終わってないので、何とかしようと思います。
いまやってみたのですが、どうもうまくいきません。とりあえず、config.logが残っていたので、その内容をコピペします。(コピペできないほど長いので、拡張子を.txtに変えて添付します。)
CGIというのもあるのですが、将来的にはGNUのソフトウェアを勉強したいので、それもかねてクロスコンパイル環境を構築する勉強をしています。
170ポイント を手に入れた。
|
|
|
|
|
Name: tkmakwins15 [URL] ..比類無きプログラマー(92,546ポイント)
Date: 2008/12/31(水) 22:06
No:26279
|
|
Title: Re:GCCのクロスコンパイル環境の構築
|
|
うーん、binutilsのビルドがぜんぜん成功しません。
僕が実行した手順としては、
1.コマンドプロンプトを実行する。
2.shを実行する。
3.sh上でbinutilsを解凍したディレクトリへカレントディレクトリを移す。
4.mkdirコマンドでi386-freebsdディレクトリを作成。
5.cdでi386-freebsdディレクトリへカレント移動。
6.次のコマンドでconfigureを実行する。
../configure --target=i386-pc-freebsd --host=i386-mingw --prefix=../i386-freebsd
ですが、ここでなぜか、添付画像のような状態になり、全く前に進めません。とりあえず、
GCC cross compile MinGW msys
で検索して見たのですが、どうしてもWindows->FreeBSDのクロスコンパイルの情報は見つからず、とても困っています。
何かよい対策はないでしょうか。
もうひとつ質問ですが、ビルドに成功した場合、どのディレクトリにどのようなファイルが生成されるのでしょうか?それもご教授ください。お願いします。
252ポイント を手に入れた。
|
|
|
|
|