C语言结构体实例-创建兔子

时间:2022-07-24
本文章向大家介绍C语言结构体实例-创建兔子,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

参考裸编程思想。

#include <stdio.h>
//#include "ycjobject.h"

// 颜色定义
#define CL_BLACK				0
#define CL_WHITE				1
#define CL_GRAY					2

// 物种身份ID定义
#define ID_GRASS				0x0001
#define ID_CARROT				0x0002
#define ID_GREENVEGETABLE		0x0004
#define ID_RABBIT				0x0010
#define ID_FISH					0x0020
#define ID_WOLF					0x0100

// 空指针定义
#define NIL				0

// 函数指针类型定义
typedef char (*teat)(unsigned food);
typedef void (*trun)(void);
typedef unsigned (*species)(void);

// 兔子类
struct TRabbit
{
		species id;				// 类的类型标识
		species food;			// 食物常量
		species enemy;			// 敌人常量
		
		unsigned char color;	// 颜色变量
		float weight;			// 重量变量,以千克为单位
		unsigned char age;		// 年龄变量,以月为单位
		
		teat Eat;				// 吃行为
		trun Run;				// 跑行为
};

// ===== implement =====
// 功能:返回兔子的类型
// 参数:无
// 返回:兔子的类型
// 备注:
unsigned rabbitId(void)
{
	return ID_RABBIT;
}

// 功能:返回兔子的食物
// 参数:无
// 返回:兔子的食物
// 备注:多种食物一次返回
unsigned rabbitFood(void)
{
	return ID_GRASS|ID_CARROT|ID_GREENVEGETABLE;
}

// 功能:返回兔子的敌人
// 参数:无
// 返回:兔子的敌人
// 备注:多种敌人一次返回
unsigned rabbitEnemy(void)
{
	return ID_WOLF;
}

// 功能:兔子吃
// 参数:food,unsigned类型,喂给兔子的食物
// 返回:0:没吃成
//       1:吃成了
// 备注:
char rabbitEat(unsigned food)
{
	// 都说兔子不吃窝边草
	// 那么不是窝边的草就可以吃
	// 它兔窝边的草不是我窝边的草,所以也可以吃
	// 还有,萝卜和青菜,也可以吃
	// 兔子不能吃兔子,不能吃鱼,更不能吃狼
	return (food & 0x0007);
}

// 功能:兔子跑
// 参数:无
// 返回:无
// 备注:
void rabbitRun(void)
{
	// 可以蹦
	// 可以跳
	// 可以跑
}

// 功能:兔子类创建
// 参数:aRabbit,TRabbit类型,一只兔子
// 返回:无
// 备注:
void rabbitCreate(struct TRabbit *obj)
{
	// 常量初始化
	obj->id = rabbitId;
	obj->food = rabbitFood;
	obj->enemy = rabbitEnemy;

	// 变量初始化
	// 因为变量初始化没有意义,所以不做

	// 行为(方法)初始化
	obj->Eat = rabbitEat;
	obj->Run = rabbitRun;
}

int main(void)
{
	// 申请对象空间-兔子1
	struct TRabbit Rabbit1;
	// 申请对象空间-兔子2
	struct TRabbit Rabbit2;

	// 创建兔子1对象
	rabbitCreate(&Rabbit1);
	Rabbit1.color = CL_WHITE;
	Rabbit1.weight = 1.03;
	Rabbit1.age = 3;
	// 创建兔子2对象
	rabbitCreate(&Rabbit2);
	Rabbit2.color = CL_GRAY;
	Rabbit2.weight = 1.28;
	Rabbit2.age = 4;

	// 兔子1吃萝卜
	Rabbit1.Eat(ID_CARROT);
	// 兔子2跑
	Rabbit2.Run();

    return 0;
}