Skip to main content

条件分岐

練習課題

ワードファイルをダウンロード

C#の処理を完成してみましょう

1. 以下のC#のプログラムを完成してください

// ゲームでダメージを受け、残機を確認し、ゲームオーバーかどかう判定する

int hp = 50; // 体力
int lives = 1; // 残機
int damage = 100; // ダメージ

// ダメージを受け、体力を減らす

________________________________________

// もし、体力が0以下だったら...

________________________________________
{
    // 残機を一つ減らす

    ______________________________________
}

// もし、残機がゼロだったら

________________________________________
{
    Debug.Log("ゲームオーバー");
}

このプログラムはコンソールで何を表示するか?その出力を書いてください:



2. 以下のC#のプログラムを完成してください

// レースゲームで、チェックポイントを通過することにより、時間切れを延期する

float timeLeft = 8.51; // 残りの時間(秒数)
float raceDistance = 5843.43; //走行距離

float checkPoint01 = 2300; // スタート → チェックポイント1の距離
float checkPoint02 = 1500; //  チェックポイント1 → チェックポイント2距離
float goalPoint = 2500; // チェックポイント2 → ゴールまでの距離

// もし、ゴールを超えていたら...

_____________________________________________________
{
    Debug.Log("レース終了!");
}

// 一方、もし走行距離がチェックポイント2を超えたら...

_____________________________________________________
{
    Debug.Log("チェックポイント2通過!");
    timeLeft += 80;
}

// 一方、もし走行距離がチェックポイント1を超えたら...

_____________________________________________________
{
    Debug.Log("チェックポイント1通過!");
    timeLeft += 60;
}

// 残りの時間を表示
Debug.Log($"残りの時間:{timeLeft}");

このプログラムはコンソールで何を表示するか?その出力を書いてください:


Unityで練習

体重と身長でBMIを計算し、画面で適切な出力を表示しよう(参考:BMIと適正体重

BMI Table 式:BMI = 体重kg ÷ (身長m)2

ヒント:

  • 体重と慎重の変数を作成し、適当な数値を代入
  • BMIを計算
  • if分でBMIの判定し、コンソールで表示

比較の改良

同じ変数をなんども「==」で比較する「switch-case」

次の問題について考えてみてください

サイコロの数値は1から6までの間にして、その値を漢字で表示したい。つまり「1」の場合は「一」、「2」の場合は「二」など。if-elseで作成するとしたら、以下のようなプログラムになる:

// サイコロの値
int dice = 5;

if (dice == 1)
{
    Debug.Log("一");
}
else if (dice == 2)
{
    Debug.Log("二");
}
else if (dice == 3)
{
    Debug.Log("三");
}
else if (dice == 4)
{
    Debug.Log("四");
}
else if (dice == 5)
{
    Debug.Log("五");
}
else if (dice == 6)
{
    Debug.Log("六");
}
else
{
    Debug.Log("無効な数値");
}

このプログラムは、カスケードのように「1じゃなければ、2を確認する、2じゃなければ、3を確認する」、次々に「==」で比較するパターンは時々に現れる。この場合は「switch-case」が便利。上のプログラムは以下のようになる:

// サイコロの値
int dice = 5;

switch(dice)
{
case 1: // dice == 1 と同じ 
    Debug.Log("一");
    break;
case 2: // dice == 2 と同じ
    Debug.Log("二");
    break;
case 3: // dice == 3 と同じ
    Debug.Log("三");
    break;
case 4: // dice == 4 と同じ
    Debug.Log("四");
    break;
case 5: // dice == 5 と同じ
    Debug.Log("五");
    break;
case 6: // dice == 6 と同じ
    Debug.Log("六");
    break;
default: // elseと同じ
    Debug.Log("無効な数値");
    break;
}

整数に名前を付ける「列挙」(enum)

次の問題について考えてみてください。武器の種類により、攻撃力を変える処理を作りたい。処理しやすくするため、それぞれの武器に整数を与えた:

0: 非武装(攻撃力: 1)
1: 剣(攻撃力: 5)
2: ナイフ(攻撃力: 2)
3: 鉄砲(攻撃力: 10)

「switch-case」を使えば、以下のような処理になる:

int damage = 0;
int weapon = 2;
switch(weapon)
{
case 0: 
  damage = 1;
  break;
case 1: 
  damage = 5;
  break;
case 2: 
  damage = 2;
  break;
case 3: 
  damage = 10;
  break;
}
Debug.Log($"攻撃力:{damage}");

これでも実行ができるが、時間がたてば「0はなんだったっけ?」「1は?」のように、それぞれの整数の意味を忘れてしまう可能性がある。各数値に忘れないように、名前を付ける方法がある。「列挙」を作成することにより、各整数に読みやすい名前を付けることができる。

まず、列挙を定義しなければならない:

書式

enum 列挙名 
{
  整数「0」の名前,
  整数「1」の名前,
  整数「2」の名前,
  ...
  整数「n」の名前,
}

武器の例で、以下の列挙は適切でしょう:

enum Weapon
{
  Unarmed, // 0:非武装
  Sword,   // 1:剣
  Knife,   // 2:ナイフ
  Pistol,  // 3:鉄砲
}

そして、「switch-case」はとても分かりやすくなる!

int damage;
Weapon wpn = Weapon.Knife;  // 新し「Weapon」というデータ型を使える!
switch(wpn)
{
case Weapon.Unarmed: // 「0」と同じ
  damage = 1;
  break;
case Weapon.Sword:   // 「1」と同じ
  damage = 5;
  break;
case Weapon.Knife:   //「2」と同じ
  damage = 2;
  break;
case Weapon.Pistol:  //「3」と同じ
  damage = 10;
  break;
}
Debug.Log($"攻撃力:{damage}");

練習課題

ゲームでのアイテムショップを作ろうとして、以下のアイテムとその価格が決まった:

ポーション(小) 10ゼニ
ポーション(大) 25ゼニ
木の盾 50ゼニ
鉄の盾 100ゼニ
皮のブーツ 40ゼニ
魔法のマント 250ゼニ

ここで、次のプログラムをC#で作成し、Unityで確認してください

  1. 各種のアイテムを表すことができる「ItemType」の列挙を作成
  2. プレーヤーを持っているお金の変数を準備(playerMoney - 整数型)
  3. プレーヤーが買いたいアイテムの変数を準備(buyItem - ItemTypeの列挙型)
  4. switch-caseで定めたアイテムの価格を求める(itemCost - 整数)
  5. 変えるかどうかをif分で判定し、コンソールで結果を表示