Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中具有常规和特定属性的项列表的适当数据结构_C_Data Structures_Dataset - Fatal编程技术网

C语言中具有常规和特定属性的项列表的适当数据结构

C语言中具有常规和特定属性的项列表的适当数据结构,c,data-structures,dataset,C,Data Structures,Dataset,我正在制作一个多人文本游戏,游戏中的每个玩家都被分配了一个目录。库存是一个简单的线性链表,其中包含项目ID和项目在游戏中的状态。例如,player1可能有一辆50%燃油的红色汽车,它将在列表中表示为(5,50),其中5是游戏中红色汽车的ID,50是该特定汽车的燃油量 但这意味着游戏中每个项目的信息都应该保存在某种数据结构中 我想用像这样的东西 enum itemtype {car, gun, bullet, etc}; struct itemlist { itemtype type;

我正在制作一个多人文本游戏,游戏中的每个玩家都被分配了一个目录。库存是一个简单的线性链表,其中包含项目ID和项目在游戏中的状态。例如,player1可能有一辆50%燃油的红色汽车,它将在列表中表示为(5,50),其中5是游戏中红色汽车的ID,50是该特定汽车的燃油量

但这意味着游戏中每个项目的信息都应该保存在某种数据结构中

我想用像这样的东西

enum itemtype {car, gun, bullet, etc};
struct itemlist {
    itemtype type;
    char* name;
    int volume, weight;
} itemlist[];
红色汽车的所有信息
(汽车,“红色汽车”,15m^3200kg)
将存储在
项目列表[5]
,因为红色汽车的ID是5

但是这个游戏中有不同类型的物品,所以每个物品都有自己的属性。汽车会有
(最大速度、加速度)
,子弹会有
(质量、速度、动能)
。代码的某些部分需要访问这些特定属性,以便在游戏中进行操作

这意味着

  • 从清单中获取ID
  • 检查数组中此类项的特定属性
  • 对检索到的属性执行一些操作
但我不知道如何做到这一点,因为有不同类别的项目具有不同的具体属性

向结构中添加数组不会有帮助,因为属性可以是任何内容,如字符串或数字。添加嵌套结构可能没问题,但可能有东西试图使用
项[5].properties.max\u speed
,我不确定这是否安全,因为有人可能试图从没有属性的项中获取属性
max\u speed


那么,存储此类项目列表的常规和特定属性的最佳方法是什么呢?

呃,也许我在这里遗漏了一些东西,但这不正是构建
联合的目的吗

使列表中的每个项目都成为union数据类型,如下所示:

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

在这种情况下,您将使用
type
来识别元素类型,这样您就可以访问正确的联合说明符,有点像穷人的多态性:-)

让我们重新发明多态列表吧!:)哈哈,哇,我不知道。如果所有的物品都有一些属性(颜色、重量、体积),你可以把它们从联盟中拉到外部结构中。然后你就可以在不知道你在处理哪种特定类型的对象的情况下访问它们。那么你说我应该为游戏中的每个类别创建一个结构,并向包含所有这些特定结构的结构添加一个并集?嗯,这听起来很合理。