13章・enter_shot関数について

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

13章・enter_shot関数について

#1

投稿記事 by ab » 15年前

こんばんは。
13章のところで質問があります。

敵の弾発射処理として、

①enemy.bltime==enemy.cnt時にenter_shot(i)を呼び出し
②enter_shot関数でshot[j].flagの立っていないものを調べて空いていたら登録

といった処理を行っていますがこの時、渡した変数"i"をshot配列の添え字(shot)にし、for,if文を削除し
て同様の処理をしても特に問題がなさそうな気がします。
void enter_shot(int i){
shot.flag=1;//フラグをたてる
shot.knd=enemy.blknd;//弾の種類
shot.cnt=0;
return ;
}
このような処理だと何か不都合があるのでしょうか?
(shot[j].num=iの処理を気持ち的に削除したかったので…)

以上、宜しくお願い致します。

Poco

Re:13章・enter_shot関数について

#2

投稿記事 by Poco » 15年前

> void enter_shot(int i){
> shot.flag=1;//フラグをたてる
> shot.knd=enemy.blknd;//弾の種類
> shot.cnt=0;
> return ;
> }
> このような処理だと何か不都合があるのでしょうか?
> (shot[j].num=iの処理を気持ち的に削除したかったので…)
>

これってenemyが撃った弾が、必ずshotに格納されるって事を意味していますよね?
敵が弾を2発撃てなくなりますよ。

Dixq (管理人)

Re:13章・enter_shot関数について

#3

投稿記事 by Dixq (管理人) » 15年前

結果として同じ事をするプログラムでも担当を明確にしたいという事があります。

この場合、enter_shotは純粋に「ショットを登録する」という仕事をしてくれる関数です。
しかし上記のようなプログラムにするためには、関数呼び出し元で、登録可能な配列要素を探すという処理が必要になり、
ショットを登録する為に役割が2つの関数を隔てる事になります。

ところで、enemyの添え字iとshotの添え字iは意味が違います。
0番の敵が0番のショットを使用しているとは限りません。
1対多や多対1でも対応できるようにしたかったのですが、敵と弾幕は1対1で所有の関係にした方がわかりやすかったですね。

しかし関数の引数をなるべく少なくしたい為とは言え、こんな関数は見るにたえないですね我ながら・・。

Dixq (管理人)

Re:13章・enter_shot関数について

#4

投稿記事 by Dixq (管理人) » 15年前

shotはbulletを所有しているので、

shot=弾幕(弾の親分。弾Managerみたいな感じ)
bullet=弾

という関係ですね。

enemyは必要な時どれかあいているshotを利用する事になります。

Poco

Re:13章・enter_shot関数について

#5

投稿記事 by Poco » 15年前

> shot=弾幕(弾の親分。弾Managerみたいな感じ)
> bullet=弾
>
> という関係ですね。

っをう、すみません、ミスリードですね。

てことは、abさんが示したような変更をすると、ある弾幕が完全に終わらない限り
次の弾幕が張れないことになりますね。

閉鎖

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