我正在构建一个猜字游戏,它将程序选择的随机单词分解为单个字母。玩家通过字母而不是整个单词来猜测。现在我需要找到一种方法把这些字母组合在一起这样它们就构成了一个完整的单词这样程序就可以检查它并终止循环
string[] secretWord = new string[5];
secretWord[0] = "Pong";
secretWord[1] = "Crash";
secretWord[2] = "Joust";
secretWord[3] = "1942";
secretWord[4] = "Tron";
int guessedRight = 0;
string name = "";
string guess = "";
char letter = 'A';
Random random = new Random();
int answer = random.Next(secretWord.Length);
char[] brokenword = secretWord[answer].ToCharArray();
//Game Starts
Console.WriteLine("Enter your name");
name = Console.ReadLine();
//Game Loop
while (guess != secretWord[answer])
{
Console.WriteLine("Enter Your Letter, {0}", name);
foreach (char c in brokenword)
{
if (c == letter)
{
Console.Write(letter);
}
Console.Write("- ");
}
letter = Convert.ToChar(Console.Read());
}
Console.WriteLine("You Win!");
Console.ReadKey();
我认为你的代码中缺少一些逻辑,你从来没有更新过guess
。你可以这样做:
string[] secretWord = new string[5];
secretWord[0] = "Pong";
secretWord[1] = "Crash";
secretWord[2] = "Joust";
secretWord[3] = "1942";
secretWord[4] = "Tron";
int guessedRight = 0;
string name = "";
string guessString = string.Empty;
char[] guessArray = null;
char letter = 'A';
Random random = new Random();
int answer = random.Next(secretWord.Length);
char[] brokenword = secretWord[answer].ToCharArray();
guessString = new string('_', brokenword.Length);
guessArray = guessString.ToCharArray();
//Game Starts
Console.WriteLine("Enter your name");
name = Console.ReadLine();
//Game Loop
while (guessString != secretWord[answer])
{
Console.WriteLine("Enter Your Letter, {0}", name);
letter = Convert.ToChar(Console.ReadKey().KeyChar);
Console.WriteLine();
for (int i = 0; i < brokenword.Length; i++)
{
char c = brokenword[i]
if (c == letter)
{
Console.Write(letter);
guessArray[i] = c;
guessString = new string(guessArray)
}
}
Console.WriteLine(guessString);
}
Console.WriteLine("You Win!");
Console.ReadKey();
这是我对你所做的事情的看法:
Random random = new Random();
string[] secretWords = new string[] { "Pong", "Crash", "Joust", "1942", "Tron" };
string secretWord = secretWords[random.Next(secretWords.Length)];
Console.WriteLine("Enter your name");
string name = Console.ReadLine() ?? "Player";
Console.Clear();
Console.SetCursorPosition(0, 0);
string guessedWord = "";
List<char> guessedLetters = new List<char>();
while (true)
{
Console.WriteLine($"Enter Your Letter, {name}");
guessedLetters.Add(char.ToLowerInvariant(Console.ReadKey().KeyChar));
Console.Clear();
Console.SetCursorPosition(0, 0);
guessedWord = String.Concat(secretWord.Select(c => guessedLetters.Contains(char.ToLowerInvariant(c)) ? c : '_'));
if (guessedWord != secretWord)
{
Console.WriteLine($"Your current guess {guessedWord} from {String.Join(", ", guessedLetters)}");
}
else
{
Console.WriteLine($"You Win! The word was {guessedWord}");
break;
}
}
Console.ReadKey();
这里的关键是如何用这一行创建guessedWord
:
guessedWord = String.Concat(secretWord.Select(c => guessedLetters.Contains(char.ToLowerInvariant(c)) ? c : '_'));
本行检查secretWord
中的每个字母,并当且仅当该字母在guessedLetters
列表中时将其包含在guessedWord
中。它使用char.ToLowerInvariant
来允许小写或大写字母匹配。
创建一个列表:
var wordBuilt = new List<string>()
在if语句中,您可以简单地将字母添加到您创建的列表中。最后,您只需要从列表中调用. join()方法并在控制台中写入结果。