# 繰り返し

## 決まられた回数を繰り返す命令「for」

[記入できるファイルをダウンロード](https://class.illogic.games/attachments/10)

### 練習課題

#### C#を読みましょう

以下の表は、C#で書いた命令とその日本語の意味が書いてある。空枠を完成してください。

<table border="1" id="bkmrk-c%23-%E6%97%A5%E6%9C%AC%E8%AA%9E-for%28int-i-%3D-0" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 33.631%;"></col><col style="width: 66.4882%;"></col></colgroup><thead><tr><td class="align-center">**C#**

</td><td class="align-center">**日本語**

</td></tr></thead><tbody><tr><td>```c#
for(int i = 0; i < 10; i++)
```

</td><td>「i」という変数は 0から9までの値を変えながら、10回繰り返す</td></tr><tr><td>```c#
for(int i = 1; i <= 10; i++)
```

</td><td><details><summary>答え</summary>

「i」という変数は 1から10までの値を変えながら、10回繰り返す

</details></td></tr><tr><td>```c#
for(int i = 10; i > 0; i--)
```

</td><td><details><summary>答え</summary>

「i」という変数は 10から1までの値を変えながら、10回繰り返す

</details></td></tr><tr><td>```c#
for(int i = 0; i < 15; i+=2)
```

</td><td><details><summary>答え</summary>

「i」という変数は

0, 2, 4, 6, 8, 10, 12, 14

の値を変えながら、8回繰り返す

</details></td></tr></tbody></table>

#### Unityで練習

1〜100の整数を繰り返し、表示してください。ただし…  
「3」で割れる整数の代わりに「ho」を表示  
「5」で割れる整数の代わりに「ge」を表示  
「3」と「5」両方で割れる整数の代わりに「hoge」を表示

例：  
 1, 2, ho, 4, ge, ho, 7, 8, ho, ge, 11, ho, 13, 14, hoge, 16, 17, ho …

**<span style="text-decoration: underline;">ヒント</span>**

「余り」演算子（モジュロ、剰余演算子）を使ってください。余りの演算子は整数の割り算の余りを返す：

```c#
int a = 4 % 3;   // a は 1 になる 
int b = 6 % 3;   // b は 0 になる
int c = 12 % 5;  // c は 2 になる 
```

<details id="bkmrk-%E7%AD%94%E3%81%88-%2F%2F-1%EF%BD%9E100%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%99-for%28"><summary>答え</summary>

```c#
// 1～100繰り返す
for(int i = 1; i <= 100; i++)
{
    // 3 と 5 のあまりを計算し、0 である場合は、
    // その数値で割れることである。
    bool div3 = i % 3 == 0;
    bool div5 = i % 5 == 0;

    // 両方で割れる？
    if (div3 && div5)
    {
        Debug.Log("hoge");
    }
    // 3で割れる？
    else if (div3)
    {
        Debug.Log("ho");
    }  
    // 5で割れる？
    else if (div5)
    {
        Debug.Log("ge");
    }  
    // その他
    else
    {
        Debug.Log($"{i}");
    }
}
```

</details>## 回数が決まっていない繰り返す命令「while」

for文は決まった回数（例：0～10）を繰り返す命令であるが、場合により、回数が決まっていなく、何かの条件を満たしている間には繰り返す場合もある：

 例：体力残っていたら→遊び続ける  
 例：時間切れになっていなければ→遊び続ける  
 例：敵がプレーヤーを捕まっていなければ→追いかける

**<span style="text-decoration: underline;">書式：</span>**

```c#
while(繰り返し条件)
{
    繰り返したい処理
}
```

例えば、サイコロは「6」になるまで繰り返すを書くとしたら：

```c#
int dice = 0;
while (dice != 6)
{
    // Random.RangeはUnityの機能であり、乱数を生成する
    dice = Random.Range(1, 7);  // 1〜6の間の乱数を生成（7未満）
    Debug.Log($"サイコロの値：{dice}");
}
Debug.Log("終了");
```

上記の例で、回数が決まっていなくて、サイコロは6以外だったら繰り返す処理である。

### 練習課題

以下のスクリプトでwhileを使い、完成してください（UnityでもOK）

```c#
// 体力
int playerHP = 100;

// プレーヤーが生きていたら、繰り返す
________________________
{
    Debug.Log($"現在の体力 {playerHP}");
    int damage = 30;      
    playerHP -= damage;  // 体力を減らす
}

Debug.Log("ゲームオーバー");
```

<details id="bkmrk-%E7%AD%94%E3%81%88-%2F%2F-%E4%BD%93%E5%8A%9B-int-playerh"><summary>答え</summary>

```c#
// 体力
int playerHP = 100;

// プレーヤーが生きていたら、繰り返す
while(playerHP > 0)
{
    Debug.Log($"現在の体力 {playerHP}");
    int damage = 30;      
    playerHP -= damage;  // 体力を減らす
}

Debug.Log("ゲームオーバー");
```

</details>このプログラムはコンソールで何を表示するか？その出力を書いてください：

<table border="1" id="bkmrk-%C2%A0-%C2%A0-%C2%A0-%C2%A0" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td><details><summary>答え</summary>

現在の体力 100

現在の体力 70

現在の体力 40

現在の体力 10

</details></td></tr></tbody></table>