c# - 如果用户在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++;
}
}
}
感谢您的建议!
解决方案
您可以通过引入带有已找到符号的附加数组来解决它,如下面的代码所示。解决方案非常简单明了,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++;
}
示例输出
推荐阅读
- python - 将 getfem++ 导入 conda 环境?- 树莓派 4 - Ubuntu 21.04
- c++ - 我在模板类中有多个 * 运算符的重载。当我将声明以不同的顺序放置时,为什么会得到不同的结果?
- powershell - 如何获得即将到期的 Trusted toot 证书(60 天)
- node.js - 由于缺少节点模块,Docker 容器仅在绑定卷时崩溃
- elasticsearch - 如何在 ES 存储桶中填充缺失的数据以与之前的聚合?
- character-encoding - 控制移动 Safari 上获取请求正文的字符编码
- angular - Angular mat-select 和 webpack 模块联合事件问题
- numpy - 基于一列对数组进行排序,然后基于第二列
- copy - 包含特定单词的 Robocopy/Xcopy 文件夹
- c# - 如果我在 .ForEach() 中添加事件处理程序,我会得到内存泄漏吗?我不明白我的教授在哪里看到泄漏