我有一个基于图块的 RPG 系统,其中特定的图块类型由字符串表示(即 Grass = "g",Dirt = "d")。问题是我不知道如何以一种可以有效地通过 x/y 坐标访问每个图块的方式来表示地图(按特定顺序收集的一组图块)。地图是否应该以数组格式表示:
map[0].coords[x][y] = "g";
或者也许以其他方式?
我有一个基于图块的 RPG 系统,其中特定的图块类型由字符串表示(即 Grass = "g",Dirt = "d")。问题是我不知道如何以一种可以有效地通过 x/y 坐标访问每个图块的方式来表示地图(按特定顺序收集的一组图块)。地图是否应该以数组格式表示:
map[0].coords[x][y] = "g";
或者也许以其他方式?
这取决于您使用的语言,但二维数组通常是执行此操作的有效方法。
访问数组中的元素通常很快,因为可以根据提供的数组索引计算给定元素在内存中的位置,而无需遍历其他元素。对于这种类型的检索,其他数据结构(例如链表)要慢得多。
一些事情,取决于语言:
1:如果可能,为地形类型设置常量整数。常量使用更少的内存并且可以更快地引用/检索,与字符串上的整数相同
2:二维可能是最有效的方法。
一个例子
CONST(INT) GRASS = 1;
CONST(INT) DIRT = 2;
CONST(INT) SNOW = 3;
// assuming map is an array containing objects, and coords is a 2d
// array of said object:
map[0].coords[x,y] = GRASS;
二维数组很好。
您也可以使用一维数组。这是我周围的一段 Java 代码:
char [] cells = new char[WORLD_WIDTH * WORLD_HEIGHT];
public char get(int x, int y) {
return cells[x + y * WORLD_WIDTH];
}
public void set(int x, int y, char c) {
cells[x + y * WORLD_WIDTH] = c;
}
假设您的世界是 10 x 10 块,那么第一行在cells[0]
tocells[9]
中,最后一行在cells[90]
tocells[99]
中,依此类推。
当然,您可能需要添加额外的检查以确保x
和y
参数有效。