0

我有一个基于图块的 RPG 系统,其中特定的图块类型由字符串表示(即 Grass = "g",Dirt = "d")。问题是我不知道如何以一种可以有效地通过 x/y 坐标访问每个图块的方式来表示地图(按特定顺序收集的一组图块)。地图是否应该以数组格式表示:

map[0].coords[x][y] = "g";

或者也许以其他方式?

4

3 回答 3

3

这取决于您使用的语言,但二维数组通常是执行此操作的有效方法。

访问数组中的元素通常很快,因为可以根据提供的数组索引计算给定元素在内存中的位置,而无需遍历其他元素。对于这种类型的检索,其他数据结构(例如链表)要慢得多。

于 2012-08-02T06:58:42.797 回答
2

一些事情,取决于语言:

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;
于 2012-08-02T07:08:38.427 回答
0

二维数组很好。

您也可以使用一维数组。这是我周围的一段 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]中,依此类推。

当然,您可能需要添加额外的检查以确保xy参数有效。

于 2012-08-02T07:12:33.937 回答