C#使用骰子掷骰子游戏

时间:2018-10-03 15:44:37

标签: c# loops random methods

以下代码适用于掷骰子游戏。我不确定代码的逻辑是否正确。我想测试它,但是当我运行这段代码时,没有输出。它将编译并显示空白屏幕,没有输出。我不知道为什么什么都不显示。同样,任何对代码逻辑的建议也将不胜感激。当最初不滚动2、3、7、11或12时,我在如何执行重新滚动过程上遇到困难。谢谢

对于那些不熟悉游戏的人:掷2个骰子,掷7或11则获胜。 2、3或12是亏损。其他任何数字都将成为“点”,并且玩家将重新滚动直到该点或7被掷出为止。达到目标就是胜利。这次7是亏损。

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(6) + 1;

        die2 = random.Next(6) + 1;

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

    public void PlayCraps()
    {
        RollDice();
        int gameStatus = 0;
        int point = roll;
        int numRolls = 1;

        while (gameStatus < 1)
        {


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

                RollDice();
                Console.WriteLine("The point is: {0}", point);

                while (point != roll || roll != 7)
                {
                    if (roll == point)
                    {
                        Console.WriteLine("You won!");
                        numRolls++;
                        gameStatus++;
                    }

                    if (roll == 7)
                    {
                        Console.WriteLine("You lost");
                        numRolls++;
                        gameStatus++;
                    }
                    RollDice();
                    numRolls++;

                }

            }
        }
    }



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

3 个答案:

答案 0 :(得分:3)

在您的Main函数中,您正在创建一个Craps对象,但从未对其进行任何操作。

如果您调用Craps.PlayCraps(),它将导致它实际上执行除创建对象以外的其他操作,然后等待用户输入。

答案 1 :(得分:2)

我可能会弄错,但是我相信在main方法中,您应该调用该方法,而不仅仅是类。 示例:

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

} }

答案 2 :(得分:0)

作为您在Main()中提出的其他建议的替代方法,您可以在新的PlayCraps()对象上调用NewGame方法,例如:

 Craps NewGame = New Craps();
 NewGame.PlayCraps();

您可以代替PlayCraps()构造函数中调用Craps方法:

class Craps
{
    const int dieSides = 6;

    int roll;
    //const int repeatGame = 1000;

    Random random = new Random();

    //start the game in the constructor:
    public Craps()
    {
       this.PlayCraps();
    }


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

        die1 = random.Next(6) + 1;

        die2 = random.Next(6) + 1;

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

    public void PlayCraps()
    {
        RollDice();
        int gameStatus = 0;
        int point = roll;
        int numRolls = 1;

        while (gameStatus < 1)
        {


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

                RollDice();
                Console.WriteLine("The point is: {0}", point);

                while (point != roll || roll != 7)
                {
                    if (roll == point)
                    {
                        Console.WriteLine("You won!");
                        numRolls++;
                        gameStatus++;
                    }

                    if (roll == 7)
                    {
                        Console.WriteLine("You lost");
                        numRolls++;
                        gameStatus++;
                    }
                    RollDice();
                    numRolls++;

                }

            }
        }
    }



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

现在,当您初始化NewGames掷骰子对象时,PlayCraps()方法将作为该初始化的一部分被调用,游戏将开始。我认为另一种方法更清晰一些,它允许您在调用Craps方法之前设置PlayCraps()属性(如果有的话),但是我觉得这里使用构造函数是值得一提。