C#でじゃんけん 第5版

C# でじゃんけんするプログラム 第5版 です。


第 5 版では、勝ち、負け、あいこを判断するメソッド JudgeResult メソッドをさらに書き換えます。第 4 版では、手の組み合わせに対する結果をデータとして用意しておくようにしました。これを計算と比較により求めるように変更します。


第5版のプログラム全体はこちら、第4版の記事はこちらです。

勝ち、負け、あいこですが、以下のように判断できます。

  • あなたの手とコンピュータの手が同じなら、あいこ。
  • あなたの手とコンピュータの手がある条件を満たせば、あなたの勝ち。
  • それ以外は、コンピュータの勝ち。


次に、あなたがコンピュータに勝つ場合、満たすべき条件について考えます。あなたがコンピュータに勝つのは、以下の 3 通りです。

  • あなたが GU (0) で、コンピュータが CYOKI (1)。
  • あなたが CYOKI (1) で、コンピュータが PA (2)。
  • あなたが PA (2) で、コンピュータが GU (0)。

この 3 つは、あなたの手の次の手がコンピュータの手になっていると考えることができます。GU (0) の次は CYOKI (1)、CYOKI (1) の次は PA (2) というぐあいです。PA (2) 場合、その次は最初に戻って GU (0) になると考えればうまくゆきます。


プログラムの実装ですが、

  • "その次" は "+ 1"
  • "最初に戻る" は割り算の余りを求める "% HAND_MAX"

を使います。


HAND_MAX の値は、手の最大値である PA の 2 に 1 を加えた 3 にしています。あなたの手が PA (2) の場合、"+ 1" の結果は 3。これを 3 で割ると余りは 0 で、結果は GU (0) になります。 "(あなたの手 + 1) % HAND_MAX" がコンピュータの手と等しいなら、あなたの勝ちと判断できます。


JudgeResult メソッドは、以下のようになります。

internal static int JudgeResult(int yourHand, int computerHand)
{
    int result;

    if (yourHand == computerHand)
    {
        // あなたの手とコンピュータの手が同じなら、あいこです。
        result = Draw;
    }
    else if ((yourHand + 1) % HAND_MAX == computerHand)
    {
        // あなたの手の次の手がコンピュータの手になっていたら、あなたの勝ちです。
        result = YouWin;
    }
    else
    {
        // 上記以外なら、コンピュータの勝ちです。
        result = ComputerWin;
    }

    return result;
}