C#骰子游戏实现

c# dice game implementation

我一直在思考如何实现代码,因此当它编译为一个计数器时,它显示一个计数器而不是 'counters' 作为一个计数器的复数形式。我需要有关如何在下面给出的代码中实现该代码的帮助。

namespace ReferralDG
{
    class Program
    {
        static void Main(string[] args)
        {
                Console.WriteLine("Even Minus Odd Game: ");
                Random rand = new Random();
                bool PlayAgain = false;
                do
                {
                    int numberOfDice = 0;
                    int totalOfDiceRolled = 0;
                    while (numberOfDice > 10 || numberOfDice < 3)
                    {
                        Console.WriteLine("How many dice do you wish to play     with? (Between 3 and 10?)");
                    numberOfDice = Convert.ToInt32(Console.ReadLine());
                    if (numberOfDice > 10 || numberOfDice < 3)
                    {
                        Console.WriteLine("Please enter the correct number
                    }
                    }

                    Console.Write("Dice rolls: ");
                    int evenTotal = 0;
                    int oddTotal = 0;
                    for (int i = 0; i < numberOfDice; i++)
                    {                    
                        int diceRoll = rand.Next(1, 7);
                        if (diceRoll % 2 == 0)
                        {
                            evenTotal += diceRoll;
                        }
                        else
                        {
                            oddTotal += diceRoll;
                        }
                        totalOfDiceRolled += diceRoll;
                        Console.Write(diceRoll + " ");
                    }
                    int counters = evenTotal - oddTotal;
                    Console.WriteLine();
                    if (counters > 0)
                    {
                        Console.WriteLine("You take " + counters + "     counters.");
                }
                else if (counters < 0)
                {
                    Console.WriteLine("You give " + Math.Abs(counters) + " counters.");
                }
                else if (evenTotal == oddTotal)
                {
                    Console.WriteLine("Even total is equal to odd total");
                }
                else
                {
                    Console.WriteLine("No counters this game");
                }
                Console.WriteLine("Would you like to play again? (Y/N): ");
                string playAgain = Console.ReadLine().ToUpper();
                if (playAgain == "Y")
                {
                    PlayAgain = true;
                }
                else
                {
                    PlayAgain = false;
                }
            } while (PlayAgain);
       }
  }

}

您可以只添加额外的 if 到您的区块。

if (counters > 1) {
    Console.WriteLine("You take " + counters + " counters.");
}
else if (counters > 0) // or if you rather counters == 1
{
    Console.WriteLine("You take " + counters + " counter.");
}
else if (counters < -1)
{
    Console.WriteLine("You give " + Math.Abs(counters) + " counters.");
}
else if (counters < 0)
{
    Console.WriteLine("You give " + Math.Abs(counters) + " counter.");
}
else if (evenTotal == oddTotal)
{
    Console.WriteLine("Even total is equal to odd total");
}
else
{
    Console.WriteLine("No counters this game");
}

另一个"simpler"解决方案是将其输出为counter(s)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    namespace ReferralDG
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Even Minus Odd Game: ");
                Random rand = new Random();
                bool PlayAgain = false;
                do
                {
                    int numberOfDice = 0;
                    int totalOfDiceRolled = 0;
                    while (numberOfDice > 10 || numberOfDice < 3)
                    {
                        Console.WriteLine("How many dice do you wish to play     with? (Between 3 and 10?)");
                        numberOfDice = Convert.ToInt32(Console.ReadLine());
                        if (numberOfDice > 10 || numberOfDice < 3)
                        {
                            Console.WriteLine("Please enter the correct number");
                        }
                    }

                    Console.Write("Dice rolls: ");
                    int evenTotal = 0;
                    int oddTotal = 0;
                    for (int i = 0; i < numberOfDice; i++)
                    {
                        int diceRoll = rand.Next(1, 7);
                        if (diceRoll % 2 == 0)
                        {
                            evenTotal += diceRoll;
                        }
                        else
                        {
                            oddTotal += diceRoll;
                        }
                        totalOfDiceRolled += diceRoll;
                        Console.Write(diceRoll + " ");
                    }
                    int counters = evenTotal - oddTotal;
                    Console.WriteLine();
                    if (counters > 1)
                    {
                        Console.WriteLine("You take " + counters + " counters.");
                    }
                    else if (counters > 0) // or if you rather counters == 1
                    {
                        Console.WriteLine("You take " + counters + " counter.");
                    }
                    else if (counters < -1)
                    {
                        Console.WriteLine("You give " + Math.Abs(counters) + " counters.");
                    }
                    else if (counters < 0)
                    {
                        Console.WriteLine("You give " + Math.Abs(counters) + " counter.");
                    }
                    else if (evenTotal == oddTotal)
                    {
                        Console.WriteLine("Even total is equal to odd total");
                    }
                    else
                    {
                        Console.WriteLine("No counters this game");
                    }
                    Console.WriteLine("Would you like to play again? (Y/N): ");
                    string playAgain = Console.ReadLine().ToUpper();
                    if (playAgain == "Y")
                    {
                        PlayAgain = true;
                    }
                    else
                    {
                        PlayAgain = false;
                    }
                } while (PlayAgain);
            }
        }
    }
}

您可以使用 if shorthand statement ? valueIfTrue : valueIfFalse; 来设置正确的字符串值。把所有东西都放在这样的函数中

    private static void printCounters(int counters,bool take) {
        counters = Math.Abs(counters);
        string msg1 = take ? "You take " : "You give ";
        string msg2 = counters == 1 ? " counter." : " counters.";
        Console.WriteLine( msg1 + counters + msg2);
    }

这样做的好处是你可以很容易地调用 printCounters(counters,true) 如果你拿走 printCounters(counters,give) 如果你给

您好,欢迎来到 Whosebug 山姆!

因此,当您将计数器写入屏幕时,如果它们是单个计数器,您希望它写单数,如果超过 1,则写复数?我还假设无论计数器是正数还是负数,我们都希望它能正常工作。

我们可以使用 string.Format() and an Inline If statement.

而不是在您的 if 语句中添加更多分支

在这种情况下,它看起来像这样:

 // Console.WriteLine("You take " + counters + "     counters.");
 Console.WriteLine(string.Format("You take {0}     counter{1}.", counters, Math.Abs(counters) == 1 ? "" : "s"));

这实际上只是一种写多个 "else ifs" 的方式,因为您仍然添加了分支语句。我的方式是 in-line 而不是垂直占据更多 space。

如果你想要更花哨,你也可以使用 IIF 来设置 "give" 或 "take":

if (counters != 0)
{
    Console.WriteLine(string.Format("You {0} {1}     counter{2}.",
        counters > 0 ? "take" : "give",
        counters, 
        Math.Abs(counters) == 1 ? "" : "s"
        ));
}
else if (evenTotal == oddTotal)
{
    Console.WriteLine("Even total is equal to odd total");
}
else
{
    Console.WriteLine("No counters this game");
}

阅读链接,了解最适合您的内容!