c#骰子游戏实施

时间:2017-02-19 13:48:43

标签: c# dice

我一直坚持如何实现代码,所以当它编译到一个计数器时,它会显示一个计数器而不是计数器'仅作为一个计数器的复数。我需要帮助我如何在我下面给出的代码中实现这段代码。

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

}

3 个答案:

答案 0 :(得分:1)

您可以使用if速记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)致电

答案 1 :(得分:0)

您只需在块中添加其他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");
}

另一个&#34;更简单&#34;解决方案是将其输出为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);
            }
        }
    }
}

答案 2 :(得分:0)

您好,欢迎来到StackOverflow Sam!

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

我们可以使用string.Format()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”的一种方式,因为您仍然添加了分支语句。我的方式是,它是在线而不是垂直占用更多空间。

如果你想获得更多的幻想,你可以使用IIF来设置“给予”或“接受”:

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

阅读链接,了解哪种方式最适合您!