⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playing_cards.h

📁 这是纸牌游戏斗地主,算法完整,可以单机,网络连线玩.
💻 H
字号:
// Playing_Cards.h: interface for the CPlaying_Cards class.
//
//////////////////////////////////////////////////////////////////////
//

//牌型数据结构;
class CCardsType
{
public:
	int m_nTypeNum;
	int m_nTypeValue;
public:
	CCardsType();
};

/*						牌型及牌值定义

		     牌型(Cards_Type)		  牌值(Cards_Value)           牌数:
单牌:		 1							CCard.Value(面值)           1
一对:		 2							CCard.Value(面值)			2
三张:		 3							CCard.Value(面值)			3

三带一:		 31							三张的Card.Value(面值)		4
四张:		 4							CCard.Value(面值)			4

单顺:		 5							最小牌的Card.Value(面值)    5
三带一对:	 32							三张的Card.Value(面值)		5		

单顺:		 6							最小牌的Card.Value(面值)    6
双顺:		 222						最小牌的Card.Value(面值)    6
三顺:	     33							最小牌的Card.Value(面值)    6
四带二单:	 411						四张的Card.Value(面值)		6	 

单顺:		 7							最小牌的Card.Value(面值)    7

单顺:		 8							最小牌的Card.Value(面值)    8
双顺		 2222						最小牌的Card.Value(面值)    8
三顺带二单:  3311						最小三张的Card.Value(面值)  8
四带二对:	 422						四张的Card.Value(面值)		8

单顺:		 9							最小牌的Card.Value(面值)    9
三顺:		 333						最小三张的Card.Value(面值)  9

单顺:		 10							最小牌的Card.Value(面值)    10
双顺:		 22222						最小牌的Card.Value(面值)    10
三顺带二对:  3322						最小三张的Card.Value(面值)  10

单顺:		 11							最小牌的Card.Value(面值)    11

单顺:		 12							最小牌的Card.Value(面值)    12
双顺:		 222222						最小对牌的Card.Value(面值)  12
三顺:		 3333						最小三张的Card.Value(面值)  12
三顺带三:	 333111						最小三张的Card.Value(面值)  12

双顺		 2222222					最小对牌的Card.Value(面值)  14

三顺带三对:  333222						最小三张的Card.Value(面值)  15
三顺:		 33333						最小三张的Card.Value(面值)  15

双顺		 22222222					最小对牌的Card.Value(面值)  16
三顺带四单:  33331111					最小三张的Card.Value(面值)  16

双顺		 222222222					最小对牌的Card.Value(面值)  18
三顺		 333333						最小三张的Card.Value(面值)  18

双顺		 2222222222					最小对牌的Card.Value(面值)  20
三顺带五单:	 3333311111					最小三张的Card.Value(面值)  20
三顺带四对:  33332222					最小三张的Card.Value(面值)  20

*/
class CCard
{
public:
	int m_nColor;  //花色;
	int m_nValue;  //面值;
public:
	CCard();
};

class CPlayingCards  
{
public:

	int m_nCardsTable[17];	//记录未出牌的表;

	int	m_nCardsCounter;		 //未出的牌的数量;
	CCard m_cCards[20];		 //未出的牌;

	int m_nDiscardedCounter;	 //已经出的牌数量;
	CCard m_cDiscarded[20];     //已经出的牌;

	CCardsType m_cDiscardingType;   //刚出牌的牌型和大小;
	int m_nDiscardingCardsTable[17];     //记录出牌类型的扫描表;Scan_Cards_Table[3]记录3的数量,以此类推;

	int m_nDiscardingCounter;  //刚出的牌的数量;
	CCard m_cDiscarding[20];    //刚出的牌;

	int m_nChoosingCardsCounter;   //选择要出的牌型;
	CCard m_cChoosingCards[20];	  //选择要出的牌数组;
	
	const CCard m_cBLANK_CARD;      //表示空白牌的常量;
private:

	int Is2();			  //判断是否是一对牌; 
	int Is3();			  //判断是否是三张;
	int IsBomb();		  //判断是否是四张(炸弹); 

	int IsSeries();		  //判断是否是单顺(拖拉机),此函数适合5-12张牌情况; 
	int IsDoubleSeries(); //判断是否是双顺;此函数适合6-20张牌情况;
	int IsThreeSeries();  //判断是否是三顺;此函数适合6-18张牌情况;

	int Is31();			  //判断是否是三带一单;
	int Is32();		      //判断是否是三带一对;
	int Is411();		  //判断是否是四带两单;
	int Is3311();		  //判断是否是三顺带两单;
	int Is422();		  //判断是否是四带两对;
	int Is3322();		  //判断是否是三顺带两对;
	int Is333111();		  //判断是否是三顺带三单;
	int Is333222();		  //判断是否是三顺带三对;
	int Is33331111();	  //判断是否是三顺带四单;

	int Search1(CCardsType& cCardsType);   //寻找单牌出;
	int Search2(CCardsType& cCardsType);   //寻找对牌出;
	int Search3(CCardsType& cCardsType);   //寻找三张出;

	int SearchBomb(CCardsType& cCardsType);   //寻找炸弹出;
	int Search31(CCardsType& cCardsType);     //寻找三带1出;
	int Search32(CCardsType& cCardsType);     //寻找三带2出;
	int Search411(CCardsType& cCardsType);    //寻找四带2单;
	int Search422(CCardsType& cCardsType);	//寻找四带两对;
	int Search3311(CCardsType& cCardsType);	//寻找三顺带两单;
	int Search3322(CCardsType& cCardsType);	//寻找三顺带两对;

	int Search222(CCardsType& cCardsType);	//寻找双顺;
	int Search2222(CCardsType& cCardsType);	//寻找双顺;
//拖拉机(单顺)
	int Search5(CCardsType& cCardsType);    //寻找5单顺出;
	int Search6(CCardsType& cCardsType);    //寻找6单顺出;
	int Search7(CCardsType& cCardsType);    //寻找7单顺出;
	int Search8(CCardsType& cCardsType);    //寻找8单顺出;
	int Search9(CCardsType& cCardsType);    //寻找9单顺出;
	 //寻找大于等于10单顺出;
	int SearchBeyond10(CCardsType& cCardsType,int nLong);

	BOOL AI_Patch1();                       //工人智能补丁1;
public:
	CPlayingCards();
	virtual ~CPlayingCards();

	void New();	
	void ScanToTable();

	int AccountCardsValue();  //计算牌值; 

	int CleanUp();    //整理牌数据结构;

	int CheckChoosing();	//检查出牌的逻辑合法性;

	int DirectChoose();		//直接选择出牌;
	int CompareChoose(CCardsType&);		//比较大小后决定不要或者出牌; 
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -