基本C#骰子游戏

问题描述 投票:3回答:3

我是c#和编码的新手。为了尝试提高我的技能,我正在尝试创建一个基本游戏,其中两个玩家掷骰子并记录他们的分数。玩家通过达到20赢得胜利。每个玩家轮流掷骰子将他们的第一个掷骰子添加到他们的第二个等等,直到其中一个达到20.玩家如果掷出六个就可以再次掷骰子。

我目前的代码是:


        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);

我特别挣扎的是将球员第一次加注到第二次滚动。如果一个玩家掷出6,那么它会将6加到他们在重新掷骰中得到的值。

任何帮助都将非常感谢。

c# dice
3个回答
3
投票

您的代码存在许多问题:

  1. 你在循环中询问玩家名字
  2. 您正在循环中初始化Random生成器(这可能会在不同的循环上导致相同的结果,因为随机生成器可以使用相同的种子)
  3. 您正在使用=而不是+ =重置总计
  4. 停止条件是总计== 20而不是总<20
  5. 您使用两个while语句而不是AND(&&)条件

这只是一个简短的概述..

这可以是一个解决方案:

  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);

1
投票

您的问题是您使用以下行重置以前的分数:

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

您应该将其更改为使用+=,如下所示:

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

这就像是说:PlayerTotal[0] = PlayerTotal[0] + DiceThrow[0];

除此之外,您的代码中还有一些问题。

例如,你在代码的开头有一个Do,但是有2个whiles ......你可能想用AND语句创建一个While。此外,Do语句需要在您获得用户名后...

例如://获取用户名

 do
 {
    // All your Dice throwing logic
 }
 while (PlayerTotal[0] != 20 && PlayerTotal[1] != 20);

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();
© www.soinside.com 2019 - 2024. All rights reserved.