🍵

HPが0になるまで戦い続ける、while / forで作る「繰り返し」の仕組み_全役職プログラマー計画_C言語編 #3

に公開

前回のおさらい

https://zenn.dev/mattya3713/articles/fe60827bf725fb

前回、プログラムの「判断」を学びました。

  • if文(もし〇〇なら)
  • 比較演算子(値を比べる)
  • else / else if(それ以外はこっち)
  • &&・||(条件を組み合わせる)

条件によって動きを変えることができるようになりました。

ただ、このままだとプログラムは1回動いて終わりです。

ゲームにするには、
同じ処理を何度も繰り返す仕組みが必要です。

今回はその「繰り返し」を作る

  • while文
  • for文

を見ていきます。

「条件を満たす間、ずっと動かし続ける」 仕組みを学びます。


この章も、実際にコードを打って試してみてください。

読むだけより、

自分で打つ
 ↓
動かす
 ↓
ミスを修正する / 人に聞く ← ここでレベルアップ
 ↓
結果を見て納得する

これが最速攻略方法です。

while文を学習する前に

まず動かしてみましょう。

#include <stdio.h>

int main()
{
    int HP = 100;

    while (HP > 0)
    {
        HP -= 20;
        printf("HPは: %d\n", HP);
    }

    printf("ゲームオーバー\n");

    return 0;
}

コードをコピペしてF5キーで実行。
HPが20ずつ減っていき、最後に「ゲームオーバー」と表示されたら成功です。

動作確認ができたら右上xボタンで黒いウィンドウを削除して、実際に学んでいきましょう。

while文って何?

一言で表すと

「〇〇の間、ずっとくり返す」

これがwhile文です。

さっきのコードを分解するとこうなります。

while (HP > 0)
{
    HP -= 20;
    printf("HPは: %d\n", HP);
}
while

→ 「〜の間ずっと」

(HP > 0)

→ 「HPが0より大きい間」(繰り返す条件)

{
    HP -= 20;
    printf("HPは: %d\n", HP);
}

→ 「この処理を繰り返す」

まとめると

「HPが0より大きい間、20ダメージを受け続ける」

ifと形がよく似ていますよね。

条件が満たされたとき
if 1回だけ実行する
while 満たされている間、何度も実行する

違いはそれだけです。

無限ループに注意!

while文で注意したいのが無限ループです。

条件が永遠に true のままだと、
プログラムが止まらなくなります。

// 危険な例
while (true)
{
    printf("終わらない\n"); // 永遠に動き続ける
}

黒いウィンドウが止まらなくなったら、
ウィンドウを閉じるか Ctrl + C で止めてください。

自分も最初は何度かやらかしました。

for文って何?

while文と同じ「繰り返し」ですが、

「5回だけ攻撃する」

のように回数が決まっているときに使いやすいのが for 文です。

for (int i = 0; i < 5; i++)
{
    printf("攻撃! %d回目\n", i + 1);
}

見慣れない書き方ですが、分解するとシンプルです。

for ( ① ; ② ; ③ )
場所 意味
最初に1回だけ実行 int i = 0(カウンターを0からスタート)
繰り返す条件 i < 5(iが5未満の間)
1回ごとに実行 i++(iを1増やす)

流れにすると

① i = 0 にする
 ↓
② i < 5 ? → Yes
 ↓
処理を実行
 ↓
③ i を 1 増やす(i = 1)
 ↓
② i < 5 ? → Yes
 ↓
…(5回繰り返したら終了)
`i++` って何?

i++i = i + 1 の省略形です。

前回の += と同じ仲間ですね。

i++;    // i を 1 増やす
i--;    // i を 1 減らす

カウンターを動かすときによく使います。

whileとfor、どっちを使う?

「同じ繰り返しなら、どっちでもいいの?」

はい、どちらでも書けます。
ただ、使い分けの目安があります。

使いたい場面 向いてるのは
「HPが0になるまで」など、回数が決まっていない while
「5回攻撃する」など、回数が決まっている for

迷ったらこの表を思い出してください。

まとめると

今回やったのは

条件を満たす間、繰り返す(while)

決まった回数、繰り返す(for)

状況に応じて使い分ける

です。


ここまで来たあなたは、

  • 値を作り(変数)
  • 計算して(四則演算)
  • 判断して(if)
  • 繰り返す(while / for)

この4つを手に入れました。

正直、これらがゲームの「動く仕組み」のほぼ全部です。

「え、これだけ?」と思うかもしれませんが、
勇者が走っても、敵がダメージを受けても、
ステージがクリアされても、
全部この組み合わせです。

世の中のゲームの仕組みすべてが再現できるようになりました。

次回

とは言っても、実際にもうAAAタイトルが作れるかと言うと工数がかかりすぎてしまいます。(逆を言えば時間さえあれば全て作れる!!)

プログラムはここから、
「効率化」や「整理」の考え方に入っていきます。

少しだけ難易度は上がりますが、
ゲーム開発では欠かせない重要なステップです。

ゲームでは、

  • 敵が複数いる
  • アイテムをたくさん持つ
  • マップの情報を並べる

など、同じ種類のデータをまとめて扱いたい場面がたくさんあります。

そんなときに使うのが、
配列

を見ていきます。

次回

https://zenn.dev/mattya3713/articles/e053eb0e8fe75e


全役職プログラマー計画 #3

Discussion