uml 类图(有些数组类型,但由于在uml里暂时添加不了数组类型,故而没数组类型)
类的详细介绍(C++描述)
//类里省略了对私有数据成员的set和get函数。一下类均以h为前缀,表示hoe。
enum hGameState{
END = 0, //结束状态
SUSPEND, //暂停状态
WAIT, //等待玩家出牌
NOTSTART //可以开始的玩家不够4个人
};
enum hPlayerState{
NOTSTART = 0, //还不能开始游戏
CANSTART, //可以开始游戏了
PLAYERING //正在玩游戏了
};
enum hCardType{
CAPTURE = 0, //俘虏,三张点数相同的牌带一对
COUPLE, //一对,两张点数相同的牌
FLUSH, //同花五,五张花色相同的牌
KINGKONG, //金刚,四张点数相同的牌带单张
MIXSEQ, //杂顺,五张连续的花色不尽相同的牌
SINGLE, //单张牌
STRAIGHTFLUSH, //同花顺,五张连续的且花色相同的牌
THREE, //三张,三张点数相同的牌
INVALID //无效牌型
};
enum hSuit{ //hSuit的四个取值不能改变方向,初始值也必须为0
DIAMONDS = 0, //方块
CLUB, //梅花
HEARTS, //红桃
SPADE //黑桃
};
class hCard{ //描述一张牌
private:
short dotNum; //牌的点数
hSuit suit; //牌的花色
public:
bool less(hCard card); //判断这张牌是否比牌card小
};
class hPack{ //一副牌
public:
static const short DotNum = 13; //不同的点数的数目
static const short FlushNum = 4; //不同的花色的数目
int in[DotNum+1][ FlushNum]; //标记一张牌是否在这副牌里
list<hCard> cards; //牌列表
short dotNum[DotNum+1]; //每种点数的牌的数目
short flushNum[FlushNum]; //每种花色的牌的数目
short restNum; //剩下的牌的数目
hHandCard nextHandCard(hHandCard last); //在这副牌里找一手牌,这手
//牌的张数和last相同,并且要比last大,如果找不// 到组成牌型就返回//hCardType为INVALID的牌
void delHandCard(hHandCard handCard); //在这副牌里删除handCard这手牌
hHandCard getHandCard(list<int> cardPos); //cardPos为牌在cards的位
//置的列表,得出这些牌组成的牌型,如果不能组成牌型就返回
//hCardType为INVALID的牌
void clear(); //清空这副牌
void addCard(hCard card); //添加一张牌
};
class hHandCard{ //可以一次出手的若干张牌
private:
hCardType cardType; //牌型
hCard maxCard; //这手牌中最大的牌
public:
list<hCard> cards; //这首拍的牌列表
short less(hHandCard handCard); //比较这手牌和handCard的大小,如果这手//牌比handCard小,返回-1,如果不能比较,
//返回0,如果这手牌比handCard大,返回1
};
class hTurn{
private:
short cardNum; //这一轮牌的数目,因为每一轮的牌的数目必须是相等的
//(cardNum为负数,表示第pos玩家是这一轮的首发玩家)。
short pos; //等待第pos位玩家出牌
short lastUser; //上一位玩家,如果pos和lastUser相等,说明将开始新的
//一轮
hHandCard lastHandCard; //这一轮牌的上一手牌
short restTime; //这一轮中等待第pos位玩家出牌的剩余时间
short maxRestTime; //一轮中等待玩家出牌的最大剩余时间
};
class hGame{ //游戏类,负责整个游戏的信息维护
private:
hGameState gameState; //表示游戏状态
int inning; //记录游戏的局数
static const short PlyaerNum = 4; //游戏的玩家数目
short plyaerNum; //目前进入该游戏的玩家的数目
hPlayer player[PlayerNum]; //4个玩家对象
hTurn turn; //游戏中的某一轮
bool hasPlayer[4]; //标记某个位置是否已经有player了,为true表示有
public:
};
class hPlayer{
private:
bool isUser; //为true表示是用户玩家,否则为电脑玩家
int score; //玩家积分
hPlayerType playerType; //玩家类型
short trickNum; //道具使用的次数
short maxTrickNum = 1; // 道具使用的最大次数
hPack pack; //玩家拥有的一副牌
hPlayerState playerState; //玩家的状态
public:
bool useTrick(); //使用道具,使用成功就返回true
};