一原理:

基本原理同其他游戏的看牌实现原理 。但由于没有控制端与控制类的支持 ,结构略有不同。

通过客户端实现“看牌请求 ”消息触发,将“看牌请求”消息发送给服务端。

服务端响应后,判断权限 ,如果权限为超级玩家,则将“底牌与3家手牌”,发送回请求的客户端端 。

                                               

      客户端     ---------  (发送与接收看牌数据) ------------    服务端

 

二实现:

 

1.利用预编译指令区别超级玩家与普通玩家。

在分项目的头文件stdafx.h 中增加

#define ADMIN   //超级玩家标志

在具体实现文件中通过判断是否有该标志 ,在编译时过滤代码 ,

时超级玩家客户端编译时其特定代码编译进文件;普通玩家不带该标志,从而在编译时仍然是原理的代码。从而达到使一套生产两套客户端的目的 。便于管理与维护,也便于增加页面等通用功能时该两套代码 。

 

2.客户端发送看牌请求:

6603斗地主看牌制作原理 控制 斗地主 地主 棋牌技术  第1张

 

客户端按具体使用分两种情况 ,

1)超级玩家参加游戏方式看本卓其他玩家牌。

2)超级玩家旁观游戏方式看本桌所有玩家牌。

两种情况都在

CGameClientEngine.h 文件中声明了如下变量与函数,并在CGameClientEngine.cpp具体声明与具体实现 。功能请看项目代码吧。

#ifdef ADMIN

//扑克变量

BYTE m_cbAdminHandCardData[GAME_PLAYER][MAX_COUNT]; //手上扑克

bool OnAdminSendLookon();//看牌请求函数

bool OnSubLookon(const void  pBuffer, WORD wDataSize);//游戏显牌

#endif

 

第一种情况,超级玩家参加游戏方式。

 

在发牌完成消息函数中 ,(牌发完了,就该看牌啦,要不游戏开始你还不知道牌呢)

OnMessageDispatchFinish(WPARAM wParam, LPARAM lParam)//发牌完成

增加了“看牌请求 ”函数

OnAdminSendLookon();  //发送看牌请求

该函数 ,将看牌消息传给服务端 。

SendSocketData(SUB_C_LOOKON_RQ); //发送看牌请求

 

第二种情况,超级玩家旁观游戏方式。

 

主要功能与超级玩家参加游戏方式一致,但多一种如何看正在游戏中的玩家牌的状况。就是点击正在游戏中的桌子 ,进入的一刹那就看到他们的牌,得到他们的牌值数据 。

这个功能是通过定时器事件触发完成。

在函数

bool CGameClientEngine::OnInitGameEngine() //创建引擎

中设置一个定时器,时间100毫秒 ,

SetTimer(IDI_CHECK_GAME_START,TIME_CHECK,NULL); //加载定时器

该函数作用是初始游戏 ,游戏初始后设置定时触发。

 

函数

CGameClientEngine::OnTimer(UINT nIDEvent)//时间消息处理函数

处理IDI_CHECK_GAME_START定时器,调用函数

OnAdminSendLookon();  //发送看牌请求

 

该函数,将看牌消息传给服务端 。

SendSocketData(SUB_C_LOOKON_RQ); //发送看牌请求

 

3.服务端:

函数

CTableFrameSink::OnGameMessage() //游戏消息处理函数

接收到SUB_C_LOOKON_RQ看牌请求消息 ,调用函数

OnSendLookOnData(pIServerUserItem); //发送看牌数据函数

将数据封装为

CMD_S_SendCardAdmin格式(内部含玩家底牌与3个玩家的手牌),以SUB_S_LOOKON看牌数据消息,发送给客户端。

 

4.客户端接收看牌数据:

函数

CGameClientEngine::OnEventGameMessage() //游戏消息处理函数

接收到SUB_S_LOOKON看牌数据消息 ,调用函数

6603斗地主看牌制作原理 控制 斗地主 地主 棋牌技术  第2张

OnSubLookon(pData,wDataSize); //游戏显牌

进行处理。

未经允许不得转载! 作者:棋牌源码网,转载或复制请以超链接形式并注明出处棋牌源码网

原文地址:《6603斗地主看牌制作原理》发布于:2021-08-06