我正在编写一个类似的游戏Boggle http://en.wikipedia.org/wiki/Boggle玩家应该在由随机字母组成的大字符串中找到单词。
例如,有五个数组,里面有字符串,如下所示。五行,每行由六个字母组成:
AMSDNS
MASDOM
ASDAAS
DSMMMS
OAKSDO
因此,游戏用户应使用可用字母来造词,并牢记以下限制和规则:
- 不可能重复同一个字母来组成一个单词。我说的是“物理”字母,在游戏中就是骰子。不可能使用同一个骰子两次或更多次来组成单词。
- 不可能“跳跃”任何字母来组成单词。组成单词的字母必须是连续的。
- 用户可以沿着她想要的任何方向移动,而不受上述两个方向之外的任何限制。因此,可以先到达顶部,然后到达底部,然后到达右侧,然后再次到达顶部,依此类推。因此,寻找单词的动作可能会有些不稳定。
我想知道如何遍历所有字符串来组成单词。要知道单词,我将使用包含单词的 txt 文件。
我不知道如何设计一种能够执行搜索的算法,特别是考虑查找单词所需的不稳定运动并遵守限制。
我已经实现了用户体验、扔骰子和填充棋盘游戏的逻辑,以及六个字母骰子的所有逻辑。
但这部分并不容易,我想阅读您对这个有趣挑战的建议。
我在这个游戏中使用 Python,因为这是我用来编码的语言,也是我最喜欢的语言。但是算法本身的解释或建议也应该很好,与语言无关。
基本算法很简单。
- For each tile, do the following.
- 从空候选词开始,然后访问当前图块。
- Visit a tile by following these steps.
- 将图块位置的字母添加到候选单词中。
- 候选词是已知词吗?如果是这样,请将其添加到找到的单词列表中。
- Is the candidate word a prefix to any known word?
- 如果是,则对于尚未访问以形成候选词的每个相邻图块,访问它(即递归)。
- 如果不是,则回溯(停止考虑该候选词的新图块)。
为了让事情顺利进行,当询问“这个单词是我的字典中任何单词的前缀吗”时,请考虑将您的字典表示为trie http://en.wikipedia.org/wiki/Trie。尝试为单词和前缀提供快速查找时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)