适用于C中具有一般和特定属性的项列表的数据结构

我正在制作多人文字游戏,并为游戏中的每个玩家分配了一个库存。 库存是一个简单的线性链接列表,其中包含项目的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) 。 并且代码的某些部分需要访问这些特定属性才能在游戏中执行操作。

所以这意味着

  • 从库存中获取ID
  • 检查数组以查找此类项目的特定属性
  • 用检索到的属性做事

但我不知道该怎么做,因为每个项目都有不同类别的特定属性。

向结构添加数组无济于事,因为属性可以是任何东西,如字符串或数字。 添加嵌套结构可能没问题,但可能有些东西试图使用item[5].properties.max_speed ,我不确定这是否安全,因为有人可能会试图从一个没有’的项目中获取属性max_speed有它。

那么,为这样的项目列表存储一般和特定属性的最佳方法是什么?

呃,也许我在这里错过了一些东西,但这不就是union建立的目的吗​​?

使列表中的每个项目成为联合数据类型:

 struct itemelem { itemtype type; union { cartype c; bullettype b; }; }; 

在这种情况下,您将使用type来标识元素类型是什么 ,因此您可以访问正确的联合说明符,类似于穷人的多态性:-)