条件分岐
練習課題
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 = 体重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 dmg = 0;
int wpn = 2;
switch(wpn)
{
case 0:
dmg = 1;
break;
case 1:
dmg = 5;
break;
case 2:
dmg = 2;
break;
case 3:
dmg = 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 dmg;
Weapon wpn = Weapon.Knife; // 新し「Weapon」というデータ型を使える!
switch(wpn)
{
case Weapon.Unarmed: // 「0」と同じ
dmg = 1;
break;
case Weapon.Sword: // 「1」と同じ
dmg = 5;
break;
case Weapon.Knife: //「2」と同じ
dmg = 2;
break;
case Weapon.Pistol: //「3」と同じ
dmg = 10;
break;
}
Debug.Log($"攻撃力:{damage}");
