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

📄 servermanage.h

📁 这是用Windows编写的
💻 H
字号:

#pragma once

#include "StdAfx.h"
 

//操作掩码
#define	UG_HUA_MASK					0xF0			//1111 0000
#define	UG_VALUE_MASK				0x0F			//0000 1111

//扑克花色
#define UG_FANG_KUAI				0x00			//方块	0000 0000
#define UG_MEI_HUA					0x10			//梅花	0001 0000
#define UG_HONG_TAO					0x20			//红桃	0010 0000
#define UG_HEI_TAO					0x30			//黑桃	0011 0000
#define UG_NT_CARD					0x40			//主牌	0100 0000
#define UG_ERROR_HUA				0xF0			//错误  1111 0000

//扑克出牌类型
#define UG_ERROR_KIND				0				//错误
#define UG_ONLY_ONE					1				//单牌
#define UG_DOUBLE					2				//对牌
#define UG_THREE					3				//三条
#define UG_DOUBLE_TRACKOR			4				//两条拖拉机
#define UG_THREE_TARCKOR			5				//三条拖拉机
#define	UG_SHOW_CARD				6				//甩牌

//扑克数目定义
#define PLAY_TWO_CARD				1				//两副扑克
#define PLAY_THREE_CARD				2				//三副扑克

//游戏结束标志定义
#define GF_NORMAL					10				//游戏正常结束
#define GF_SALE						11				//游戏安全结束

/******************************************************************************************************/

//升级逻辑类 (支持 2 副和 3 副扑克)
class CUpGradeGameLogic
{
	//变量定义
private:
	//BYTE					m_iNTNum;							//主牌数字
	//BYTE					m_iNTHuaKind;						//主牌花色
	////int						m_iStation[5];						//相对位置(方块,梅花,红桃,黑桃,主牌)

	//函数定义
public:
	//构造函数
	CUpGradeGameLogic(void);

	//功能函数(公共函数)
public:
	//设置主牌花色
	//void SetNTHuaKind(BYTE iNTHuaKind);
	//获取主牌花色
	//inline BYTE GetNTHuaKind() { return m_iNTHuaKind; }
	//设置主牌数字
	//inline void SetNTCardNum(BYTE iNTNum) { m_iNTNum=iNTNum; }
	//获取主牌数字
	//inline BYTE /*GetNTCardNum*/() { return m_iNTNum; }
	//获取扑克数字
	inline int GetCardNum(BYTE iCard) { return (iCard&UG_VALUE_MASK)+1; }
	//获取扑克花色
	BYTE GetCardHuaKind(BYTE iCard, BOOL bTrueHua);
	//排列扑克
	BOOL SortCard(BYTE iCardList[], BOOL bUp[], int iCardCount);
	//删除扑克
	int RemoveCard(BYTE iRemoveCard[], int iRemoveCount, BYTE iCardList[], int iCardCount);

	//辅助函数
public:
	//是否单牌
	inline BOOL IsOnlyOne(BYTE iCardList[], int iCardCount) { return iCardCount==1; };
	//是否对牌
	BOOL IsDouble(BYTE iCardList[], int iCardCount);
	//是否三条
	BOOL IsThree(BYTE iCardList[], int iCardCount);
	//是否拖拉机逻辑
	//BOOL IsTrackorRule(BYTE iFirstCard, BYTE iNextCard);
	//是否拖拉机(两条)
	//BOOL IsDoubleTrackor(BYTE iCardList[], int iCardCount);
	//是否拖拉机(三条)
	//BOOL IsThreeTrackor(BYTE iCardList[], int iCardCount);
	//是否甩牌
	//BOOL IsShowCard(BYTE iCardList[], int iCardCount);
	//得到牌列花色
	BYTE GetCardListHua(BYTE iCardList[], int iCardCount);
    //获取牌型
	//BYTE GetCardShape(BYTE iCardList[], int iCardCount);
	//获取扑克相对大小
	int GetCardBulk(BYTE iCard, BOOL bExtVol);
	//对比单牌
	//BOOL CompareOnlyOne(BYTE iFirstCard, BYTE iNextCard);

	//其他函数
public:
	//获取扑克
	BYTE GetCardFromHua(int iHuaKind, int iNum);
	//查找分数
	int FindPoint(BYTE iCardList[], int iCardCount);


	//服务器专用函数
public:
	//混乱扑克
	BYTE RandCard(BYTE iCard[], int iCardCount);	
//	//客户端函数
//public:

	//内部函数
private:
	//清除 0 位扑克
	int RemoveNummCard(BYTE iCardList[], int iCardCount);

};
 

//游戏桌类
class CServerGameDesk : public CGameDesk
{
protected:
	//游戏基础数据
	BYTE					m_CardCount;						//扑克数目(位变量)

	//玩家设置数据
	BYTE					m_iLessCount;						//最少游戏局数
	BYTE					m_iPlayCardCount;					//游戏扑克数目
	BYTE					m_iEnableWatch;						//是否允许旁观

	//运行状态变量
	BYTE					m_iBeenPlayCount;					//已经游戏的局数


	//状态信息
	BYTE					m_iUserCardCount[4];				//用户手上扑克数目
	BYTE					m_iUserCard[4][27];					//用户手上的扑克

	//运行信息
	int						m_iGamePoint;						//用户游戏分数
	int						m_iOutCardPeople;					//现在出牌用户
	int						m_iFirstOutPeople;					//先出牌的用户
	BYTE					m_iBaseOutCount;					//出牌的数目
	BYTE					m_iDeskCardCount[4];				//桌面扑克的数目
	BYTE					m_iDeskCard[4][13];					//桌面的扑克

	//发牌数据
	BYTE					m_iSendCardPos;						//发牌位置

	CUpGradeGameLogic		m_Logic;							//游戏逻辑
	 

	int						m_iLastOutPeople;
	bool					IsNewTurn;
	
	int						m_iFirstJuJiaoFen;//第一局叫分的
	int						m_iWinStation;//赢家
	int						m_iTurePoint[4];//游戏得分
	
	int						m_iMiCiArr[4];
	int						m_iCurScoresArr[4];
	int						m_iCurScores;
	int						m_iCurMiCi;

	BYTE					 m_iPlayRemainCardCnt[4];
 

	
	//函数定义
public:
	//构造函数
	CServerGameDesk(); 
	//析构函数
	virtual ~CServerGameDesk();

	//重载函数
public:
	//游戏开始
	virtual bool GameBegin(BYTE bBeginFlag);
	//游戏结束
	virtual bool GameFinish(BYTE bDeskStation, BYTE bCloseFlag);
 
	//游戏数据包处理函数
	virtual bool HandleNotifyMessage(BYTE , NetMessageHead * pNetHead, void * pData, UINT uSize, UINT uSocketID, bool bWatchUser);
	//用户离开游戏桌
	virtual BYTE UserLeftDesk(BYTE , CGameUserInfo * pUserInfo);

	//重载纯虚函数
public:
	//获取游戏状态信息
	virtual bool OnGetGameStation(BYTE , UINT uSocketID, bool bWatchUser);
	//重置游戏状态
	virtual bool ReSetGameState(BYTE bLastStation);
	//定时器消息
	//virtual bool OnTimer(UINT uTimerID);
	//处理函数
public:
	//用户设置游戏
	BOOL UserSetGame(UserArgeeGame * pGameSet);
	//发送扑克给用户
	BOOL SendCard();
	//用户反牌
	//bool UserNtCard(BYTE bDeskStation, int iHuaKind, int iCardCount);
	//游戏开始
	BOOL BeginPlayUpGrade();
	//发送底牌
	//BOOL SendBackCard();
	//用户上交底牌
	//bool UserGiveBackCard(BYTE bDeskStation, BYTE iBackCard[], int iCardCount);
	//用户出牌
	bool UserOutCard(BYTE bDeskStation, BYTE iOutCard[], int iCardCount);
	//新一轮开始
	BOOL NewPlayTurn(BYTE bDeskStation);
	////用户请求离开
	//bool UserHaveThing(BYTE bDeskStation, char * szMessage);
	////同意用户离开
	//bool ArgeeUserLeft(BYTE bDeskStation, BOOL bArgee);
	//计算升级
	int	GetUpGrade(int iGamePoint, int iPlayCardCount);
	//更新用户分数牌数信息
	//void ModifyPlayInfo(BYTE bDeskStation,int iCardCount);

};

/******************************************************************************************************/

⌨️ 快捷键说明

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