HPが0でゲームオーバー、ifで作る「判断」の仕組み_全役職プログラマー計画_C言語編 #2
前回のおさらい
前回、プログラムの「材料」を学びました。
- 変数(値を入れる箱)
- 四則演算(値を計算する)
- 乱数(ランダムな値を作る)
値を作って、動かすことができるようになりました。
では、その値を使って何をするのか。
プログラムの半分といっても過言ではない、「判断」 の仕組みです。
値を見て、条件によって動きを変える仕組みを手に入れます。
- if文
- 比較演算子
- else / else if
- scanf(キーボード入力)
- 複数条件(&&・||)
を見ていきます。
「値を見て、条件によって動きを変える」 仕組みを学びます。
この章も、実際にコードを打って試してみてください。
読むだけより、
自分で打つ
↓
動かす
↓
ミスを修正する / 人に聞く ← ここでレベルアップ
↓
結果を見て納得する
これが最速攻略方法です。
if文を学習する前に
まず動かしてみましょう。
#include <stdio.h>
int main()
{
int HP = 0;
if (HP <= 0)
{
printf("ゲームオーバー\n");
}
return 0;
}
コードをコピペしてF5キーで実行。「ゲームオーバー」と表示されたら成功です。
動作確認ができたら右上xボタンで黒いウィンドウを削除して、実際に学んでいきましょう。
if文って何?
一言で表すと
「もし〇〇なら、△△する」
これがif文です。
さっきのコードを分解するとこうなります。
if (HP <= 0)
{
printf("ゲームオーバー\n");
}
if
→ 「もし」
(HP <= 0)
→ 「HPが0以下なら」(条件)
{
printf("ゲームオーバー\n");
}
→ 「この処理をする」
まとめると
「もし HPが0以下なら、ゲームオーバーと表示する」
これだけです。
`{}`(波かっこ)について詳しく…
{ と } で囲まれた部分をブロックといいます。
「条件が当てはまったときに実行する処理」をここに書きます。
if (条件)
{
// ここに処理を書く
// 何行でも書ける
}
処理が1行でも、複数行でも、形は同じです。
比較演算子って何?
さっきのコードに出てきた <=
これが比較演算子です。
「値を比べるための記号」だと思ってください。
| 記号 | 意味 | 例 |
|---|---|---|
== |
等しい | HP == 0 |
!= |
等しくない | HP != 0 |
< |
より小さい | HP < 10 |
> |
より大きい | HP > 10 |
<= |
以下 | HP <= 0 |
>= |
以上 | HP >= 100 |
`=` と `==` は別物!
HP = 0; // HPに0を入れる(代入)
HP == 0; // HPが0かどうか調べる(比較)
= で「入れる」、
== で「比べる」。
数学とは別の意味なので注意!
elseって何?
if文は「条件を満たしたとき」しか動きません。
では「満たさなかったとき」はどうしましょう?
そこで登場するのが else です。
int HP = 50;
if (HP <= 0)
{
printf("ゲームオーバー\n");
}
else
{
printf("まだ戦える\n");
}
「HPが0以下なら ゲームオーバー、そうでなければ まだ戦える」
else は「それ以外はこっち」です。
else ifって何?
「HPが少ないとき、警告を出したい」
条件が増えたときに使うのが else if です。
int HP = 20;
if (HP <= 0)
{
printf("ゲームオーバー\n");
}
else if (HP <= 30)
{
printf("HPが少ない!\n");
}
else
{
printf("まだ戦える\n");
}
上から順番に条件を確認して、
最初に当てはまったものだけ実行します。
HP = 20 の場合…
HP <= 0 ? → No(20は0以下じゃない)
HP <= 30 ? → Yes(20は30以下)
→「HPが少ない!」と表示
scanfって何?
ここまで、HPの値はコードに直接書いていました。
int HP = 20; // ← ここを毎回書き換えてた
値を変えるたびにコードを書き換えて、F5を押して…
少し面倒ですよね。
そこで登場するのが scanf です。
「キーボードから値を受け取る仕組み」
です。
#include <stdio.h>
int main()
{
int HP = 0;
printf("HPを入力してください: ");
scanf("%d", &HP);
if (HP <= 0)
{
printf("ゲームオーバー\n");
}
else if (HP <= 30)
{
printf("HPが少ない!\n");
}
else
{
printf("まだ戦える\n");
}
return 0;
}
実行すると黒いウィンドウが入力待ちになります。
数字を打ってEnterを押すと、その値でif文が動きます。
分解するとこうなります。
printf("HPを入力してください: ");
→ 入力を促すメッセージを表示する
scanf("%d", &HP);
→ キーボードから整数を受け取って、HPに入れる
scanf の形はこうなります。
scanf("型の指定", &変数名);
| 部分 | 意味 |
|---|---|
"%d" |
整数を受け取る |
&HP |
受け取った値をHPに入れる |
`&` って何?
& は「この変数の場所を教える」という意味です。
scanf は「どこに値を入れればいいか」を知る必要があるため、
変数名の前に & をつけます。
scanf("%d", &HP); // HPの場所を教える → そこに値が入る
& を忘れると正しく動かないので注意!
最初はよく忘れてしまうポイントです。
複数条件って何?
「HPが0以下、かつ残機も0ならゲームオーバー」
条件をふたつ組み合わせたいとき。
使うのが &&(かつ)と ||(または)です。
int HP = 0;
int Life = 0;
// HP が 0以下 かつ 残機も0 なら
if (HP <= 0 && Life <= 0)
{
printf("完全にゲームオーバー\n");
}
// HP が 0以下 または 残機が0 なら
if (HP <= 0 || Life <= 0)
{
printf("ピンチ!\n");
}
| 記号 | 意味 | 両方必要? |
|---|---|---|
&& |
かつ(AND) | 両方Yesで動く |
|| |
または(OR) | どちらかYesで動く |
まとめると
今回やったのは
値を見る(比較演算子)
↓
条件によって分岐する(if / else / else if)
↓
外から値を受け取る(scanf)
↓
条件を組み合わせる(&& / ||)
です。
これで「判断」の全部が揃いました。
ここまで来たあなたは、
- 値を作り(変数)
- 計算して(四則演算)
- 判断する(if)
この3つを手に入れました。
質問や相談があればDiscordでも受け付けています。
作りたいものや目標は人それぞれなので、
個別の学習相談やプログラムの質問など気軽にどうぞ!
Discord:
次回
ゲームにするには、
同じ処理を何度も繰り返す仕組みが必要です。
次の章では、その最後のピースとなる
while / for(ループ) を見ていきます。
ただ、このままだとプログラムは1回動いて終わるだけ。
ゲームにするには、同じ処理を何度も繰り返す仕組みが必要です。
お疲れさまでした。
全役職プログラマー計画 C言語編 #2
Discussion