【问题标题】:Basic C# Dice Game基本 C# 骰子游戏
【发布时间】:2012-11-27 17:17:36
【问题描述】:

我是 C# 和一般编码的新手。为了尝试提高我的技能,我正在尝试创建一个基本游戏,其中两名玩家掷骰子并记录他们的得分。玩家在达到 20 点时获胜。每个玩家轮流掷骰子,将他们的第一个骰子加到第二个骰子上,以此类推,直到其中一个达到 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);

我特别苦苦挣扎的是将玩家的第一卷添加到第二卷中。如果玩家掷出一个 6,它会将 6 添加到他们在重新掷出的结果中。

任何帮助都将不胜感激。

【问题讨论】:

    标签: c# dice


    【解决方案1】:
        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();
    

    【讨论】:

      【解决方案2】:

      您的代码存在许多问题:

      1. 您在循环中询问玩家姓名
      2. 您正在循环内初始化随机生成器(这可能会在不同的循环上导致相同的结果,因为随机生成器可以使用相同的种子)
      3. 您正在使用 = 而不是 += 来重置总计
      4. 停止条件是总计 == 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);
      

      【讨论】:

      • 感谢您的回复和担忧,编码对我来说是全新的,所以我不知道这些担忧。您提供的解决方案几乎是完美的。除非玩家掷出 6,然后再掷出 2,否则它会将数字 2 保存为他们的 PlayerTotal,而不是 8。
      • 是的,我已经更正了代码:DiceThrow[0 + i] 应该递增(使用 +=)而不是覆盖(使用 =)
      • 它确实将数字相加,但玩家可以掷出大于 6 的数字,这是不允许的。知道如何解决这个问题吗?
      • 这是因为您使用的是 Next(1, 7),这将返回从 1 到 7 的数字,我认为您应该使用 Next(1, 6) 以便在 6 处停止。 Next( minValue, MaxValue) 包括界限
      • 不,我得到的结果如下:玩家 1 掷出 12,玩家 2 掷出 8
      【解决方案3】:

      您的问题是您正在使用这些行重置以前的分数:

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

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

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

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

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

      例如,您在代码开头有一个Do,但有两个whiles... 您可能希望使用 AND 语句创建一个 While。此外,Do 语句需要在之后你得到用户的名字......

      例如: // 获取用户名

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

      【讨论】:

        猜你喜欢
        • 2013-10-14
        • 2012-02-29
        • 2015-08-25
        • 1970-01-01
        • 1970-01-01
        • 2020-08-02
        • 1970-01-01
        • 1970-01-01
        • 2014-03-16
        相关资源
        最近更新 更多