我自己在C#做一个刽子手,到目前为止我做得很好。游戏有效,但字母根据用户输入进行组织,我想在每次找到单词时从字符中删除“_”并在文本上。
这就是它在游戏中的表现:
正如你所看到的,“_”只是第一个字母的消失,但不是其他人的消失,如果用户正确地回答正确的答案,但是在很多情况下,某些词语会粘在一起并且不会留在他们的位置。这是我的游戏代码:
string word;
char letter_inserted;
int correctanswer, incorrectanswer;
int counter = 0;
correctanswer = 5;
Console.WriteLine("welcome to the game of hangman");
Console.Write("First player please introduce the secret word: ");
word = Console.ReadLine();
Char[] sentenceChar = word.ToCharArray();
Console.WriteLine("Second player you can already play.");
foreach( char letter in senteceChar)
{
Console.Write(" _ ");
}
Console.WriteLine("\n");
Console.WriteLine("{0} correcct answers are allowed. \n",correctanswers); //lives
Char[] correctletter = new Char[5];
for (int i = 1; i > 0; i++)
{
Console.Write("\n\nWhat letter you want to play : ");
letter_inserted = Convert.ToChar(Console.ReadLine());
for (int j = 0; j < sentenceChar.Length; j++)
{
if (sentenceChar[j] != letter_inserted)
{
incorrectanswer = correctanswer - 1; //lives
Console.Write(correctletter[j] + " _ ");
}
if (sentenceChar[j] == letter_inserted)
{
correctletter[j] += sentnceChar[j]; //inserting the correct word
Console.Write(correctletter[j]);
}
}
}
Console.ReadKey();
}
答案 0 :(得分:2)
我会使用不同的方法。创建两个数组,一个用于解决方案:
var solution = new char[] {'H', 'A', 'N', 'G', 'M', 'A', 'N'};
一个用于当前提示。首先,您将其初始化为:
var hint = new char[] {'_', '_', '_', '_', '_', '_', '_'};
当猜到一封信时,您可以循环浏览solution
,每次solution[i]
等于猜到的字母,替换 hint
中的相应索引:
for(int i = 0; i < solution.Length; i++)
{
if(solution[i] == guess)
hint[i] = guess;
}
在此循环结束时,只需将hint
重新写入屏幕,该屏幕将始终包含当前提示。
您想要做的一些事情:
在循环中设置一个布尔值,以跟踪solution
是否包含该字母的任何实例。如果没有,在循环结束时你会减去一个生命。您也可以使用solution.Contains(guess)
轻松完成 very 。
也许创建一个List<char>
来跟踪已经尝试过的猜测。如果此列表已包含输入的字母,您可以显示“您已经猜到了!”,否则将猜测添加到列表中。
这个答案意味着让你朝着正确的方向前进,而不是一个完整的解决方案。但是,请随时询问是否有任何部分不清楚。
答案 1 :(得分:0)
我将从你的第一句话开始 - I am making a hangman in C# by my own and so far i am doing good.
事实上,你可以在评论中看到,在解决这个问题之前你会想要考虑很多事情但是因为你问如何处理额外的_
我会跳到那个。
一种方法:
public static void printWord(char[] correctletters)
{
for (int j = 0; j < correctletters.Length; j++)
{
Console.Write(correctletters[j]);
}
}
然后像这样重写你的代码:
namespace Hangman
{
class Program
{
static void Main(string[] args)
{
string word;
char letter_inserterd;
int correctanswer = 5;
int counter = 0;
Console.WriteLine("welcome to the game of hangman");
Console.Write("First player enter the secret word: ");
word = Console.ReadLine();
Char[] sentenceChar = word.ToCharArray();
Console.WriteLine("Second player you can already play.");
foreach( char letter in sentenceChar)
{
Console.Write(" _ ");
}
Console.WriteLine("\n");
Console.WriteLine("{0} correct answers are allowed. \n",correctanswer); //lives
Char[] correctletter = new Char[sentenceChar.Length];
for (int i = 0; i <sentenceChar.Length; i++)
{
correctletter[i] = '_';
}
while (correctanswer > 0)
{
Console.Write("\n\nWhat letter you want to play : ");
letter_inserted = Convert.ToChar(Console.ReadLine());
bool ContainsWord = false;
for (int j = 0; j < sentenceChar.Length; j++)
{
if (sentnceChar[j] == letter_inserted)
{
correctletter[j] = letter_inserted; //inserting the correct word
ContainsWord = true;
}
}
if (!ContainsWord)
{
correctanswer -= 1;
}
printWord(correctletter);
}
Console.ReadKey();
}
public static void printWord(char[] correctletter)
{
for (int j = 0; j < correctletter.Length; j++)
{
Console.Write(correctletter[j]);
}
}
}
}
P.S如果你想在printWord
方法中更清楚地改变Console.Write
这样的行:Console.Write(letracorrecta[j] + " ");