do whileの使い方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ヨシタケ

do whileの使い方

#1

投稿記事 by ヨシタケ » 12年前

3体の敵からランダムに攻撃させる。そのとき、もう倒した敵には攻撃させない。
というようにしたいと思い。

コード:

				do{
					attackghost = GetRand(2);			//攻撃を行うゴーストの選択
					shot[0].x = ghost[attackghost].x;	//攻撃の位置の取得
					shot[0].y = ghost[attackghost].y;
					shot[0].flag = TRUE;				//攻撃のフラグをTRUE
				}while(ghost[attackghost].flag == FALSE);
としました。
attackghostがランダムにもう倒した敵の番号を取得したときwhile(ghost[attackghost].flag == FALSE);で
もう一度doからに戻ると思っていたのですが、ゲームをプレイして見ると倒した敵も攻撃を行っていました。

一応、ソースファイルを上げました。パスワードは「YT2013」です。

http://www1.axfc.net/uploader/so/2933555

上記のコードはboss03.cppにあります。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: do whileの使い方

#2

投稿記事 by usao » 12年前

貼られた断片だけを見た勝手な想像ですが,

・GetRand(2)は{0,1,2}のいずれかを返す関数
・これは3体の敵のうちのどれを攻撃対象とするか を選択するための処理である
・「倒した」敵に該当するghost[].flagは どこかでFALSEでない値に書き換えられる
・shot[0].flag==TRUE のとき,どこかで攻撃処理が行われる
・現状,この箇所で無限ループはしていない(何らかの対処は他所で行われている)

とかいう感じでしょうか? 合ってるか違うか知りませんが.
コードを提示する際には,最低限こういった事柄を説明すべきかと思いますがどうでしょうか?

仮に,以上の想像が合っているとしたら,攻撃フラグは問答無用でTRUEを代入なので
提示コードがどう走ろうが 以降の処理でなんらかの攻撃処理 が行われるでしょうから,問題ありでしょうね.

超絶右留斗羅天才プログラマー
記事: 44
登録日時: 12年前

Re: do whileの使い方

#3

投稿記事 by 超絶右留斗羅天才プログラマー » 12年前

ボスの初期化以外で、ghost[attackghost].flagがFALSEになる所が無いのが原因だと思われます。

do~whileの条件式を、ghost[attackghost].state == GDownとするか、ghost[attackghost].flag = FALSEを適切な場所に挿入するかのどちらかで直るのではないかなと思います。
ただの超絶右留斗羅天才プログラマーです。同人ゲーム制作進捗度:7%

ヨシタケ

Re: do whileの使い方

#4

投稿記事 by ヨシタケ » 12年前

usaoさん
超絶右留斗羅天才プログラマー さん

ありがとうございます。ghost[attackghost].flagはここでしか使ってませんでした。うっかりしてました。

これからは書き込む際、わかりやすく記述するよう気をつけます。

閉鎖

“C言語何でも質問掲示板” へ戻る