Hangman数组C#

时间:2014-01-06 04:32:41

标签: c# arrays string

我正在编写一个刽子手代码,但我遇到的问题是,多次使用相同字母的单词会给我一个奇怪的输出,例如如果单词是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();
    }

1 个答案:

答案 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]);      
}

此外,在您错误地使用所有字母后,您只能进入“您猜对了!”。如果你猜对了,你就必须猜出一堆错误的字母才能达到这一点。如果你在生活中没有猜到,那么它会告诉你你赢了。我喜欢游戏的这一部分,即使你做的也是你不能失去的游戏是我的专长。 ; - )