ページ 1 / 1
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章終えてみます!!