HPが0になるまで戦い続ける、while / forで作る「繰り返し」の仕組み_全役職プログラマー計画_C言語編 #3
前回のおさらい
前回、プログラムの「判断」を学びました。
- 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タイトルが作れるかと言うと工数がかかりすぎてしまいます。(逆を言えば時間さえあれば全て作れる!!)
プログラムはここから、
「効率化」や「整理」の考え方に入っていきます。
少しだけ難易度は上がりますが、
ゲーム開発では欠かせない重要なステップです。
ゲームでは、
- 敵が複数いる
- アイテムをたくさん持つ
- マップの情報を並べる
など、同じ種類のデータをまとめて扱いたい場面がたくさんあります。
そんなときに使うのが、
配列
を見ていきます。
次回
全役職プログラマー計画 #3
Discussion