C# 刽子手,检查整个单词是否匹配

C# 刽子手,检查整个单词是否匹配,c#,C#,这里是C#的初学者。我写了一个旧的经典游戏《刽子手》的控制台游戏,让用户在没有看到字母的情况下猜测单词中的字母 我的代码工作得很好,我只想再添加一件事,我现在不知道该怎么做。目前,如果你按“3”键玩游戏,你一次只能猜一个角色。我想让用户能够猜出整个单词,如果它是正确的,将其与单词匹配并写出 到目前为止,我有一个异常,如果用户试图写入多个字符,就会写出一条错误消息 我在这方面已经坚持了很长时间,如果有人能告诉我如何在我的代码中实现这一点,我会很高兴,我的代码如下 using System;

这里是C#的初学者。我写了一个旧的经典游戏《刽子手》的控制台游戏,让用户在没有看到字母的情况下猜测单词中的字母

我的代码工作得很好,我只想再添加一件事,我现在不知道该怎么做。目前,如果你按“3”键玩游戏,你一次只能猜一个角色。我想让用户能够猜出整个单词,如果它是正确的,将其与单词匹配并写出

到目前为止,我有一个异常,如果用户试图写入多个字符,就会写出一条错误消息

我在这方面已经坚持了很长时间,如果有人能告诉我如何在我的代码中实现这一点,我会很高兴,我的代码如下

    using System;
    using System.Collections.Generic;
    using System.Linq;//*Notering, ta reda på mer om linq
    using System.Media; 
    public class WordList : List<string> //Skapar klass WordList 
    {
    }
    public class Hangman
    {
    /* 
     * TO-DO-LIST:
     * Användaren ska kunna skriva in ett helt ord och  detta ska sedan
     * jämföras med de ord som finns i programmets lista. Se 10.7 i boken.
     */

    private static WordList words;
    private static Random randomR = new Random();

    public static void Main(string[] args)
    { /*Konsol utseende */
    Console.ForegroundColor = ConsoleColor.DarkGreen; //Ändra konstoltext färg till röd
    Console.Title = "C# Hangman"; //Ger konsolspelet en titel
    Console.WriteLine("Välkommen till C# Hangman-spelet!");                 //Hälsningsfras när spelet öppnas
    initializeWordList();

    //_______________________START-          MENY_______________________________________________
    int MenuChoice = 0; //Skapar heltals variabel som kommer användas i         switch sats
    while (MenuChoice != 4) //Loop som visar menyn tills spelaren gör ett val
    {

        Console.Write("\n\t1) Lägg till ord");
        Console.Write("\n\t2) Visa ordlista");
        Console.Write("\n\t3) Spela");
        Console.Write("\n\t4) Avsluta\n\n");

        Console.Write("\n\tVälj 1-4: ");        //Välj menyval

        MenuChoice = Convert.ToInt32(Console.ReadLine()); //Spelarens val registreras i 
                                                          //tidigare skapad variabel
        switch (MenuChoice)  //Switch sats startar.                           
        {  /*Alternativ 1 - Lägg till ord*/
            case 1: 
                Console.Clear();//Rensar konsolfönster
                Console.Write("\n\tLägg till ett ord\n\n");
                var insert = Console.ReadLine(); //Läser av inskrivet ord
                words.Add(insert); //Lägger till ord i lista
                Console.Write("\n\tOrdlista\n\n");
                words.Sort();
                foreach (string w in words) 
                    Console.WriteLine(w); //Skriv ut för att verifiera att ordet lagts till
                break;

            /*Alternativ 2 - Visa ordlista*/
            case 2: 
                Console.Clear();
                Console.Write("\n\tOrdlista\n\n");
                foreach (string w in words) // Skriver ut ordlista
                    Console.WriteLine(w);
                break;

            /*Alternativ 3 - Spela*/
            case 3:
                /*Spelar bakgrundsmusik i loop medans Alternativ 3 är valt*/
                (new SoundPlayer(@"c:\Program\Media\background.wav")).PlayLooping();
                Console.Clear();
                int numGuessesInt = -1; //Skapar variabel som används för att bestämma
                while (numGuessesInt == -1)//antal gissningar.

                {
                    /* Bestämmer antalet gissningar spelaren har.*/
                    userpickGuesses(ref numGuessesInt);
                }

                /* Väljer ut slumpartat ord*/
                string word = randomWord();


                /* skapar lista av char som visas */
                List<char> guessedLetters = new List<char>();
                bool solved = false;
                while (solved == false)
                {
                    /* Visning av sträng till spelare baserat på spelarens gissningar.
                     * Om spelaren ej lyckats gissa något rätt visas "_ _ _ " */
                    string wordToDisplay = showWord(guessedLetters, word);
                    /* Om strängen som returneras innehåller "_" karaktären, så har
                    * ej korrekt antal bokstäver gissats, för att kontrollera om spelare
                    * förlorar kollas det om variabel numGuessesLeft är mindre än 1.*/
                    if (!wordToDisplay.Contains("_"))
                    {
                        solved = true;
                        Console.WriteLine("Grattis, du vann!  Ordet du gissa var:  " + word);
                        /* Kolla om spelare vill spela igen. Om dom vill det så
                        * sätts variabel solved till true, detta avslutar loopen.
                        * Om spelare ej vill spela igen kommer metoden userReplay stänga ner programmet*/
                        userReplay();
                    }
                    else if (numGuessesInt <= 0)
                    {
                        solved = true;
                        Console.WriteLine("Trist kompis, du förlora! Det korrekta ordet var:  " + word);
                        userReplay();
                    }
                    else
                    {
                        /* Om spelaren varken vinner eller förlorar så
                        * visas ordet och antal gissningar minus 1.*/
                        letterGuess(guessedLetters, word, wordToDisplay, ref numGuessesInt);
                    }
                }

                break;

            case 4: /*Alternativ 4 - Avsluta spelet*/
                Console.WriteLine("\n\tTryck på valfri tangent för att avsluta?\n\n");
                break;
            default:
                Console.WriteLine("Error[1]: Fel tangent, testa igen");
                break;
        }

    }

}

    //_________________________Lista med färdigbestämda ord____________________________________________
    private static void initializeWordList()
    {
    words = new WordList();
    words.Add("projektarbete");         // innehåller ord: projektarbete
    words.Add("programmering");          // innehåller orden: projektarbete, programmering
    words.Add("csharp");
    words.Add("stenberg");
    words.Insert(1, "hårdvara"); // Innehåller orden: "projektarbete", "programmering", "csharp", 
    words.Sort();                // "stenberg" och "hårdvara"
}


    //___________________METOD-Välj antal gissningar_________________________________________________________

    private static void userpickGuesses(ref int userNumGuessesInt)
    {
    string numGuessesString = ""; //Intierar sträng med tomt innehåll
    Console.WriteLine("Välj antal gissningar: "); //Promptar spelare att ange antal gissningar
    numGuessesString = Console.ReadLine(); //Läser in antal gissningar av spelare
    try
    {
        userNumGuessesInt = Convert.ToInt32(numGuessesString); //Sträng görs om till heltal(int).
        if (!(userNumGuessesInt <= 20 & userNumGuessesInt >= 1))// Undantag om spelare skriver in för*
        {                                              //stort eller litet antal gissningar.
            throw new Exception();
        }
    }
    catch (Exception)
    {
        userNumGuessesInt = -1;
        Console.WriteLine("Error[2]: Fel antal gissningar");//Om undantaget är sant visas
    }                                                         //varnings meddelande
}

    //__________________METOD-Slumpat ord_________________________________________________

    private static string randomWord()
{
    return words[randomR.Next(0, words.Count() - 1)]; //*Notering, ta reda på mer om skillnad mellan .Count och .Count()
}


    //________________________METOD-Visa ord___________________________________________

    private static string showWord(List<char> guessedCharacters, string word)
    {
    string returnedWord = ""; //Initierar sträng med tomt innehåll
    if (guessedCharacters.Count == 0) 
    {
        foreach (char letter in word) //Visar karaktären "_" för varje bokstav
        {
            returnedWord += "_ ";
        }
        return returnedWord; //Returnerar värde
    }
    foreach (char letter in word)
    {
        bool letterMatch = false;//Skapar bool-variabel letterMatch som används för att kontrollera om 
        foreach (char character in guessedCharacters)//spelaren skrivit in en korrekt bokstav.
        {
            if (character == letter) //Om karaktären spelaren valt överrenstämmer med en bokstav
            {           //i det nuvarande ordet så visas endast den bokstaven istället för "_".
                returnedWord += character + " ";
                letterMatch = true;//Bool-variabeln sätts till "true" om spelar gör rätt val
                break;
            }
            else
            {
                letterMatch = false; //Om spelaren gör fel val så sätts/fortsätter 
                                     //bool-variabeln letterMatch att vara "falsk"

            }                        
        }
        if (letterMatch == false) //Om letterMatch är "false" så visas ej någon bokstav,
        {                         //utan endast karaktären "_"
            returnedWord += "_ ";
        }
    }
    return returnedWord;
}

    //_____________________________METOD-Gissa bokstav____________________________________________________________________________

    static void letterGuess(List<char> guessedCharacters, string word, string wordToDisplay, ref int numGuessesLeft)
    {
    string letters = "";
    foreach (char letter in guessedCharacters)
    {
        letters += " " + letter;
    }
    Console.WriteLine("Gissa på en bokstav mellan A-Ö");
    Console.WriteLine("Gissade bokstäver: " + letters);
    Console.WriteLine("Gissningar kvar: " + numGuessesLeft);
    Console.WriteLine(wordToDisplay);
    string guess = Console.ReadLine();
    char guessedLetter = 'a';
    try
    {
        guessedLetter = Convert.ToChar(guess);
        if (!char.IsLetter(guessedLetter))
        {
            throw new Exception();
        }
    }
    catch (Exception)
    {//Hanterar ett udantag om spelaren skriver in mer än 1 karaktär eller om karaktären ej är en bokstav
      Console.WriteLine("Error[3]: Endast en bokstav åt gången");

    }
    bool repeat = false;
    for (int i = 0; i < guessedCharacters.Count; i++)
    {
        if (guessedCharacters[i] == guessedLetter)
        {//Hanterar ett undantag om spelaren skriver in en bokstav som redan är vald
            Console.WriteLine("Error[4]: Du har redan valt den bokstaven, välj en annan");
            repeat = true;

        }
    }
    if (repeat == false)//Om spelare skriver in en bokstav korrekt, utan undantag, så läggs
    { //bokstaven till i gussedLetter för att sedan kunna visas som "gissade bokstäver"
        guessedCharacters.Add(guessedLetter);
        numGuessesLeft -= 1; //En gissning förloras
    }
}

    //_______________________METOD-Kolla om spelare vill spela igen______________________________________

    static void userReplay()
    {
    Console.WriteLine("Vill du spela igen? (j/n)");//Ger spelare ett val om omspel.
    string playAgain = Console.ReadLine();//Läser in spelares input.
    if (playAgain == "n")//Om spelare valt "n" avslutas programmet.
    {
        Environment.Exit(1);
    }
    Console.Clear();
}
使用系统;
使用System.Collections.Generic;
使用System.Linq//*请注意,ta reda påmer om linq
使用系统、媒体;
公共类词表:List//Skapar-klass词表
{
}
公共级刽子手
{
/* 
*待办事项:
*一辆四轮四轮四轮四轮马车
*jämföras med de ord som finns i programmets lista.Se 10.7 i boken。
*/
私有静态词表词;
private static Random randomR=new Random();
公共静态void Main(字符串[]args)
{/*Konsol utseende*/
Console.ForegroundColor=ConsoleColor.DarkGreen;//
Console.Title=“C#Hangman”//Ger konsolspelet en titel
Console.WriteLine(“Välkommen直到C#Hangman spelet!”)//Hälsningsfras när speletöppnas
初始化wordlist();
//_______________________启动-菜单_______________________________________________
int MenuChoice=0;//Skapar heltals可变开关
while(MenuChoice!=4)//Loop som visar menyn tills spelaren gör ett val
{
Console.Write(“\n\t1)Lägg直到ord”);
控制台。写入(“\n\t2)Visa ordlista”);
Console.Write(“\n\t3)Spela”);
Console.Write(“\n\t4)Avsluta\n\n”);
Console.Write(“\n\tVälj 1-4:”);//Välj menyval
MenuChoice=Convert.ToInt32(Console.ReadLine());//Spelarens val registereras i
//蒂迪加雷·斯卡帕德·瓦里亚贝尔
开关(MenuChoice)//开关sats startar。
{/*备选方案1-Lägg至ord*/
案例1:
Console.Clear();//Rensar konsolfönster
Console.Write(“\n\tLägg\n\n”);
var insert=Console.ReadLine();//Läser av inskrivet ord
words.Add(insert);//Lägger直到ord i lista
Console.Write(“\n\tOrdlista\n\n”);
words.Sort();
foreach(单词中的字符串w)
Console.WriteLine(w);//Skriv ut för att verifiera att ordet滞后到
打破
/*备选方案2-Visa ordlista*/
案例2:
Console.Clear();
Console.Write(“\n\tOrdlista\n\n”);
foreach(单词中的字符串w)//Skriver ut ordlista
控制台写入线(w);
打破
/*备选方案3-斯佩拉*/
案例3:
/*Spelar bakgrundsmusik i loop medans Alternativ 3är valt*/
(新的SoundPlayer(@“c:\Program\Media\background.wav”)).PlayLooping();
Console.Clear();
int numguesesint=-1;///Skapar variabel som används för att bestämma
而(numguesesint==-1)//antal gissningar。
{
/*安塔利特·吉斯尼加尔·斯佩拉伦·哈尔的最佳搭档*/
用户选择猜测(参考numguessin);
}
/*沃尔杰·乌特·阿塔特奥德酒店*/
字符串字=随机字();
/*斯卡帕·利斯塔酒店*/
List guessedLetters=新列表();
布尔解算=假;
while(已解决==false)
{
/*在斯佩拉尔·基斯拉特·吉斯尼加尔之前,观看av sträng。
*Om spelaren ej lyckats gissa nå获得rätt签证*/
string wordToDisplay=showWord(猜字母、单词);
/*我在南卡罗来纳州的卡拉克特伦市找到了一名返回者
*在吉萨特岛上的一家银行,我们可以从斯佩拉雷那里得到一笔交易
*förlorar kollas det om variabel numGuessesLeftär mindreän 1*/
如果(!wordToDisplay.Contains(“”))
{
已解决=正确;
Console.WriteLine(“Grattis,du vann!Ordet du gissa var:”+单词);
/*科拉·奥姆·斯佩莱尔·斯佩拉·伊根,奥姆·多姆·维勒·德特·斯佩莱尔
*sätts variabel直到真解,detta avslutar loopen。
*Om spelare ej vill spela igen kommer metoden用户重播stänga ner计划*/
userReplay();
}
否则,如果(numGuessesInt
读取用户输入后,检查其大小:

 if(guess.Length == 1)
 {
    //execute your current logic
 } else if(guess.Length >= 1){
     if(guess == word){
         // right guess
     }else{
      //wrong guess
     }
 }

计算
guess
中有多少个字符,并检查它是否与
word
相同

您可能还希望更改错误消息以显示只允许使用字母,因为我们已经处理了“字符太多”问题


您好@Strixx,让我们更容易帮助您。我们大多数人不会说瑞典语,因此我们无法使用您的注释更快地切入要点,并且您的代码对于有人当场回答您来说太长了。您可能知道逻辑属于哪种方法,或者至少提示我们您将把它放在哪里。也许可以在不同的代码blo中提取此方法ck?我们越容易帮助你,你就越快得到答案!我担心这会发生
 if(guess.Length == 1)
 {
    //execute your current logic
 } else if(guess.Length >= 1){
     if(guess == word){
         // right guess
     }else{
      //wrong guess
     }
 }
if(guess.Length > 1)
{
    Console.WriteLine(guess == word ? string.Format("Congrats! The correct word was {0}", word) : string.Format("Oh darn! The correct word was '{0}'", word));
    userReplay();

}
else
{
    //Execute your current try block here
}