我正在制作一个多人文本游戏,游戏中的每个玩家都被分配了一个清单。库存是一个简单的线性链表,它包含项目的ID和游戏中项目的状态。例如,player1可以有一辆拥有50%燃料的红色汽车,它将在列表中表示为(5,50),其中5是游戏中一辆红色汽车的ID,50是该特定汽车的燃料量。
但这意味着游戏中每个项目的信息都应该保存在一定的数据结构中。
我想用这样的方法
enum itemtype {car, gun, bullet, etc};
struct itemlist {
itemtype type;
char* name;
int volume, weight;
} itemlist[];
而红色汽车(car, "Red car", 15m^3, 2000kg)
的所有信息都存储在itemlist[5]
中,因为红色汽车的ID是5。
但是这个游戏中有不同类型的物品,所以每个项目都有自己的属性。汽车会有(max_speed, acceleration)
,子弹会有(mass, velocity, kinetic_energy)
。代码的某些部分需要访问这些特定的属性,以便在游戏中进行操作。
所以这意味着
从inventory
但我不知道如何做到这一点,因为有不同类别的项目,有不同的具体属性,每一个。
向结构添加数组不会有帮助,因为属性可以是任何东西,比如字符串或数字。添加嵌套结构可能很好,但是可能会有一些尝试使用item[5].properties.max_speed
的东西,我不确定这是否安全,因为有人可以尝试从没有它的项中获取属性max_speed
。
那么,为这样的项目列表存储通用和特定属性的最佳方法是什么?
发布于 2012-04-23 01:56:14
嗯,也许我在这里漏掉了什么东西,但这不正是union
所要做的吗?
使列表中的每一项都按以下方式成为联合数据类型:
struct itemelem {
itemtype type;
union {
cartype c;
bullettype b;
};
};
在这种情况下,您可以使用type
来识别元素类型,这样您就可以访问正确的联合说明符,这有点像穷人的多态:-)
https://stackoverflow.com/questions/10273904
复制相似问题