初步的类设计

 

uml 类图(有些数组类型,但由于在uml里暂时添加不了数组类型,故而没数组类型)

2011060611434971.jpg 

类的详细介绍(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

};

转载于:https://www.cnblogs.com/pokeGame/archive/2011/06/06/2073571.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值