C#でじゃんけん 第4版

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


第 4 版では、勝ち、負け、あいこを判断するメソッド JudgeResult メソッドを書き換えます。これまでは if 文でそれぞれの手の組み合わせを場合分けしていました。今回は、手の組み合わせに対する結果をデータとして用意しておくようにします。


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


第3版の JudgeResult メソッドは以下のように、あなたの手とコンピュータの手を、if 文で場合分けするようになっていました。

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

    if (yourHand == GU)
    {
        if (computerHand == GU)
        {
            // あなた: GU、コンピュータ: GU => あいこ
            result = Draw;
        }
        else if (computerHand == CYOKI)
        {
            // あなた: GU、コンピュータ: CYOKI => あなたの勝ち
            result = YouWin;
        }
        . . . . .
    }
    else if (yourHand == CYOKI)
    {
        if (computerHand == GU)
        {
            // あなた: CYOKI、コンピュータ: GU => コンピュータの勝ち
            result = ComputerWin;
        }
        . . . . .
    }
    else
    {
        . . . . .
    }

    return result;
}


今回は、手の組み合わせに対する結果をデータとして用意しておき、その内容を参照するようにします。あなたの手は GU、CYOKI、PA の 3 つのうちのどれか、コンピュータの手もその 3 つのうちのどれかです。あなたの手とコンピュータの手の組み合わせは 3 x 3 = 9 通りのうちのどれかになります。以下のように、それぞれの組み合わせの結果を値にした 3 x 3 の 2 次元配列を用意します。

static readonly int[,] ResultTable = new int[HAND_MAX, HAND_MAX]
{
    {
        Draw,           // あなた: GU、コンピュータ: GU => あいこ
        YouWin,         // あなた: GU、コンピュータ: CYOKI => あなたの勝ち
        ComputerWin,    // あなた: GU、コンピュータ: PA => コンピュータの勝ち
    },
    {
        ComputerWin,    // あなた: CYOKI、コンピュータ: GU => コンピュータの勝ち
        Draw,           // あなた: CYOKI、コンピュータ: CYOKI => あいこ
        YouWin,         // あなた: CYOKI、コンピュータ: PA => あなたの勝ち
    },
    {
        YouWin,         // あなた: PA、コンピュータ: GU => あなたの勝ち
        ComputerWin,    // あなた: PA、コンピュータ: CYOKI => コンピュータの勝ち
        Draw,           // あなた: PA、コンピュータ: PA => あいこ
    },
};


この配列を用意すると、JudgeResult メソッドは、あなたの手とコンピュータの手を用いて、その値を参照するだけになります。

internal static int JudgeResult(int yourHand, int computerHand)
{
    int result = ResultTable[yourHand, computerHand];
    return result;
}