C#开发hangman控制台游戏如何实现记录已猜测字母的功能
Hangman猜词游戏已猜字母记录实现方案
实现记录用户已猜测字母的核心是新增去重集合存储猜过的字符,同时新增数组保留历史猜词进度,避免每次刷新丢失之前猜对的内容。同时你现有代码存在变量拼写错误,InputWord被误写为InputWoord,需要先修正避免编译报错。
完整可运行代码
using System; using System.Collections.Generic; using System.Linq; namespace hangman { class Program { static void Main(string[] args) { string InputWord; char Letter; // 存储所有已猜测的字母,自动去重 HashSet<char> guessedLetters = new HashSet<char>(); Console.Write("give your word here: "); // 修正变量拼写错误 InputWord = Console.ReadLine(); // 存储当前猜词进度,初始全为下划线 char[] currentGuessState = new char[InputWord.Length]; for (int i = 0; i < InputWord.Length; i++) { currentGuessState[i] = '_'; } Console.Clear(); // 初始打印空白进度 foreach (char c in currentGuessState) { Console.Write(c + " "); } Console.WriteLine(); for (int J = 0; J < 11; J++) { Console.WriteLine("it is turn: " + J); Console.Write("guess the letter: "); Letter = Convert.ToChar(Console.ReadLine()); // 先判断字母是否已经猜过 if (guessedLetters.Contains(Letter)) { Console.WriteLine($"你已经猜过字母{Letter}了,请换一个!"); // 不消耗猜测次数,回退循环计数 J--; continue; } // 没猜过就加入已猜集合 guessedLetters.Add(Letter); // 更新猜词进度 for (int i = 0; i < InputWord.Length; i++) { if (InputWord[i] == Letter) { currentGuessState[i] = Letter; } } // 打印最新进度 foreach (char c in currentGuessState) { Console.Write(c + " "); } Console.WriteLine(); // 可选:判断是否全部猜对,提前结束游戏 if (!currentGuessState.Contains('_')) { Console.WriteLine("恭喜你猜对了所有字母!游戏胜利!"); break; } } } } }
核心功能说明
HashSet<char>类型的guessedLetters是实现已猜字母记录的核心,它自带去重能力,调用Contains方法可以在极短时间内判断字母是否已经被猜过- 每次重复猜测不会消耗次数,输入合法的新字母才会被计入已猜集合
- 新增的
currentGuessState数组用来持久化保存猜词进度,不会因为新的输入覆盖之前猜对的结果
内容的提问来源于stack exchange,提问作者ThatOneGameGuy TOGG
相关产品推荐
相关产品推荐

