【问题标题】:C# craps simulationC# 掷骰子模拟
【发布时间】:2019-03-09 03:01:30
【问题描述】:

我看到过有关 Craps 的问题,但它们与 python 和 Java 有关。我希望熟悉 C# 的人可以帮助我。下面的代码旨在模拟掷骰子游戏。除了一个问题外,该代码大部分都有效。

我想我应该简要解释一下游戏。掷出两个 6 面骰子。如果结果是 7 或 11。玩家或“射手”自动获胜。如果掷出 2、3 或 12,则射手自动失败。但是,如果滚动另一个数字,则该数字将成为“点”。射手再次掷骰,直到他们再次掷出点数或掷出 7。如果重新掷出点数,则射手获胜。如果掷出 7,这一次就输了。

因此,问题在于此代码在第一次掷骰后仍会自动给出 2、3、11 和 12 的输赢。例如:射手掷出 6。6 成为点,射手再次掷出。如果射手掷出 3,则此代码将此结果标记为失败,此时应继续滚动直到掷出 6 或 7。每当在第一次掷骰后掷出 2、3、11 或 12 时,就会发生这种错误的结局。任何有关纠正此代码逻辑的帮助将不胜感激。谢谢 另外,我希望这个问题的格式正确。如果不是,请告诉我。

class Craps
{
    const int dieSides = 6;

    int roll;
    //const int repeatGame = 1000;

    Random random = new Random();

    public void RollDice()
    {
        int die1 = 0;
        int die2 = 0;

        die1 = random.Next(1, 7);

        die2 = random.Next(1, 7);

        roll = die1 + die2;
        //Console.WriteLine("The shooter roled: {0}", roll);
    }

    public void PlayCraps()
    {
        RollDice();
        Console.WriteLine("The shooter roled: {0}", roll);

        int gameStatus = 0;
        int point = roll;
        int numRolls = 1;
        if (roll != 7 || roll != 11 || roll != 2 || roll != 3 || roll != 12)
        {
            Console.WriteLine("The point is: {0}", point);
        }
        while (gameStatus < 1)
        {


            if (roll == 7 || roll == 11)
            {
                Console.WriteLine("You won!");
                gameStatus++;
                break;
            }
            else if (roll == 2 || roll == 3 || roll == 12)
            {
                Console.WriteLine("You lost.");
                gameStatus++;
                break;
            }
            else
            {

                while (point != roll || roll != 7)
                {
                    RollDice();

                    if (roll == point)
                    {
                        Console.WriteLine("The shooter roled: {0}", roll);
                        Console.WriteLine("You won!");
                        numRolls++;
                        gameStatus++;
                        break;
                    }

                    if (roll == 7)
                    {
                        Console.WriteLine("The shooter roled: {0}", roll);
                        Console.WriteLine("You lost");
                        numRolls++;
                        gameStatus++;
                        break;
                    }
                    else
                    {
                        numRolls++;
                        Console.WriteLine("The shooter roled: {0}", roll);
                        break;
                    }

                }

            }

        }
        Console.WriteLine("This game was {0} roll(s)", numRolls);
    }



    static void Main(string[] args)
    {
        Craps NewGame = new Craps();
        NewGame.PlayCraps();
        Console.ReadLine();
    }
}

【问题讨论】:

  • 使用 VS 优秀的调试器逐步检查您的代码并观察它的作用
  • 您需要添加一个变量来跟踪当前点并首先检查它是否匹配。如果有当前点,则跳到下一个滚动。如果没有当前点,则检查 2/3/11/12
  • 您的最后一次休息是触发 3 行为。一旦有一个点,如果滚动不是 7 或者你正在打破那个内循环的点

标签: c# loops if-statement random


【解决方案1】:

用户 pm100 评论说最终的 break 将代码返回到外部循环,这导致了错误。删除这个解决了我的问题中描述的问题。可能还有其他错误或改进此代码的方法,但该评论解决了该问题的特定焦点。

【讨论】:

    猜你喜欢
    • 2016-04-18
    • 2011-07-12
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多