command三国杀开发日记20200914

目前状态

一时脑热开始写的东西,计划完全使用C语言实现,尽量使用通用接口,能够在windows上直接运行

几乎是一穷二白,初步搭建了牌堆、玩家信息接口体,编写了简单的UI函数,能够将玩家信息显示在屏幕上

牌堆

cards.h中定义了卡牌的信息结构体

enum Card_Color   {heart = 3, spade = 5, diamond = 4, club = 5} ;
enum Card_Package {debug} ;
enum Card_Type    {normal} ;

/* 卡牌类 */
typedef struct{
	char              name[24]; // 卡牌名称
	enum Card_Color   color;	// 花色
	int               point;	// 点数
	enum Card_Type    type;		// 卡牌类型
	enum Card_Package package;	// 所属卡包
} Card;

这里设定一张卡牌的基本信息由名称、花色、点数、类型和所属卡包组成,定义了三个枚举变量

Card_Color是卡牌的花色,有红桃、黑桃、方块、草花组成
Card_Package是卡牌包,比如标准、ex、军争、风火林山等,可能是为了后续可以自由设定所使用的卡包(还早),目前只开启了DEBUG卡包
Card_Type是卡包类型,计划支持普通牌、锦囊牌、装备牌等等,目前未实现

卡牌以如下的形式组成,精确到每一张牌,先用宏隔离不同的卡包

/* 卡包集合 */
Card cards[] = {
	#ifdef CARD_PACKAGE_DEBUG 
	{.name = "杀", 		.color   = heart, 	.point   = 1, 	.package = debug, },
	{.name = "杀", 		.color   = heart, 	.point   = 2, 	.package = debug, },
	{.name = "杀", 		.color   = heart, 	.point   = 3, 	.package = debug, },
	{.name = "杀", 		.color   = heart, 	.point   = 4, 	.package = debug, },
	{.name = "杀", 		.color   = heart, 	.point   = 5, 	.package = debug, },
	#endif /* CARD_PACKAGE_DEBUG */
};

玩家信息

因为要支持的东西太多了性别、特殊标记等等,先都不考虑
目前支持名字、血量、最大血量、攻击距离。判定区、装备区使用卡牌指针指向一张牌,没有则为NULL
手牌使用链表的形式进行组织(考虑到频繁的插入、删除操作)

typedef struct {
	char name[16];
	int hp;
	int maxhp;
	int att_distance;
	Card *weapon;
	Card *armour;
	Card *att_horse;
	Card *def_horse;
	struct Card_List *hand_card;
} Player;

UI

原文地址:https://www.cnblogs.com/velscode/p/13670264.html