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

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

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

#1

投稿記事 by 維管束 » 13年前

またまた申し訳ありません
龍神六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を入れるのでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 13年前

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

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

コード:

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

維管束

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

#3

投稿記事 by 維管束 » 13年前

>>h2so5さん

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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#4

投稿記事 by h2so5 » 13年前

開始時間は bltime では?
cnt は時間によって動作を変えるためのカウンタだと思います。

維管束

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

#5

投稿記事 by 維管束 » 13年前

>>h2so5さん
たぶんbltimeは玉の発射時間だと思います

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#6

投稿記事 by h2so5 » 13年前

関数の役割からすると cnt を使うことは不自然ではないと思いますが、どこが疑問なのでしょうか。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

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

#7

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

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章のプログラムがわかりません・・・・・

#8

投稿記事 by 維管束 » 13年前

h2so5さん、Dixqさん
ありがとうございます。
頑張って11章終えてみます!!

閉鎖

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