C#掷骰子模拟

时间:2018-10-03 19:39:31

标签: c# loops if-statement random

我看到了与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();
    }
}

1 个答案:

答案 0 :(得分:0)

用户pm100评论说,最后一个break将代码返回到外循环,这是导致错误的原因。删除此错误解决了我的问题中所述的问题。可能还有其他错误或改进此代码的方法,但是该注释解决了此问题的特别重点。