Anagrams - C# 中的文字游戏
经典的文字游戏,

请务必在此查看新的 WPF 版本: Anagrams2 - 一个简单的 WPF 游戏应用程序[^]
引言
几年前,我的妻子开始玩 Hoyle Word Games CD 上的 Anagrams 游戏。该游戏会给你一个打乱的 6 个字母的单词,并在短时间内提供一个找到 10-20 个单词的机会。同时,一对屏幕外的食人族会试图用俏皮话、关于你电脑系统的问题、单词建议(这些建议对你当前处理的打乱单词从不正确)以及有时甚至是赤裸裸的嘲讽来分散你的注意力。
虽然有些有趣(仅基于屏幕外食人族可能会说的话),但该游戏的范围严重受限,在我看来,这是武断的。首先,你的打乱单词从不超过六个字母,这导致词典非常有限。其次,单词的数量远少于实际存在于打乱单词中的单词。请注意,我不是在谈论晦涩难懂或很少使用的单词,而是普通的英语词汇,任何词汇量中等的人都能轻易看到。
注意:这不是一个复杂的游戏,代码当然也不会探索或运用 .NET Framework 中任何更晦涩的功能。我只是写了这个游戏来帮助我学习 .NET(我从 2007 年 8 月开始才用 C# 编程)。没有花哨的界面,没有惊人的 3D 效果,也没有试图让任何人眼花缭乱。它就是它本来的样子。
我做了什么
在对这款游戏感到厌烦之后,我决定复制这款游戏应该不会太难,但我希望包含一个更广泛的词典。因此,我在网上搜索了各种长度(从三个到十个字符)的单词列表。我还想确保包含尽可能多的有效单词。所以,我想我需要找到在 Scrabble 游戏中合法的单词列表。有什么比世界上最著名、最受欢迎的文字游戏更好的单词来源呢?很快,我就收集了超过 125,000 个单词。
单词词典
现在我有了足够的单词列表来迷惑用户,我需要一种方法将它们全部同时加载到内存中。我创建了一个“dictionary
”类,该类为每个单词集创建了一个单词列表对象,这些单词根据它们的字符数进行分组。
请记住,我们有从三个到十个字母的单词。我们大多数人都知道,C# 列表是零基的。为了更容易维护单词列表的访问,该词典创建了 11 个单词列表,其中索引 0 到 2 不用于存储字典单词。但是,至少有一个未使用的列表索引是有用的。
其他词典功能包括将单词标记为已使用(这样用户在看到该字母组中的所有其他单词之前不会看到相同的打乱单词)。当一组中的所有单词都已看到时,只有一部分单词会被标记为未被使用。这减少了最近使用的单词在上次使用后不久再次出现的可能性。
虽然词典对象可以在一个位置轻松管理所有单词列表,但词典的真正用途是允许程序发现并跟踪包含在打乱单词中的单词。
可能的单词
作为游戏玩法支持的一部分,程序必须能够快速识别确实包含在打乱单词中的单词。搜索所有 120,000 多个单词来查看其中一个是否有效是不切实际的。因此,程序会获取打乱的单词,并在打乱的单词可用时立即搜索所有单词列表。为了存储这些可能的单词,我们在单词列表对象的列表中使用第 0 个索引。
最后,我们使用众多的词典对象方法来查找和更新此可能的单词对象。这包括将可能的单词标记为已找到,从而使用户提交的单词验证更加简单。
游戏配置
我提供了一些关于打乱单词允许的字母数、一轮允许的时间、允许的奖励时间、是否播放游戏声音以及是否允许重复单词的配置功能。这些设置通过 *GameConfig.cs* 文件保存。这是对话框

游戏面板
这只是一个 Windows Forms 应用程序。我不得不耍些花招才能让面板按照我想要的方式响应。我需要一种方法让用户能够按下回车键来提交输入的单词。为了做到这一点,我创建并隐藏了一个“提交”按钮,并将其设为“默认”按钮。搞定了提交按钮后,我不得不找一种方法向用户说明当前回合剩余的时间。
我想在进度条中显示剩余时间,但我找不到使用标准进度条控件的方法(这可能意味着它在那里,只是我没找到)。因此,我找到了一个名为 SmoothProgressBar
的控件类(我不记得从哪里找到的,但我没写过它),它允许在进度条中显示文本。随着计时器倒计时,进度条和文本会更新以反映剩余时间。
单词列表
我想有一种方法可以向用户展示他们输入的内容,所以我决定使用列表框。当程序验证并接受提交的单词时,它们会被添加到列表框中(按字母顺序排序)。然后,当用户单击“解决”或回合自然到期时,我想显示所有可能的单词,并以一种突出显示用户已提交的单词的方式显示它们。
为了实现这一点,我将列表框的 DrawMode
属性设置为 OwnerDrawFixed
,然后覆盖了 DrawItem
行为。这允许我以不同的外观绘制某些项。我选择了未被玩家发现的单词显示为深灰色文本,而玩家找到的单词显示为粗体红色斜体文本。
统计
我半心半意地尝试在游戏中提供一套最小的统计数据。这些统计数据没有被编目,但扩展它们并从而提供图表结果和游戏历史记录并不难。我可能稍后也会这样做。
声音
是的,它们很糟糕。如果你想用别的东西替换它们,请便。事实上,如果你认识任何有清晰嗓音的人(最好是温柔而又迷人的女性),让她录制合适的语音提示,并告诉我你有一套新文件。
最后
我无法理解为什么 Hoyle 对他们版本的游戏施加了任意限制。也许他们想将游戏保持在有限的智力水平——我不知道。我觉得这款游戏相当令人上瘾,因为回合很短,而且你倾向于开始对自己说:“上班前再玩一轮……”
历史
- 2008 年 4 月 7 日:首次发布