C言語の館のソースのある部分ができない・わからない(2)
C言語の館のソースのある部分ができない・わからない(2)
度々失礼します。
C言語の館(26. シューティング基本)のソース書き写してやっているのですが、
動作しません。
画像のファイルパスなども確認したのですが、大丈夫でした。
また、書き間違えをしたのかな?と思い、コピペで試してみたのですがダメでした。
実際には、ウィンドウは表示されるのですが何も表示されません。
毎度お願いします。
C言語の館(26. シューティング基本)のソース書き写してやっているのですが、
動作しません。
画像のファイルパスなども確認したのですが、大丈夫でした。
また、書き間違えをしたのかな?と思い、コピペで試してみたのですがダメでした。
実際には、ウィンドウは表示されるのですが何も表示されません。
毎度お願いします。
Re: C言語の館のソースのある部分ができない・わからない(2)
↑
"26. シューティング基本"のプログラムの中のこちらの while(1){ の行にブレークポイントを置いて(while(1){ の行にカーソルを移動してF9キーを押す)実行(F5キーを押す)して、ブレークしたら配列imageに-1以外の値が格納されているか確認してみてください。
-1が格納されていたら画像が正常に読み込まれていません。
(その場合、画像が読み込まれていないので何も画面に表示されないということになります)
"26. シューティング基本"のプログラムの中のこちらの while(1){ の行にブレークポイントを置いて(while(1){ の行にカーソルを移動してF9キーを押す)実行(F5キーを押す)して、ブレークしたら配列imageに-1以外の値が格納されているか確認してみてください。
-1が格納されていたら画像が正常に読み込まれていません。
(その場合、画像が読み込まれていないので何も画面に表示されないということになります)
Re: C言語の館のソースのある部分ができない・わからない(2)
ブレークした状態でVSのメニューから
[デバッグ(D)]->[ウィンドウ(W)]->[ローカル(L)]
を選択するとローカル変数のブレークした時点での値の一覧が表示されますので、その中のimage配列を見ると配列要素の値を確認することができます。
[デバッグ(D)]->[ウィンドウ(W)]->[ローカル(L)]
を選択するとローカル変数のブレークした時点での値の一覧が表示されますので、その中のimage配列を見ると配列要素の値を確認することができます。
Re: C言語の館のソースのある部分ができない・わからない(2)
imageは配列のはずなので、それぞれの要素を出力しないとダメですね。
例えば↓
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語の館のソースのある部分ができない・わからない(2)
載せていただいた値を拝見する限りではロードは成功しているようです。
(最初の16進数はimage配列が格納されているメモリアドレスです、波括弧の中が配列要素の値で、67633153 や 67895298 などはグラフィックハンドルの値です)
もしかしてプログラムは問題なく動作しているのではないでしょうか?
手元で試してみたのですが、このプログラムは起動しただけでは真っ暗の画面で何も表示されません。
”エンターキーを押すとchar.pngの画像が画面下から上に飛んでいく”というプログラムなので、プログラムを起動した後にエンターキーを押してみてください。
(最初の16進数はimage配列が格納されているメモリアドレスです、波括弧の中が配列要素の値で、67633153 や 67895298 などはグラフィックハンドルの値です)
もしかしてプログラムは問題なく動作しているのではないでしょうか?
手元で試してみたのですが、このプログラムは起動しただけでは真っ暗の画面で何も表示されません。
”エンターキーを押すとchar.pngの画像が画面下から上に飛んでいく”というプログラムなので、プログラムを起動した後にエンターキーを押してみてください。
Re: C言語の館のソースのある部分ができない・わからない(2)
すみません、そのようでした。お手数おかけして申し訳ございませんでした。
ありがとうございます。
追加でもう一つ質問よろしいでしょうか?
ここで、breakしてると思うのですが、何故でしょうか?
また、この場合抜けるのはFOR文ですよね?While文は抜けないですよね?
0番目の弾のフラグが0だった場合、他の弾はみられず後は飛ばされるのではないのでしょうか?
よろしくおねがいします。
ありがとうございます。
追加でもう一つ質問よろしいでしょうか?
else if( Key[ KEY_INPUT_RETURN ] == 1 ){//5カウント以上たっていたら
counter=0; //カウンターを戻す
for(i=0;i<10;i++){
if(tama[i].flag==0){ //発射していない玉を探し、
tama[i].flag=1; //発射フラグを立てる
break;
}
}
}
また、この場合抜けるのはFOR文ですよね?While文は抜けないですよね?
0番目の弾のフラグが0だった場合、他の弾はみられず後は飛ばされるのではないのでしょうか?
よろしくおねがいします。
Re: C言語の館のソースのある部分ができない・わからない(2)
もしエンターが長押しされたときは、i番目(0,1,2,3,4,5,6,,,)のフラグがどんどん立っていくのでしょうか?
一番はじめの0番目が1になって次の処理で0に戻してるのでずっと0番目でループしているのではないのか、
と思うのですがどうでしょうか・・・
みけCATさん>最初に見つかった空き枠1個だけを利用し、弾を1個だけ出すためですね。
空き枠を、一つだけしか利用しないのなら、配列にする必要はないのではないでしょうか?
エンターが推し続けられた場合、どうなるのかがよくわかってなくて・・・
一番はじめの0番目が1になって次の処理で0に戻してるのでずっと0番目でループしているのではないのか、
と思うのですがどうでしょうか・・・
みけCATさん>最初に見つかった空き枠1個だけを利用し、弾を1個だけ出すためですね。
空き枠を、一つだけしか利用しないのなら、配列にする必要はないのではないでしょうか?
エンターが推し続けられた場合、どうなるのかがよくわかってなくて・・・
Re: C言語の館のソースのある部分ができない・わからない(2)
> もしエンターが長押しされたときは、i番目(0,1,2,3,4,5,6,,,)のフラグがどんどん立っていくのでしょうか?
はい
> 一番はじめの0番目が1になって次の処理で0に戻してるのでずっと0番目でループしているのではないのか
tama.flag=0; が実行される条件は上の行の if(tama.y < -32) が成立した場合(画像が画面上端から見えなくなった場合)ですので、0番目しか使用されない、ということはありません。
試しに ↑
こちらの行にブレークポイントを置いてプログラムを実行して、エンターキーを押してみてください。
上記の行でプログラムが止まったら、F10キーを押して1行づつプログラムを実行してみてください。 ↑
tama.flag=1;を実行した直後ではこちらの行には処理が辿り着かないことが確認できると思います。
はい
> 一番はじめの0番目が1になって次の処理で0に戻してるのでずっと0番目でループしているのではないのか
tama.flag=0; が実行される条件は上の行の if(tama.y < -32) が成立した場合(画像が画面上端から見えなくなった場合)ですので、0番目しか使用されない、ということはありません。
試しに ↑
こちらの行にブレークポイントを置いてプログラムを実行して、エンターキーを押してみてください。
上記の行でプログラムが止まったら、F10キーを押して1行づつプログラムを実行してみてください。 ↑
tama.flag=1;を実行した直後ではこちらの行には処理が辿り着かないことが確認できると思います。