🍵

HPが0でゲームオーバー、ifで作る「判断」の仕組み_全役職プログラマー計画_C言語編 #2

に公開

前回のおさらい

https://zenn.dev/mattya3713/articles/53c2cc3392d438

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

  • 変数(値を入れる箱)
  • 四則演算(値を計算する)
  • 乱数(ランダムな値を作る)

値を作って、動かすことができるようになりました。

では、その値を使って何をするのか。

プログラムの半分といっても過言ではない、「判断」 の仕組みです。

値を見て、条件によって動きを変える仕組みを手に入れます。

  • 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:
https://discord.gg/PRAHPbEDf

次回

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

次の章では、その最後のピースとなる
while / for(ループ) を見ていきます。
ただ、このままだとプログラムは1回動いて終わるだけ。
ゲームにするには、同じ処理を何度も繰り返す仕組みが必要です。

お疲れさまでした。

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


全役職プログラマー計画 C言語編 #2

Discussion