Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中用for循环迭代数组的Hangman游戏#_C#_Arrays_Loops_For Loop_Foreach - Fatal编程技术网

C# 在C中用for循环迭代数组的Hangman游戏#

C# 在C中用for循环迭代数组的Hangman游戏#,c#,arrays,loops,for-loop,foreach,C#,Arrays,Loops,For Loop,Foreach,所以,早些时候我发布了一个问题,询问如何在字符数组中运行字符串,使每个字母等于数组中一个单独的字符值 我尝试使用foreach循环,然后将数组中的每个对象标记为“Guess”,然后根据用户输入的值测试每个值,但是如果用户输入了一个假值,我就不知道如何在循环结束时输出。而不是每次值对数组值为false时都输出,因为循环的目的是为每个值做一些事情 所以我有点被卡住了。我认为有一种方法可以通过for循环来实现,但我还是有点不懂装懂。我想知道是否有人能帮我 char letter;

所以,早些时候我发布了一个问题,询问如何在字符数组中运行字符串,使每个字母等于数组中一个单独的字符值

我尝试使用foreach循环,然后将数组中的每个对象标记为“Guess”,然后根据用户输入的值测试每个值,但是如果用户输入了一个假值,我就不知道如何在循环结束时输出。而不是每次值对数组值为false时都输出,因为循环的目的是为每个值做一些事情

所以我有点被卡住了。我认为有一种方法可以通过for循环来实现,但我还是有点不懂装懂。我想知道是否有人能帮我

        char letter;
        int score = 0;
        string hangWord;

        //input inputs
        Console.WriteLine("Welcome to the hangman game!");
        Console.WriteLine();
        Console.WriteLine();
        Console.WriteLine();
        Console.WriteLine("Player 1 please enter a word.");
        hangWord = Convert.ToString(Console.ReadLine());
        char[] hangCharacters = hangWord.ToCharArray();
        char[] asteriskWord = hangWord.ToCharArray();
        string displayWord;

        foreach (char guess in asteriskWord)
        {
            asteriskWord[guess] = '*';
        }
        while (score < 5)
        {
            Console.WriteLine("Enter a letter please");

            Console.WriteLine();
            foreach (char guess in hangCharacters)
            {                //How do I write a loop that tests all values and if none are correct
                             //displays "You guessed incorrectly"?
                letter = Convert.ToChar(Console.ReadLine());
                if( guess == letter)
                {
                    Console.WriteLine("You guessed correctly!");
                    Console.WriteLine
                        //Also I don't know how to change the correct value      in the asteriskWord[] so that it displays
                        //only the character that was guessed in asteriskWord[]
                }

            }
        }
        Console.WriteLine("Your score is " + score);
        if (displayWord == hangWord)
            Console.WriteLine("You Win! Thank you for playing!");
        else
        {
            Console.WriteLine("Thank you for playing! Try again!");
        }
char字母;
智力得分=0;
串字;
//输入
控制台.WriteLine(“欢迎来到刽子手游戏!”);
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
Console.WriteLine(“播放器1请输入一个单词”);
hangWord=Convert.ToString(Console.ReadLine());
char[]hangCharacters=hangWord.ToCharArray();
char[]asteriskWord=hangWord.ToCharArray();
字符串显示字;
foreach(星号中的字符猜测)
{
星号[猜测]='*';
}
而(得分<5分)
{
Console.WriteLine(“请输入一封信”);
Console.WriteLine();
foreach(字符中的字符猜测)
{//如何编写一个循环来测试所有值,如果没有一个值是正确的
//显示“您猜错了”?
字母=Convert.ToChar(Console.ReadLine());
如果(猜测==字母)
{
WriteLine(“你猜对了!”);
控制台写入线
//此外,我不知道如何更改星号[]中的正确值以使其显示
//只有在星号[]中猜到的字符
}
}
}
Console.WriteLine(“你的分数是”+分数);
if(displayWord==hangWord)
控制台。WriteLine(“你赢了!谢谢你玩!”);
其他的
{
Console.WriteLine(“谢谢您玩!再试一次!”);
}

在foreach将bool标志设为false之前,仅当字母匹配时才在foreach内部设为true,否则将保持false。迭代后测试条件,并根据标志状态显示消息。

您可以稍微更改一下逻辑,看看猜测是否在挂起字符中。此时,您只检查用户输入的字母是否是当前迭代的字母

letter = Convert.ToChar(Console.ReadLine());
if(hangCharacters.Any(c => c == letter))
    Console.WriteLine("You guessed correctly!");
else
    Console.WriteLine("You guessed incorrectly!");

要使用以上内容,您需要包括
System.Linq

谢谢,这很有意义!我会支持你的评论,但我还是个笨蛋。我还需要4个重复lol,但我会记住你的。不要把所有的东西都塞进一个单音法。分解您的实现。