我正在编写一个刽子手代码,但我遇到的问题是,多次使用相同字母的单词会给我一个奇怪的输出,例如如果单词是ARRAY,输出将是“AR --- RR- - “如果一封信被猜错了,那么它的if语句仍会显示并且还会多次循环。我该如何解决这个问题?
public string[] words = new string[5] { "ARRAY", "OBJECT", "CLASS", "LOOP", "HUMBER" };
public string[] torture = new string[] { "left arm", "right arm", "left leg", "right leg", "body", "head" };
int i;
public void randomizedWord()
{
Random random = new Random();
int index = random.Next(0, 5);
char[] hidden = new char[words[index].Length];
string word = words[index];
Console.WriteLine(words[index]);
Console.Write("The word is: ");
for (i = 0; i < hidden.Length; i++)
{
Console.Write('-');
hidden[i] = '-';
}
Console.WriteLine();
int lives = 6;
do
{
Console.WriteLine("Guess a letter: ");
char userinput = Console.ReadLine().ToCharArray()[0];
for (int i = 0; i < hidden.Length; i++)
{
if (word[i] == userinput)
{
hidden[i] = userinput;
for (int x = 0; x < hidden.Length; x++)
{
Console.Write(hidden[x]);
}
}
if (userinput != hidden[i])
{
Console.WriteLine("That is not a correct letter");
Console.WriteLine("You lost a " + torture[i]);
lives--;
}
}
Console.WriteLine();
} while (lives != 0);
Console.WriteLine("You guessed right!");
Console.ReadLine();
}
答案 0 :(得分:1)
你不会等到检查所有信件。首先检查所有字母......同时你需要检查字母是否与任何字符匹配。如果任何字母不匹配,您将删除生命。
bool foundLetter = false
for (int i = 0; i < hidden.Length; i++)
{
if (word[i] == userinput)
{
hidden[i] = userinput;
foundLetter = true;
}
}
现在您已经检查了所有可以打印出来的单词,在for循环之后,而不是在其中。在你用每个正确的字母打印出来之前,给你很多额外的字符。
for (int x = 0; x < hidden.Length; x++)
{
Console.Write(hidden[x]);
}
如果没有任何字符匹配而不是每个不正确的字母,就会夺去生命。这将是一个更难的游戏版本。再次,在你的for循环完成之后。此外,您根据不正确的字母选择了身体部位。如果第6个字母是错误的,那么你将会受到酷刑指数的限制。相反,生命的数量应为torture.Length
,您应该使用lives
作为索引。
if (!foundLetter)
{
lives--;
Console.WriteLine("That is not a correct letter");
Console.WriteLine("You lost a " + torture[lives]);
}
此外,在您错误地使用所有字母后,您只能进入“您猜对了!”。如果你猜对了,你就必须猜出一堆错误的字母才能达到这一点。如果你在生活中没有猜到,那么它会告诉你你赢了。我喜欢游戏的这一部分,即使你做的也是你不能失去的游戏是我的专长。 ; - )