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