我打算使用XNA为WP7制作一款休闲文字游戏。游戏机制对我来说足够好,但只是检查他们所说的单词是否实际上是一个单词。
我想过有一个文本文件,并在开始时将其加载到内存中,但是肯定这不可能留在手机内存中吗?从这里读取它是多么慢,看它是否是一个单词。它们将如何存储在内存中?是否最好使用字典/散列图,每个key
都是一个单词,我只是检查一下这个密钥是否存在?或者它会把它们放在一个数组中?
坚持实现这一点的最佳方式,所以任何输入都值得赞赏。感谢
答案 0 :(得分:3)
根据您的手机硬件,您可能只是将文本文件加载到内存中。英语可能只有几十万字。假设您的平均单词大约是5个字符左右,那大约是一个数百万的数据。您将在内存中管理该文件的开销,但那就是硬件细节的重要性。顺便说一句,目前这一代手机拥有大量内存并不罕见。
请参阅以下相关的SO问题,这些问题需要一个文字字典的文本文件。
答案 1 :(得分:1)
将文本文件放入内存,甚至是整个字典,都不应该像seth flowers
所说的那样糟糕。选择合适的数据结构来保存单词非常重要。
我不会推荐使用单词作为键的字典......这是一种愚蠢的老实说。如果你只有键而没有值,字典有什么用?但是,您可能会对词典理念有所了解。我要尝试的第一件事是Dictionary<char, string[]>
,其中键是第一个字母,值是以该字母开头的所有单词的列表。当然,该数组将非常长,并且数组上的搜索时间会变慢(尽管键上的查找应该是zippy,因为char哈希是唯一的)。优点是,如果您使用正确的.txt字典文件并按顺序加载每个单词,您将知道该列表按字母顺序排序。因此,您可以使用高效搜索技术,如二进制搜索,或为预排序列表制定的任意数量的搜索。最终可能不会那么慢。
但是,如果您想要更进一步,可以使用预测文本的基础结构。它被称为Patricia Trie或Radix Trie(Wikipedia)。从第一个字母开始,您将在所有可能的分支中工作,直到您:
'尝试'是为了解决这类问题。我从来没有在代码中代表过一个,所以我担心我不能给你任何指示(ba dum tsh!),但是有很多关于如何在互联网上提供它的信息。使用Trie可能是最有效的解决方案,但如果你发现像我上面提到的字母词典使用二进制搜索足够快,你可能只想在开发实际游戏时坚持使用它。在刚刚开始游戏时找到最佳解决方案陷入困境往往会让你失去完成它的热情。如果遇到性能问题,那么你会做出改进 - 至少这是我设计游戏时的理念。
好消息是,由于Windows Phone仅支持2种不同的规格,一旦您测试应用程序并看到它在它们上顺利运行,您实际上不必担心在任何恶劣条件下进行优化。所以使用有效的方法!
P.S。:在Windows Phone上,加载文本文件很棘手。 Here是关于该问题的帖子,可以帮助您。