首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中具有一般和特定属性的项列表的适当数据结构

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

Stack Overflow用户
提问于 2012-04-23 01:53:08
回答 1查看 185关注 0票数 1

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

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

我想用这样的方法

代码语言:javascript
运行
复制
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

  • checking获取ID的
  • 数组,用于此类项的特定属性的
  • 处理检索到的属性

但我不知道如何做到这一点,因为有不同类别的项目,有不同的具体属性,每一个。

向结构添加数组不会有帮助,因为属性可以是任何东西,比如字符串或数字。添加嵌套结构可能很好,但是可能会有一些尝试使用item[5].properties.max_speed的东西,我不确定这是否安全,因为有人可以尝试从没有它的项中获取属性max_speed

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-23 01:56:14

嗯,也许我在这里漏掉了什么东西,但这不正是union所要做的吗?

使列表中的每一项都按以下方式成为联合数据类型:

代码语言:javascript
运行
复制
struct itemelem {
    itemtype type;
    union {
        cartype c;
        bullettype b;
    };
};

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10273904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档