こんばんは。
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の処理を気持ち的に削除したかったので…)
以上、宜しくお願い致します。
13章・enter_shot関数について
Re:13章・enter_shot関数について
> void enter_shot(int i){
> shot.flag=1;//フラグをたてる
> shot.knd=enemy.blknd;//弾の種類
> shot.cnt=0;
> return ;
> }
> このような処理だと何か不都合があるのでしょうか?
> (shot[j].num=iの処理を気持ち的に削除したかったので…)
>
これってenemyが撃った弾が、必ずshotに格納されるって事を意味していますよね?
敵が弾を2発撃てなくなりますよ。
> shot.flag=1;//フラグをたてる
> shot.knd=enemy.blknd;//弾の種類
> shot.cnt=0;
> return ;
> }
> このような処理だと何か不都合があるのでしょうか?
> (shot[j].num=iの処理を気持ち的に削除したかったので…)
>
これってenemyが撃った弾が、必ずshotに格納されるって事を意味していますよね?
敵が弾を2発撃てなくなりますよ。
Re:13章・enter_shot関数について
結果として同じ事をするプログラムでも担当を明確にしたいという事があります。
この場合、enter_shotは純粋に「ショットを登録する」という仕事をしてくれる関数です。
しかし上記のようなプログラムにするためには、関数呼び出し元で、登録可能な配列要素を探すという処理が必要になり、
ショットを登録する為に役割が2つの関数を隔てる事になります。
ところで、enemyの添え字iとshotの添え字iは意味が違います。
0番の敵が0番のショットを使用しているとは限りません。
1対多や多対1でも対応できるようにしたかったのですが、敵と弾幕は1対1で所有の関係にした方がわかりやすかったですね。
しかし関数の引数をなるべく少なくしたい為とは言え、こんな関数は見るにたえないですね我ながら・・。
この場合、enter_shotは純粋に「ショットを登録する」という仕事をしてくれる関数です。
しかし上記のようなプログラムにするためには、関数呼び出し元で、登録可能な配列要素を探すという処理が必要になり、
ショットを登録する為に役割が2つの関数を隔てる事になります。
ところで、enemyの添え字iとshotの添え字iは意味が違います。
0番の敵が0番のショットを使用しているとは限りません。
1対多や多対1でも対応できるようにしたかったのですが、敵と弾幕は1対1で所有の関係にした方がわかりやすかったですね。
しかし関数の引数をなるべく少なくしたい為とは言え、こんな関数は見るにたえないですね我ながら・・。
Re:13章・enter_shot関数について
shotはbulletを所有しているので、
shot=弾幕(弾の親分。弾Managerみたいな感じ)
bullet=弾
という関係ですね。
enemyは必要な時どれかあいているshotを利用する事になります。
shot=弾幕(弾の親分。弾Managerみたいな感じ)
bullet=弾
という関係ですね。
enemyは必要な時どれかあいているshotを利用する事になります。
Re:13章・enter_shot関数について
> shot=弾幕(弾の親分。弾Managerみたいな感じ)
> bullet=弾
>
> という関係ですね。
っをう、すみません、ミスリードですね。
てことは、abさんが示したような変更をすると、ある弾幕が完全に終わらない限り
次の弾幕が張れないことになりますね。
> bullet=弾
>
> という関係ですね。
っをう、すみません、ミスリードですね。
てことは、abさんが示したような変更をすると、ある弾幕が完全に終わらない限り
次の弾幕が張れないことになりますね。