龍神録の10章と11章のenemy_pattern0関数についての質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yamabuki
記事: 3
登録日時: 14年前
住所: 岡山

龍神録の10章と11章のenemy_pattern0関数についての質問

#1

投稿記事 by yamabuki » 14年前

初投稿となります。よろしくお願いします。
10章と11章のenemy_pattern0関数を見比べ疑問に思ったので投稿しました。
コードの下へ続きます

10章のコード

コード:

void enemy_pattern0(int i){
    if(enemy[i].cnt<60){
        enemy[i].y+=2.0;
    }
    if(enemy[i].cnt>60+240){
        enemy[i].y-=2.0;
    }
}
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;
}
①if文の中の比較に10章では構造体のカウンタ(cnt)をそのまま用いてますが、11章ではなぜ一度int tに入れなおして比較しているのでしょうか?
②11章のif文について == を使って書いていますが、== だとifの内容が1度しか実行されないのでは・・・?
  なぜ10章のcnt < 60のような書き方をしなくても動いてくれるのか?
この2つが引っかかっています。よろしくお願いします。

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

Re: 龍神録の10章と11章のenemy_pattern0関数についての質問

#2

投稿記事 by h2so5 » 14年前

  1. 見やすさや書きやすさの問題だと思います。 t を使わないで書くと、

    コード:

    void enemy_pattern0(int i){
        if(enemy[i].cnt==0)
            enemy[i].vy=2;
        if(enemy[i].cnt==60)
            enemy[i].vy=0;
        if(enemy[i].cnt==60+enemy[i].wait)
            enemy[i].vy=-2;
    }
    このように長くて見にくくなってしまいますので。
  2. 10章では座標を直接加算しているのに対し、11章では速度を指定しているからです

    10章:
    enemy.y+=2.0;
    11章:
    enemy.vy=2;

    11章で速度を指定した場合は、enemy_act()関数で毎ループ速度分だけ敵座標が加算されますので、
    ifの内容は1回の実行で済むということです。

yamabuki
記事: 3
登録日時: 14年前
住所: 岡山

Re: 龍神録の10章と11章のenemy_pattern0関数についての質問

#3

投稿記事 by yamabuki » 14年前

①たしかにすっきりとソースコードが見えますね。
②なるほど!座標の処理は別関数でやっていたんですか・・・enemy_pattern0関数ばかりに気を取られていました

閉鎖

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