我的If / else语句执行不正确

时间:2019-09-30 22:08:19

标签: c#

所以我做了一个基本的学校作业游戏。要求之一就是让程序选择谁先播放,是计算机还是播放器。因此,我编写了一个if / else语句,然后将我的代码放入其中。该代码有效,但是随后我添加了代码,该代码限制了玩家可以输入的数字。这些数字范围是1-3。如果玩家输入的数字小于一或大于三,则他们将收到错误消息。在执行if / else命令后,如果选择了第一个播放器,它将停止工作,仅选择播放器,而不是计算机。有办法解决这个问题吗?

int chips = 21, user, computer;
int pickPlayer;
Random rn = new Random();
pickPlayer = rn.Next(1, 5);
if (pickPlayer == 1 || pickPlayer == 2 || pickPlayer == 3 )
{
    //Player goes First
    while (chips > 0)    
    {
        Console.WriteLine("There are {0} Chips Choose Either 1,2,3 chips", chips);
        user = Convert.ToInt32(Console.ReadLine());
        if (user > 3 || user <= 0)
        {
            Console.WriteLine("You can only take between 1 and 3 chips. Try again");                            
        }
        else
        {
            chips = chips - user;
            Random rnd = new Random();

            /*if (chips <= 0)

            {
                Console.WriteLine("You Lose");
                Console.ReadLine();
            } */

        }
        if (chips <= 0)    
        {
            Console.WriteLine("You Lose");
            Console.ReadLine();
        }    
    }
}
else
{
    //Computer goes first
    while (chips > 0)    
    {
        Console.WriteLine("There are {0} Chips Choose Either 1,2,3 or 4 chips", chips);
        Random rnd = new Random();
        computer = rnd.Next(1, 4);
        user = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Computer picks {0} chips", computer);

        chips = chips - computer;

        if (chips <= 0)    
        {
            Console.WriteLine("You Lose");
            Console.ReadLine();
        }    
        else    
        {
            if (user > 3 || user <= 0)
            {
                Console.WriteLine("You can only take between 1 and 3 chips. Try again");
            }
            else
            {
                chips = chips - user;
                /*if (chips <= 0)

                { 
                    Console.WriteLine("You Win");
                    Console.ReadLine();
                } */
            }
            if (chips <= 0)    
            { 
                Console.WriteLine("You Win");
                Console.ReadLine();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

尝试一下。

我纠正了算法,并使用匿名方法和更改名称重构了代码,但您可以改为创建类方法。

我使用int.TryParse而不是Convert,因此在出现错误的情况下它仅返回数字或0。

Random random = new Random();
int chipsStart = 21;
int chipsCurrent = chipsStart;
int playerTake;
int computerTake;
bool playerFirst = random.Next(0, 2) == 0;

Func<bool> processPlayer = () =>
{
  Console.WriteLine("There are {0} Chips Choose Either 1,2,3 chips", chipsCurrent);
  do
  {
    int.TryParse(Console.ReadLine(), out playerTake);
  }
  while ( playerTake == 0 );
  if ( playerTake < 1 || playerTake > 3 )
    Console.WriteLine("You can only take between 1 and 3 chips. Try again");
  else
    chipsCurrent = chipsCurrent - playerTake;
  if ( chipsCurrent > 0 )
    return true;
  else
  {
    Console.WriteLine("You Lose");
    return false;
  }
};

Func<bool> processComputer = () =>
{
  computerTake = random.Next(1, 4);
  Console.WriteLine("Computer picks {0} chips", computerTake);
  chipsCurrent = chipsCurrent - computerTake;
  if ( chipsCurrent > 0 )
    return true;
  else
  {
    Console.WriteLine("You Win");
    return false;
  }
};

if ( playerFirst )
  while ( true )
  {
    if ( !processPlayer() ) break;
    if ( !processComputer() ) break;
  }
else
  while ( true )
  {
    if ( !processPlayer() ) break;
    if ( !processComputer() ) break;
  }

Console.ReadLine();
相关问题