【发布时间】:2011-04-04 19:16:42
【问题描述】:
我正在编写一个 3D 扫雷类型的游戏,所以给定一个 a[x][y][z],我需要计算周围值的总和,假设它们没有超出范围。
我的问题是如何在没有无数次检查的情况下做到这一点:
if ((x>0)&&(x<ARRAY_SIZE))
对于 x、y 和 z?
谢谢
【问题讨论】:
标签: java arrays math multidimensional-array performance
我正在编写一个 3D 扫雷类型的游戏,所以给定一个 a[x][y][z],我需要计算周围值的总和,假设它们没有超出范围。
我的问题是如何在没有无数次检查的情况下做到这一点:
if ((x>0)&&(x<ARRAY_SIZE))
对于 x、y 和 z?
谢谢
【问题讨论】:
标签: java arrays math multidimensional-array performance
非常简单:让你的 erray 2 元素在每个维度上都变大,然后围绕它制作一个 0-frame。您的循环都从 1 运行到 ARRAY_SIZE-1,如果您处于边界,访问 index-1 和 index+1 不会再有任何麻烦。
【讨论】:
如何为游戏板编写自己的自定义类,例如
class Minesweeper3DBoard {
public MinesweeperField getField(int x, int y, int z) {
if (x < 0 || x >= ARRAY_SIZE || y < 0 || y >= ARRAY_SIZE || z < 0 || z >= ARRAY_SIZE) {
return NullMineSweeperField.Instance();
}
else {
return Fields_[x][y][z];
}
}
};
使用 NullMineSweeperField 实现 Null Object 和 Singleton 模式,以及 Fields_ 包含“真实”字段?
这样,您将只有一个进行检查的地方。
【讨论】: