说我正在写一个冒险游戏。地图由不同类型的瓷砖构成。我有形成路径的瓷砖,以及形成门的瓷砖,等等。
我将使用结构来描述图块的类型和内容,以及它连接的其他图块。
然后我将制作一个四联链表,将它们连接在一起。
但是描述房间的结构将具有比描述门的元素多得多的元素,因此门结构中的许多元素将是多余的。我可以制作一个较小的门结构,但结构只能指向相同类型的结构*,所以我无法将房间结构连接到门结构。冗余可以忽略不计,但我想知道是否还有另一种方式。
另一种选择是使用结构数组,但是我会有很多'填充'结构浪费更多的空间。但是,数组可以更轻松地从文件中读取和重建地图。
结构只能指向同一类型的结构有限制吗?或者我还没有提到另一个解决这个问题的常见方法吗?
我的一个想法是每个瓷砖都可以有每个其他类型瓷砖的指针。有些可能是多余的,但上述选项的冗余度较小。
*我的意思是,通常在链表中,结构包含指向它们所在的结构的指针。
答案 0 :(得分:1)
不是将元素存储在图块中,而是仅存储指向链接元素列表的指针。
答案 1 :(得分:1)
你真的没有一个描述一切的统一结构。相反,您可以执行以下操作(这有点像在C中编写您自己的C ++虚拟表,并且使用得非常广泛。)
您的基本图块结构可能如下所示:
struct tile
{
// common tile stuff
...
enum tile_type type;
void *type_info;
};
因此,在这个结构中,您可以存储每种tile类型共有的东西。然后为其他类型创建其他结构:一个用于房间,一个用于路径等。在tile
的对象中,使enum
描述实际类型,并存储指向void *
中的具体类型。
有很多链接描述了这种技术的变化。 Here是一个。