所以我做了一个基本的学校作业游戏。要求之一就是让程序选择谁先播放,是计算机还是播放器。因此,我编写了一个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();
}
}
}
}
答案 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();