首页 > 解决方案 > 如果用户在hangman c#中正确猜测,我如何显示用户的输入

问题描述

我正在尝试使用控制台应用程序在 c# 中制作一个 hangman 版本。

现在起作用的是用户没有猜到的每个字母都显示一个 * 但不起作用的是当用户猜对时它不会显示用户在下一回合输入的字母。

这是我显示和显示用户猜出任何字母的代码。

 static void PlayHangMan(string randomWord)
    {
        char[] charArray;
        char userGuess;
        int counter = 0;

        charArray = randomWord.ToCharArray();

        while (counter < charArray.Length)
        {
            Console.Write("(Guess) Enter a letter in a word ");
            foreach (char character in charArray)
            {
                Console.Write("*");
            }
            Console.Write(" > ");
            userGuess = Console.ReadKey().KeyChar;
            Console.WriteLine();
            for (int index = 0; index < charArray.Length; index++)
            {
                if (charArray[index] == userGuess)
                {
                    charArray[index] = userGuess;
                    Console.Write(charArray[index]);
                }
                else
                {
                    Console.Write("*");
                }
            }
            Console.WriteLine();
            counter++;
        }
    }

- -更新 - -

由于下面的建议,我现在能够正确显示输入。但现在我试图跟踪用户何时猜错了。我已经尝试过下面的内容。但是我得到了非常有线的数字。就像我只猜错了一次,我希望猜数只增加一,而是显示 70 而不是一。不太清楚为什么

 while (found.Any(c => c == '*'))
        {
            Console.Write("(Guess) Enter a letter in a word ");
            Console.Write(found);
            Console.Write(" > ");
            userGuess = Console.ReadKey().KeyChar;
            Console.WriteLine();

            for (int index = 0; index < charArray.Length; index++)
            {
                if (charArray[index] == userGuess && userGuess != lettersUsed[index])
                {
                    found[index] = userGuess;
                    lettersUsed[index] = userGuess;
                }
                else if (lettersUsed[index] == userGuess)
                {
                    Console.WriteLine($"{userGuess} is already in the word");
                }
                else if (charArray[index] != userGuess && userGuess != lettersUsed[index])
                {
                    guesses++;
                }
            }
        }    

感谢您的建议!

标签: c#for-loopforeach

解决方案


您可以通过引入带有已找到符号的附加数组来解决它,如下面的代码所示。解决方案非常简单明了,test以word为例

int counter = 0;

var charArray = "test".ToCharArray();
var found = new char[charArray.Length];
for (int i = 0; i < charArray.Length; i++)
{
    found[i] = '*';
}

while (counter < charArray.Length)
{
    Console.Write("(Guess) Enter a letter in a word ");
    foreach (char character in charArray)
    {
        Console.Write("*");
    }

    Console.Write(" > ");
    var userGuess = Console.ReadKey().KeyChar;
    Console.WriteLine();
    for (int index = 0; index < charArray.Length; index++)
    {
        if (charArray[index] == userGuess)
        {
            found[index] = userGuess;
        }
        Console.Write(found[index]);
    }

    var any = false;
    foreach (var c in found)
        if (c == '*')
            any = true;

    if (!any)
        break;


    Console.WriteLine();
    counter++;
}

示例输出

在此处输入图像描述


推荐阅读