【问题标题】:Elegant way to store numerical data such as game moves存储数字数据(例如游戏动作)的优雅方式
【发布时间】:2012-03-07 19:06:07
【问题描述】:

我目前正在将游戏数据(例如移动序列)存储在多维数组中,定义为:

private final int[][] gameMoves = {{1},{2},{0},{3},{1,4},{1,4,5},{2,4}} 

数组当然要大得多。

我觉得应该有一种更优雅的方式来做到这一点,可能使用 XML 文件或 SQLite 数据库将数据与代码分开存储,然后在 while 循环中检索它。

如果使用 XML 文件,格式和检索方法是什么?

如果使用 SQLite 数据库,在执行源代码之前如何获取数据库中的数据?

任何例子都将不胜感激。

【问题讨论】:

  • 是否只为该游戏会话存储移动?还是要将它们写入磁盘以便下次打开游戏时读取?
  • @Danny 看起来这是用于只读游戏数据 - 永远不需要在运行时存储,只需要检索。
  • 是的@tcovo。这是在游戏期间不会更改的固定数据。只需使用 while 循环将其检索到列表或数组中一次。这在游戏之间保持不变,不是用户生成的。
  • 您可能会在this question 的答案中找到有用的信息。

标签: android list multidimensional-array


【解决方案1】:

如果这是永远不会更改的数据,则没有任何理由持久保存它,尤其是在频繁读取它的情况下,因为您在读取它时会受到性能影响。如果有的话,也许一个包含游戏数据对象的单独包,每个都提供“gameMoves”,可能是赢家。

或者,如果您从概念和/或需求的角度来看分离,那么 JSON 可能是一个不错的方法,因为它比 XML 文件更直接地与多维数组相关联,而且肯定更容易与数据库一起工作。

例如,您的 JSON 文件可能是:

[1, 2, 3, [45, 6, 7], 8, [9, 10]]

然后您可以使用 JSON 库轻松解析它:

JSONArray data = new JSONArray(textFromFile);

for(i = 0; i < data.length; ++i) {
    //Read data
}

http://developer.android.com/reference/org/json/JSONArray.html

【讨论】:

  • 这实际上不是游戏动作列表。这将是一个将显示在屏幕上的元素列表。该数组保存元素出现在屏幕上的顺序。每个元素都将保存元素的类型(怪物、尖刺、浮动平台等)及其在屏幕上的位置。这是一款动作横向卷轴游戏。我想到的是一个二维对象数组,我会在游戏开始时(仅一次)通过遍历 XML 文件中的值来创建/填充这个数组或对象列表。我不知道要使用什么 xml 文件或如何格式化和访问它。
  • @newyorkgena 是的。因此 JSON 的想法,因为如果你决定以后有一个对象数组而不是 int,它会更容易改变。更新上面的答案来描述。
【解决方案2】:

如果这些数字代表移动,您应该使用常量。

const int MOVE_WAIT= 0;
const int MOVE_LEFT= 1;
const int MOVE_RIGHT = 2;
const int MOVE_UP = 3;
const int MOVE_DOWN = 4;
const int[] SHOOORYUKEN = {MOVE_RIGHT, MOVE_DOWN, MOVE_RIGHT};

int[][] gameMoves = {{MOVE_LEFT},{MOVE_RIGHT},{MOVE_WAIT},{MOVE_UP},SHOOORYUKEN} 

等等……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2012-08-03
    相关资源
    最近更新 更多