3

私はC#とコーディング全般に不慣れです。スキルを向上させるために、2人のプレーヤーがサイコロを振ってスコアを記録する基本的なゲームを作成しようとしています。プレーヤーは20に到達することで勝ちます。各プレーヤーは順番にサイコロを振って、最初のロールを2番目のロールに追加し、1人が20に達するまで続けます。プレーヤーは6を振ると、再びサイコロを振ることができます。

私が持っている現在のコードは次のとおりです。


        do
        {

            Console.Write("Enter the name of Player 1: ");
            Player[0] = Console.ReadLine();
            Console.Write("Enter the name of Player 2: ");
            Player[1] = Console.ReadLine();

            Random DiceRandom = new Random();
            DiceThrow[0] = DiceRandom.Next(1, 7);

            int i = 0;
            while (i <= 1)
            {
                DiceThrow[0 + i] = DiceRandom.Next(1, 7);
                Console.ReadLine();
                Console.Write(Player[0 + i] + " rolled a " + DiceThrow[0 + i]);
                if (DiceThrow[0 + i] != 6) i++;
            }

            Console.ReadLine();
            PlayerTotal[0] = DiceThrow[0];
            PlayerTotal[1] = DiceThrow[1];


            Console.ReadLine();
            Console.Write(Player[0] + " currently has " + PlayerTotal[0]);
            Console.ReadLine();
            Console.Write(Player[1] + " currently has " + PlayerTotal[1]);
            Console.ReadLine();

        }
        while (PlayerTotal[0] == 20);
        while (PlayerTotal[1] == 20);

私が特に苦労しているのは、プレイヤーの最初のロールをそこの2番目のロールに追加することです。そして、プレイヤーが6をロールすると、リロールで得られるものに6が追加されます。

どんな助けでも大歓迎です。

4

3 に答える 3

4

ここでのコードにはいくつかの懸念事項があります。

  1. ループ内でプレイヤー名を尋ねています
  2. ループ内でランダムジェネレーターを初期化しています(ランダムジェネレーターは同じシードを使用できるため、これにより、異なるループで同じ結果が生じる可能性があります)
  3. +=の代わりに=を使用して合計をリセットしています
  4. 停止条件は、合計<20ではなく合計==20です。
  5. AND(&&)条件の代わりに2つのwhileステートメントを使用しています

これは簡単な概要です。

これは解決策になる可能性があります。

  Console.Write("Enter the name of Player 1: ");
  Player[0] = Console.ReadLine();
  Console.Write("Enter the name of Player 2: ");
  Player[1] = Console.ReadLine();

  Random DiceRandom = new Random();

  do
    {

        int i = 0;
        while (i <= 1)
        {
            int thisThrow = DiceRandom.Next(1, 6);
            DiceThrow[0 + i] += thisThrow;
            Console.ReadLine();
            Console.Write(Player[0 + i] + " rolled a " + thisThrow);
            if (thisThrow != 6) i++;
        }

        Console.ReadLine();
        PlayerTotal[0] += DiceThrow[0];
        PlayerTotal[1] += DiceThrow[1];


        Console.ReadLine();
        Console.Write(Player[0] + " currently has " + PlayerTotal[0]);
        Console.ReadLine();
        Console.Write(Player[1] + " currently has " + PlayerTotal[1]);
        Console.ReadLine();

    }
    while (PlayerTotal[0] < 20 && PlayerTotal[1] < 20);
于 2012-12-10T09:59:52.990 に答える
1

問題は、次の行で以前のスコアをリセットしていることです。

PlayerTotal[0] = DiceThrow[0];
PlayerTotal[1] = DiceThrow[1];

+=次のように使用するように変更する必要があります。

PlayerTotal[0] += DiceThrow[0];
PlayerTotal[1] += DiceThrow[1];

これは言うようなものです:PlayerTotal[0] = PlayerTotal[0] + DiceThrow[0];

それ以外に、コードにはさらにいくつかの問題があります。

たとえばDo、コードの先頭に1つありますが、2つありwhileます...おそらくWhileANDステートメントを使用して1つ作成する必要があります。また、Doステートメントは、ユーザーの名前を取得したにある必要があります...

例://ユーザー名を取得

 do
 {
    // All your Dice throwing logic
 }
 while (PlayerTotal[0] != 20 && PlayerTotal[1] != 20);
于 2012-12-10T09:58:39.290 に答える
0
    int i = 0;
    while (i <= 1)
    {
        int thisThrow = DiceRandom.Next(1, 6);
        DiceThrow[0 + i] += thisThrow;
        Console.ReadLine();
        Console.Write(Player[0 + i] + " rolled a " + thisThrow);
        if (thisThrow != 6) i++;
    }

    Console.ReadLine();
    PlayerTotal[0] += DiceThrow[0];
    PlayerTotal[1] += DiceThrow[1];


    Console.ReadLine();
    Console.Write(Player[0] + " currently has " + PlayerTotal[0]);
    Console.ReadLine();
    Console.Write(Player[1] + " currently has " + PlayerTotal[1]);
    Console.ReadLine();
于 2013-05-09T13:26:26.837 に答える