ページ 11

11章のプログラムがわかりません・・・・・

Posted: 2012年7月01日(日) 20:58
by 維管束
またまた申し訳ありません
龍神六11章の

コード:

void enemy_pattern0(int i){
    int t=enemy[i].cnt;
    if(t==0)
        enemy[i].vy=2;//下がってくる
    if(t==60)
        enemy[i].vy=0;//止まる
    if(t==60+enemy[i].wait)//登録された時間だけ停滞して
        enemy[i].vy=-2;//上がっていく
}
のところのプログラムで質問です
なのですがなんとなくプログラムの流れはつかめているのですが、
なぜtにenemy.cntを入れるのでしょうか?

Re: 11章のプログラムがわかりません・・・・・

Posted: 2012年7月01日(日) 21:19
by h2so5
そのまま if(enemy.cnt==0) のように書くと冗長だからだと思います。
単に見やすさの問題ですね。
(追記:)
見やすさ以外にも、コードを書き換えたい時に少ない書き換えで済む場合がある、という利点もあります。

厳密に言えばこの場合は t の数値で分岐しているだけなので

コード:

const int t=enemy[i].cnt;
のように const 修飾するのがベターかもしれません。

Re: 11章のプログラムがわかりません・・・・・

Posted: 2012年7月01日(日) 21:42
by 維管束
>>h2so5さん

ありがとうございます。
確かにあとでかんたんに変えられるほうがいいですね!

あと、もう一つ疑問なのが
なぜcntを持ってくるのでしょう・・・・
cntは”いつあらわれるか”を
あらわすものだと思っていたのですが・・

Re: 11章のプログラムがわかりません・・・・・

Posted: 2012年7月01日(日) 22:01
by h2so5
開始時間は bltime では?
cnt は時間によって動作を変えるためのカウンタだと思います。

Re: 11章のプログラムがわかりません・・・・・

Posted: 2012年7月01日(日) 22:13
by 維管束
>>h2so5さん
たぶんbltimeは玉の発射時間だと思います

cntとステージカウントが一致した時に敵を表示
cntはそれの役割だと思うのですが・・・・・

Re: 11章のプログラムがわかりません・・・・・

Posted: 2012年7月01日(日) 22:27
by h2so5
関数の役割からすると cnt を使うことは不自然ではないと思いますが、どこが疑問なのでしょうか。

Re: 11章のプログラムがわかりません・・・・・

Posted: 2012年7月01日(日) 22:42
by Dixq (管理人)
tに入れているのはh2so5さんが仰っているように単に可読性のためです。

enemy.cntはその敵が出現してから何カウント目か、を表しているものですから、
例えば
if(t==0)
は敵が出現した瞬間、
if(t==60)
は敵が出現して1秒後(60カウント後)ということになります。

従って、vyは鉛直方向の移動速度ですから、

if(t==0)
enemy.vy=2;//下がってくる

で敵が出現した瞬間下方向に移動するようにパラメータをセットし、

if(t==60)
enemy.vy=0;//止まる

で敵が出現して1秒後に止まるようにパラメータがセットされているわけです。

Re: 11章のプログラムがわかりません・・・・・

Posted: 2012年7月02日(月) 01:39
by 維管束
h2so5さん、Dixqさん
ありがとうございます。
頑張って11章終えてみます!!