【问题标题】:Word game mechanics in XNAXNA 中的文字游戏机制
【发布时间】:2012-06-27 17:31:39
【问题描述】:

我正计划使用 XNA 为 WP7 制作一款休闲文字游戏。游戏机制对我来说已经足够好了,但只是检查他们所写的词是否真的是一个词。

我想在开始时有一个文本文件并将其加载到内存中,但是这肯定不可能保存在手机的内存中吗?此外,从中读取以查看它是否是一个单词会有多慢。它们将如何存储在内存中?最好使用字典/哈希图,每个key 是一个词,我只是检查该键是否存在?还是将它们放在一个数组中?

坚持使用实现此功能的最佳方式,因此欢迎您提供任何意见。谢谢

【问题讨论】:

    标签: c# windows-phone-7 xna


    【解决方案1】:

    根据您的手机硬件,您可能只需将文本文件加载到内存中。英语可能只有几十万字。假设您的平均单词约为 5 个字符左右,那大约是一兆数据。您将在内存中管理该文件的开销,但这就是硬件细节的重要性。顺便说一句,当前这一代手机拥有大量 RAM 的情况并不少见。

    请参阅以下相关的 SO 问题,这些问题需要文本文件作为字典。

    Dictionary text file

    【讨论】:

    • Windows Phone 标准规格的内存为 512mb,低端“Tango”规格为 256。反正应该没问题。
    • 更重要的是,对于 256Mb Windows Phone,内存限制为 90Mb。
    • 谢谢。我只能将一个回复标记为答案,但我也给了你一票。
    【解决方案2】:

    seth flowers 所说,将文本文件放入内存,甚至是整个字典,都应该不会太糟糕。选择合适的数据结构来保存单词很重要。

    我不推荐使用单词作为键的字典......老实说,这有点愚蠢。如果只有键没有值,字典有什么用?但是,您可能对 Dictionary 的想法很满意。我会尝试的第一件事是Dictionary<char, string[]>,其中键是第一个字母,值是所有以该字母开头的单词的列表。当然,该数组会很长,并且在数组上的搜索时间很慢(尽管对键的查找应该是 zippy,因为 char 哈希是唯一的)。好处是,如果您使用正确的 .txt 字典文件并按顺序加载每个单词,您就会知道该列表是按字母顺序排列的。因此,您可以使用高效的搜索技术,如二分搜索,或为预排序列表制定的任意数量的搜索。最终可能不会那么慢。

    不过,如果您想走得更远,您可以使用预测文本的基础结构。它被称为 Patricia Trie 或 Radix Trie (Wikipedia)。从第一个字母开始,您将遍历所有可能的分支,直到您:

    1. 组合用户输入的单词,所以它是一个有效的单词
    2. 到达分支的末端;这个词不存在。

    “尝试”是为了解决这类问题。我从来没有在代码中代表过一个,所以恐怕我不能给你任何指示(ba dum tsh!),但互联网上可能有大量关于如何做到这一点的信息。使用 Trie 可能是最有效的解决方案,但如果您发现我上面提到的字母字典使用二分搜索足够快,您可能只想在开发实际游戏玩法时暂时坚持使用它。刚开始游戏时就陷入寻找最佳解决方案的困境,这往往会让你失去完成它的热情。如果你遇到性能问题,那么你就会做出改进——至少这是我在设计游戏时的理念。

    好消息是,由于 Windows Phone 基本上只支持 2 种不同的规格,一旦您测试应用程序并看到它在它们上运行顺畅,您真的不必担心针对任何更糟糕的条件进行优化。所以使用有效的方法!

    P.S.:在 Windows Phone 上,加载文本文件很棘手。 Here 是关于这个问题的帖子,应该对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多