这个项目基本以看源码为主,主要是给自己的c语言结个尾,之后有两个github的项目重点去练习,因为不是自己没写,就不放源码了,需要的可以私信或者评论,我私发.
项目来源:老九君
项目名称:精忠报国之笑傲江湖
视频课地址:网易云课堂
基本功能/架构:
第一天
看了一下这个游戏的主要结构和函数定义
目录:
1.union关键字
1.union关键字
代码如下
/* 游戏道具 */
typedef struct _prop{
int id;
char name[50];
int level;
PropType type;
int stock; //当前道具的数量
union{
int attack; //如果是武器,就对应攻击力
int defense; //如果是防具,就对应防御力
int power; //如果是血瓶等消耗品,对应增加的能量值
};
double price;
char desc[200]; //游戏道具描述
- 简单来说,union是一种特殊的数据类型,主要作用是在相同的内存位置存放"多个"数据"成员中的"一个".
- 但任何时候只能有一个成员带值(因为使用的是相同的内存位置),否则会进行覆盖(下面讲访问时会有实例),覆盖时从union首地址开始
- 定义方式与struct类似,标签和变量均为可选
union tag
{
member definition;
member definition;
...
member definition;
} variables;
- union占用的内存大小由最大的成员大小决定,如下union将占用20个字节的内存空间
union Data
{
int i;
float f;
char str[20];
} data;
- 使用成员访问运算符(.)来访问union成员,data是上面定义,输出结果中由于int和float都被str覆盖了,所以只有str正常输出
data.i = 10;
data.f = 220.5;
strcpy( data.str, "C Programming");
printf( "data.i : %d\n", data.i);
printf( "data.f : %f\n", data.f);
printf( "data.str : %s\n", data.str);
//输出结果
data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming