#include "Stdafx.h" #include "GameClient.h" #include "GameOption.h" #include "GameClientEngine.h" ////////////////////////////////////////////////////////////////////////// //游戏定时器 #define IDI_START_GAME 200 //开始定时器 #define IDI_OPERATE_CARD 201 //操作定时器 //游戏定时器 #define TIME_START_GAME 30 //开始定时器 #define TIME_OPERATE_CARD 15 //操作定时器 #define MAX_TIME_OUT 3 //最大超时次数 ////////////////////////////////////////////////////////////////////////// BEGIN_MESSAGE_MAP(CGameClientEngine, CGameFrameEngine) ON_MESSAGE(IDM_START,OnStart) ON_MESSAGE(IDM_OUT_CARD,OnOutCard) ON_MESSAGE(IDM_CARD_OPERATE,OnCardOperate) ON_MESSAGE(IDM_TRUSTEE_CONTROL,OnStusteeControl) ON_MESSAGE(IDM_SICE_TWO,OnSiceTwo) ON_MESSAGE(IDM_SICE_FINISH,OnSiceFinish) END_MESSAGE_MAP() ////////////////////////////////////////////////////////////////////////// //构造函数 CGameClientEngine::CGameClientEngine() { //游戏变量 m_wBankerUser=INVALID_CHAIR; m_wCurrentUser=INVALID_CHAIR; m_cbUserAction = 0; m_lSiceCount = 0; //堆立变量 m_wHeapHand=0; m_wHeapTail=0; ZeroMemory(m_cbHeapCardInfo,sizeof(m_cbHeapCardInfo)); //托管变量 m_bStustee=false; m_wTimeOutCount =0; //出牌信息 m_cbOutCardData=0; m_wOutCardUser=INVALID_CHAIR; ZeroMemory(m_cbDiscardCard,sizeof(m_cbDiscardCard)); ZeroMemory(m_cbDiscardCount,sizeof(m_cbDiscardCount)); //组合扑克 ZeroMemory(m_cbWeaveCount,sizeof(m_cbWeaveCount)); ZeroMemory(m_WeaveItemArray,sizeof(m_WeaveItemArray)); //扑克变量 m_cbLeftCardCount=0; ZeroMemory(m_cbCardIndex,sizeof(m_cbCardIndex)); return; } //析构函数 CGameClientEngine::~CGameClientEngine() { } //初始函数 bool CGameClientEngine::OnInitGameEngine() { //设置图标 HICON hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); m_pIClientKernel->SetGameAttribute(KIND_ID,GAME_PLAYER,VERSION_CLIENT,hIcon,GAME_NAME); SetIcon(hIcon,TRUE); SetIcon(hIcon,FALSE); //加载资源 g_CardResource.LoadResource(); //加载声音 m_DirectSound.Create( TEXT("OUT_CARD") ); return true; } //重置框架 bool CGameClientEngine::OnResetGameEngine() { //游戏变量 m_wBankerUser=INVALID_CHAIR; m_wCurrentUser=INVALID_CHAIR; m_cbUserAction = 0; m_lSiceCount = 0; //托管变量 m_bStustee=false; m_wTimeOutCount =0; //堆立变量 m_wHeapHand=0; m_wHeapTail=0; ZeroMemory(m_cbHeapCardInfo,sizeof(m_cbHeapCardInfo)); //出牌信息 m_cbOutCardData=0; m_wOutCardUser=INVALID_CHAIR; ZeroMemory(m_cbDiscardCard,sizeof(m_cbDiscardCard)); ZeroMemory(m_cbDiscardCount,sizeof(m_cbDiscardCount)); //组合扑克 ZeroMemory(m_cbWeaveCount,sizeof(m_cbWeaveCount)); ZeroMemory(m_WeaveItemArray,sizeof(m_WeaveItemArray)); //扑克变量 m_cbLeftCardCount=0; ZeroMemory(m_cbCardIndex,sizeof(m_cbCardIndex)); return true; } //时钟删除 bool CGameClientEngine::OnEventGameClockKill(WORD wChairID) { return true; } //时间消息 bool CGameClientEngine::OnEventGameClockInfo(WORD wChairID, UINT nElapse, WORD wClockID) { switch (wClockID) { case IDI_START_GAME: //开始游戏 { if( m_bStustee && nElapse < TIME_START_GAME ) { OnStart(0,0); return true; } if (nElapse==0) { AfxGetMainWnd()->PostMessage(WM_CLOSE); return true; } if (nElapse<=5) { PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); } return true; } case IDI_OPERATE_CARD: //操作定时器 { //自动出牌 bool bAutoOutCard=false; if ((bAutoOutCard==true)&&(m_GameClientView.m_ControlWnd.IsWindowVisible())) bAutoOutCard=false; if((bAutoOutCard==false)&&(m_bStustee==true)) { bAutoOutCard=true; } //超时判断 if ((IsLookonMode()==false)&& ( nElapse==0 || bAutoOutCard || nElapse < TIME_OPERATE_CARD-1&&(m_cbUserAction&WIK_CHI_HU)&&m_cbLeftCardCount<4 ) ) { //获取位置 WORD wMeChairID=GetMeChairID(); //动作处理 if (wChairID==wMeChairID) { if(m_bStustee==false && ++m_wTimeOutCount>=MAX_TIME_OUT ) { m_wTimeOutCount = 0; OnStusteeControl(TRUE,0); if ( m_pIStringMessage ) m_pIStringMessage->InsertSystemString(TEXT("由于您多次超时,切换为“系统托管”模式.")); } if (m_wCurrentUser==wMeChairID) { if( m_cbLeftCardCount < 4 && (m_cbUserAction&WIK_CHI_HU) ) { OnCardOperate( WIK_CHI_HU,0 ); return true; } //获取扑克 BYTE cbCardData=m_GameClientView.m_HandCardControl.GetCurrentCard(); //出牌效验 if (VerdictOutCard(cbCardData)==false) { for (BYTE i=0;im_bAllowSound ) { m_DirectSound.EnableSound(FALSE); } //设置数据 m_wBankerUser=pStatusFree->wBankerUser; m_GameClientView.SetCellScore(pStatusFree->lCellScore); m_GameClientView.m_HandCardControl.SetDisplayItem(true); //托管设置 for (WORD i=0;ibTrustee[i]); } //设置界面 for (WORD i=0;im_bAllowSound ) { m_DirectSound.EnableSound(FALSE); } WORD wMeChairID=GetMeChairID(); //设置变量 m_wBankerUser=pStatusPlay->wBankerUser; m_wCurrentUser=pStatusPlay->wCurrentUser; m_cbLeftCardCount=pStatusPlay->cbLeftCardCount; //旁观 if( IsLookonMode()==true ) m_GameClientView.m_HandCardControl.SetDisplayItem(IsAllowLookon()); //托管设置 for (WORD i=0;ibTrustee[i]); } if( pStatusPlay->bTrustee[wMeChairID] ) { m_bStustee = true; OnStusteeControl(0,0); } m_wTimeOutCount=0; if(pStatusPlay->bTrustee[GetMeChairID()]) m_GameClientView.m_btStusteeControl.SetButtonImage(IDB_BT_STOP_TRUSTEE,AfxGetInstanceHandle(),false,false); else m_GameClientView.m_btStusteeControl.SetButtonImage(IDB_BT_START_TRUSTEE,AfxGetInstanceHandle(),false,false); //历史变量 m_wOutCardUser=pStatusPlay->wOutCardUser; m_cbOutCardData=pStatusPlay->cbOutCardData; CopyMemory(m_cbDiscardCard,pStatusPlay->cbDiscardCard,sizeof(m_cbDiscardCard)); CopyMemory(m_cbDiscardCount,pStatusPlay->cbDiscardCount,sizeof(m_cbDiscardCount)); if( pStatusPlay->wOutCardUser != INVALID_CHAIR ) m_cbDiscardCard[pStatusPlay->wOutCardUser][m_cbDiscardCount[pStatusPlay->wOutCardUser]++] = pStatusPlay->cbOutCardData; //丢弃效果 if(m_wOutCardUser != INVALID_CHAIR) m_GameClientView.SetDiscUser(SwitchViewChairID(m_wOutCardUser)); m_GameClientView.SetTimer(IDI_DISC_EFFECT,250,NULL); //扑克变量 CopyMemory(m_cbWeaveCount,pStatusPlay->cbWeaveCount,sizeof(m_cbWeaveCount)); CopyMemory(m_WeaveItemArray,pStatusPlay->WeaveItemArray,sizeof(m_WeaveItemArray)); m_GameLogic.SwitchToCardIndex(pStatusPlay->cbCardData,pStatusPlay->cbCardCount,m_cbCardIndex); //辅助变量 WORD wViewChairID[GAME_PLAYER]={0,0,0,0}; for (WORD i=0;ilCellScore); m_GameClientView.SetBankerUser(wViewChairID[m_wBankerUser]); //组合扑克 BYTE cbWeaveCard[4]={0,0,0,0}; for (WORD i=0;icbSendCardData!=0x00) { //变量定义 BYTE cbCardCount=pStatusPlay->cbCardCount; BYTE cbRemoveCard[]={pStatusPlay->cbSendCardData}; //调整扑克 m_GameLogic.RemoveCard(pStatusPlay->cbCardData,cbCardCount,cbRemoveCard,1); pStatusPlay->cbCardData[pStatusPlay->cbCardCount-1]=pStatusPlay->cbSendCardData; } //设置扑克 BYTE cbCardCount=pStatusPlay->cbCardCount; m_GameClientView.m_HandCardControl.SetCardData(pStatusPlay->cbCardData,cbCardCount-1,pStatusPlay->cbCardData[cbCardCount-1]); } else m_GameClientView.m_HandCardControl.SetCardData(pStatusPlay->cbCardData,pStatusPlay->cbCardCount,0); //扑克设置 for (WORD i=0;iwHeapHand; m_wHeapTail = pStatusPlay->wHeapTail; CopyMemory(m_cbHeapCardInfo,pStatusPlay->cbHeapCardInfo,sizeof(m_cbHeapCardInfo)); //堆立界面 for (WORD i=0;iwWinOrder); i++ ) { if( pStatusPlay->wWinOrder[i] != INVALID_CHAIR ) { m_GameClientView.SetWinOrder( SwitchViewChairID(pStatusPlay->wWinOrder[i]),i+1 ); } } //操作界面 if ((IsLookonMode()==false)&&(pStatusPlay->cbActionMask!=WIK_NULL)) { //获取变量 BYTE cbActionMask=pStatusPlay->cbActionMask; BYTE cbActionCard=pStatusPlay->cbActionCard; m_cbUserAction = pStatusPlay->cbActionMask; //变量定义 tagGangCardResult GangCardResult; ZeroMemory(&GangCardResult,sizeof(GangCardResult)); //杠牌判断 if ((cbActionMask&WIK_GANG)!=0) { //桌面杆牌 if ((m_wCurrentUser==INVALID_CHAIR)&&(cbActionCard!=0)) { GangCardResult.cbCardCount=1; GangCardResult.cbCardData[0]=cbActionCard; } //自己杆牌 if ((m_wCurrentUser==GetMeChairID())||(cbActionCard==0)) { WORD wMeChairID=GetMeChairID(); m_GameLogic.AnalyseGangCard(m_cbCardIndex,m_WeaveItemArray[wMeChairID],m_cbWeaveCount[wMeChairID],GangCardResult); } } //设置界面 if (m_wCurrentUser==INVALID_CHAIR) SetGameClock(GetMeChairID(),IDI_OPERATE_CARD,TIME_OPERATE_CARD); if (IsLookonMode()==false) m_GameClientView.m_ControlWnd.SetControlInfo(cbActionCard,cbActionMask,GangCardResult); } //设置时间 if (m_wCurrentUser!=INVALID_CHAIR) { //计算时间 WORD wTimeCount=TIME_OPERATE_CARD; //设置时间 SetGameClock(m_wCurrentUser,TIME_OPERATE_CARD,wTimeCount); } //丢弃效果 m_GameClientView.SetDiscUser(SwitchViewChairID(m_wOutCardUser)); m_GameClientView.SetTimer(IDI_DISC_EFFECT,250,NULL); //更新界面 m_GameClientView.InvalidGameView(0,0,0,0); return true; } } return false; } //游戏开始 bool CGameClientEngine::OnSubGameStart(const void * pBuffer, WORD wDataSize) { //效验数据 ASSERT(wDataSize==sizeof(CMD_S_GameStart)); if (wDataSize!=sizeof(CMD_S_GameStart)) return false; //变量定义 CMD_S_GameStart * pGameStart=(CMD_S_GameStart *)pBuffer; //用户名称 for( WORD i = 0; i < GAME_PLAYER; i++ ) { IClientUserItem * pUserData = GetTableUserItem( i ); if( pUserData == NULL ) { m_szAccounts[i][0] = 0; continue; } lstrcpy( m_szAccounts[i],pUserData->GetNickName() ); } //设置状态 SetGameStatus(GS_MJ_PLAY); m_GameClientView.SetCurrentUser(INVALID_CHAIR); //设置变量 m_wBankerUser=pGameStart->wBankerUser; m_wCurrentUser=pGameStart->wCurrentUser; m_cbLeftCardCount=pGameStart->cbLeftCardCount; m_cbUserAction = pGameStart->cbUserAction; m_lSiceCount = pGameStart->lSiceCount; //出牌信息 m_cbOutCardData=0; m_wOutCardUser=INVALID_CHAIR; ZeroMemory(m_cbDiscardCard,sizeof(m_cbDiscardCard)); ZeroMemory(m_cbDiscardCount,sizeof(m_cbDiscardCount)); //组合扑克 ZeroMemory(m_cbWeaveCount,sizeof(m_cbWeaveCount)); ZeroMemory(m_WeaveItemArray,sizeof(m_WeaveItemArray)); //设置扑克 BYTE cbCardCount=(GetMeChairID()==m_wBankerUser)?MAX_COUNT:(MAX_COUNT-1); m_GameLogic.SwitchToCardIndex(pGameStart->cbCardData,cbCardCount,m_cbCardIndex); //旁观界面 if (IsLookonMode()==true) { //设置界面 m_GameClientView.SetDiscUser(INVALID_CHAIR); m_GameClientView.SetStatusFlag(false,false); m_GameClientView.SetBankerUser(INVALID_CHAIR); m_GameClientView.SetUserAction(INVALID_CHAIR,0); m_GameClientView.SetOutCardInfo(INVALID_CHAIR,0); m_GameClientView.SetWinOrder(INVALID_CHAIR,0); //扑克设置 m_GameClientView.m_UserCard[0].SetCardData(0,false); m_GameClientView.m_UserCard[1].SetCardData(0,false); m_GameClientView.m_UserCard[2].SetCardData(0,false); m_GameClientView.m_HandCardControl.SetCardData(NULL,0,0); //扑克设置 for (WORD i=0;iwHeapHand; m_wHeapTail = pGameStart->wHeapTail; CopyMemory(m_cbHeapCardInfo,pGameStart->cbHeapCardInfo,sizeof(m_cbHeapCardInfo)); //设置界面 m_GameClientView.m_HandCardControl.SetPositively(false); //环境处理 PlayGameSound(AfxGetInstanceHandle(),TEXT("DRAW_SICE")); //摇色子动画 m_GameClientView.m_DrawSiceWnd.SetSiceInfo(m_GameClientView.GetDC(),200,(WORD)(pGameStart->lSiceCount>>16),(WORD)pGameStart->lSiceCount); m_GameClientView.m_DrawSiceWnd.ShowWindow(SW_SHOW); return true; } //用户出牌 bool CGameClientEngine::OnSubOutCard(const void * pBuffer, WORD wDataSize) { //效验消息 ASSERT(wDataSize==sizeof(CMD_S_OutCard)); if (wDataSize!=sizeof(CMD_S_OutCard)) return false; //消息处理 CMD_S_OutCard * pOutCard=(CMD_S_OutCard *)pBuffer; //变量定义 WORD wMeChairID=GetMeChairID(); WORD wOutViewChairID=SwitchViewChairID(pOutCard->wOutCardUser); //设置变量 m_wCurrentUser=INVALID_CHAIR; m_wOutCardUser=pOutCard->wOutCardUser; m_cbOutCardData=pOutCard->cbOutCardData; //其他用户 if ((IsLookonMode()==true)||(pOutCard->wOutCardUser!=wMeChairID)) { //环境设置 KillGameClock(IDI_OPERATE_CARD); //播放声音 PlayCardSound(pOutCard->wOutCardUser,pOutCard->cbOutCardData); //出牌界面 m_GameClientView.SetUserAction(INVALID_CHAIR,0); m_GameClientView.SetOutCardInfo(wOutViewChairID,pOutCard->cbOutCardData); //设置扑克 if (wOutViewChairID==2) { //删除扑克 BYTE cbCardData[MAX_COUNT]; m_GameLogic.RemoveCard(m_cbCardIndex,pOutCard->cbOutCardData); //设置扑克 BYTE cbCardCount=m_GameLogic.SwitchToCardData(m_cbCardIndex,cbCardData); m_GameClientView.m_HandCardControl.SetCardData(cbCardData,cbCardCount,0); } else { WORD wUserIndex=(wOutViewChairID>2)?2:wOutViewChairID; m_GameClientView.m_UserCard[wUserIndex].SetCurrentCard(false); } } return true; } //发牌消息 bool CGameClientEngine::OnSubSendCard(const void * pBuffer, WORD wDataSize) { //效验数据 ASSERT(wDataSize==sizeof(CMD_S_SendCard)); if (wDataSize!=sizeof(CMD_S_SendCard)) return false; //变量定义 CMD_S_SendCard * pSendCard=(CMD_S_SendCard *)pBuffer; //设置变量 WORD wMeChairID=GetMeChairID(); m_wCurrentUser=pSendCard->wCurrentUser; //隐藏控件 m_GameClientView.m_ControlWnd.ShowWindow( SW_HIDE ); //删除定时器 KillGameClock( IDI_OPERATE_CARD ); //丢弃扑克 if ((m_wOutCardUser!=INVALID_CHAIR)&&(m_cbOutCardData!=0)) { //丢弃扑克 WORD wOutViewChairID=SwitchViewChairID(m_wOutCardUser); m_GameClientView.m_DiscardCard[wOutViewChairID].AddCardItem(m_cbOutCardData); m_GameClientView.SetDiscUser(wOutViewChairID); //设置变量 m_cbOutCardData=0; m_wOutCardUser=INVALID_CHAIR; } //发牌处理 if (pSendCard->cbCardData!=0) { //取牌界面 WORD wViewChairID=SwitchViewChairID(m_wCurrentUser); if (wViewChairID!=2) { WORD wUserIndex=(wViewChairID>2)?2:wViewChairID; m_GameClientView.m_UserCard[wUserIndex].SetCurrentCard(true); } else { m_cbCardIndex[m_GameLogic.SwitchToCardIndex(pSendCard->cbCardData)]++; m_GameClientView.m_HandCardControl.SetCurrentCard(pSendCard->cbCardData); } //扣除扑克 DeductionTableCard(pSendCard->bTail==false); } //当前用户 if ((IsLookonMode()==false)&&(m_wCurrentUser==wMeChairID)) { //激活框架 ActiveGameFrame(); //动作处理 if (pSendCard->cbActionMask!=WIK_NULL) { //获取变量 BYTE cbActionCard=pSendCard->cbCardData; BYTE cbActionMask=pSendCard->cbActionMask; m_cbUserAction = pSendCard->cbActionMask; //变量定义 tagGangCardResult GangCardResult; ZeroMemory(&GangCardResult,sizeof(GangCardResult)); //杠牌判断 if ((cbActionMask&WIK_GANG)!=0) { WORD wMeChairID=GetMeChairID(); m_GameLogic.AnalyseGangCard(m_cbCardIndex,m_WeaveItemArray[wMeChairID],m_cbWeaveCount[wMeChairID],GangCardResult); } //设置界面 m_GameClientView.m_ControlWnd.SetControlInfo(cbActionCard,cbActionMask,GangCardResult); } } //出牌提示 m_GameClientView.SetStatusFlag((IsLookonMode()==false)&&(m_wCurrentUser==wMeChairID),false); //更新界面 m_GameClientView.InvalidGameView(0,0,0,0); //计算时间 WORD wTimeCount=TIME_OPERATE_CARD; //设置时间 m_GameClientView.SetCurrentUser(SwitchViewChairID(m_wCurrentUser)); SetGameClock(m_wCurrentUser,IDI_OPERATE_CARD,wTimeCount); return true; } //操作提示 bool CGameClientEngine::OnSubOperateNotify(const void * pBuffer, WORD wDataSize) { //效验数据 ASSERT(wDataSize==sizeof(CMD_S_OperateNotify)); if (wDataSize!=sizeof(CMD_S_OperateNotify)) return false; //变量定义 CMD_S_OperateNotify * pOperateNotify=(CMD_S_OperateNotify *)pBuffer; //用户界面 if ((IsLookonMode()==false)&&(pOperateNotify->cbActionMask!=WIK_NULL)) { //获取变量 WORD wMeChairID=GetMeChairID(); BYTE cbActionMask=pOperateNotify->cbActionMask; BYTE cbActionCard=pOperateNotify->cbActionCard; m_cbUserAction = pOperateNotify->cbActionMask; //变量定义 tagGangCardResult GangCardResult; ZeroMemory(&GangCardResult,sizeof(GangCardResult)); //杠牌判断 if ((cbActionMask&WIK_GANG)!=0) { //桌面杆牌 if ((m_wCurrentUser==INVALID_CHAIR)&&(cbActionCard!=0)) { GangCardResult.cbCardCount=1; GangCardResult.cbCardData[0]=cbActionCard; } //自己杆牌 if ((m_wCurrentUser==wMeChairID)||(cbActionCard==0)) { WORD wMeChairID=GetMeChairID(); m_GameLogic.AnalyseGangCard(m_cbCardIndex,m_WeaveItemArray[wMeChairID],m_cbWeaveCount[wMeChairID],GangCardResult); } } //设置界面 ActiveGameFrame(); m_GameClientView.m_ControlWnd.SetControlInfo(cbActionCard,cbActionMask,GangCardResult); //设置时间 m_GameClientView.SetCurrentUser(INVALID_CHAIR); SetGameClock(GetMeChairID(),IDI_OPERATE_CARD,TIME_OPERATE_CARD); } return true; } //操作结果 bool CGameClientEngine::OnSubOperateResult(const void * pBuffer, WORD wDataSize) { //效验消息 ASSERT(wDataSize==sizeof(CMD_S_OperateResult)); if (wDataSize!=sizeof(CMD_S_OperateResult)) return false; //消息处理 CMD_S_OperateResult * pOperateResult=(CMD_S_OperateResult *)pBuffer; //变量定义 BYTE cbPublicCard=TRUE; WORD wOperateUser=pOperateResult->wOperateUser; BYTE cbOperateCard=pOperateResult->cbOperateCard; WORD wOperateViewID=SwitchViewChairID(wOperateUser); WORD wProviderViewID = SwitchViewChairID(pOperateResult->wProvideUser); //出牌变量 if (pOperateResult->cbOperateCode!=WIK_NULL) { m_cbOutCardData=0; m_wOutCardUser=INVALID_CHAIR; } //设置变量 m_wCurrentUser=pOperateResult->wOperateUser; //设置组合 if ((pOperateResult->cbOperateCode&WIK_GANG)!=0) { m_wCurrentUser = INVALID_CHAIR; //组合扑克 BYTE cbWeaveIndex=0xFF; for (BYTE i=0;icbOperateCode; m_WeaveItemArray[wOperateUser][cbWeaveIndex].wProvideUser=pOperateResult->wProvideUser; break; } } //组合扑克 if (cbWeaveIndex==0xFF) { //暗杠判断 cbPublicCard=(pOperateResult->wProvideUser==wOperateUser)?FALSE:TRUE; //设置扑克 cbWeaveIndex=m_cbWeaveCount[wOperateUser]++; m_WeaveItemArray[wOperateUser][cbWeaveIndex].cbPublicCard=cbPublicCard; m_WeaveItemArray[wOperateUser][cbWeaveIndex].cbCenterCard=cbOperateCard; m_WeaveItemArray[wOperateUser][cbWeaveIndex].cbWeaveKind=pOperateResult->cbOperateCode; m_WeaveItemArray[wOperateUser][cbWeaveIndex].wProvideUser=pOperateResult->wProvideUser; } //组合界面 BYTE cbWeaveCard[4]={0,0,0,0},cbWeaveKind=pOperateResult->cbOperateCode; BYTE cbWeaveCardCount=m_GameLogic.GetWeaveCard(cbWeaveKind,cbOperateCard,cbWeaveCard); m_GameClientView.m_WeaveCard[wOperateViewID][cbWeaveIndex].SetCardData(cbWeaveCard,cbWeaveCardCount); m_GameClientView.m_WeaveCard[wOperateViewID][cbWeaveIndex].SetDisplayItem((cbPublicCard==TRUE)?true:false); //扑克设置 if (GetMeChairID()==wOperateUser) { m_cbCardIndex[m_GameLogic.SwitchToCardIndex(pOperateResult->cbOperateCard)]=0; } //设置扑克 if (GetMeChairID()==wOperateUser) { BYTE cbCardData[MAX_COUNT]; BYTE cbCardCount=m_GameLogic.SwitchToCardData(m_cbCardIndex,cbCardData); m_GameClientView.m_HandCardControl.SetCardData(cbCardData,cbCardCount,0); } else { WORD wUserIndex=(wOperateViewID>=3)?2:wOperateViewID; BYTE cbCardCount=MAX_COUNT-m_cbWeaveCount[wOperateUser]*3; m_GameClientView.m_UserCard[wUserIndex].SetCardData(cbCardCount-1,false); } } else if (pOperateResult->cbOperateCode!=WIK_NULL) { //设置组合 BYTE cbWeaveIndex=m_cbWeaveCount[wOperateUser]++; m_WeaveItemArray[wOperateUser][cbWeaveIndex].cbPublicCard=TRUE; m_WeaveItemArray[wOperateUser][cbWeaveIndex].cbCenterCard=cbOperateCard; m_WeaveItemArray[wOperateUser][cbWeaveIndex].cbWeaveKind=pOperateResult->cbOperateCode; m_WeaveItemArray[wOperateUser][cbWeaveIndex].wProvideUser=pOperateResult->wProvideUser; //组合界面 BYTE cbWeaveCard[4]={0,0,0,0},cbWeaveKind=pOperateResult->cbOperateCode; BYTE cbWeaveCardCount=m_GameLogic.GetWeaveCard(cbWeaveKind,cbOperateCard,cbWeaveCard); m_GameClientView.m_WeaveCard[wOperateViewID][cbWeaveIndex].SetCardData(cbWeaveCard,cbWeaveCardCount); m_GameClientView.m_WeaveCard[wOperateViewID][cbWeaveIndex].SetDirectionCardPos(3-(wOperateViewID-wProviderViewID+4)%4); //删除扑克 if (GetMeChairID()==wOperateUser) { VERIFY( m_GameLogic.RemoveCard(cbWeaveCard,cbWeaveCardCount,&cbOperateCard,1) ); VERIFY( m_GameLogic.RemoveCard(m_cbCardIndex,cbWeaveCard,cbWeaveCardCount-1) ); } //设置扑克 if (GetMeChairID()==wOperateUser) { BYTE cbCardData[MAX_COUNT]; BYTE cbCardCount=m_GameLogic.SwitchToCardData(m_cbCardIndex,cbCardData); m_GameClientView.m_HandCardControl.SetCardData(cbCardData,cbCardCount-1,cbCardData[cbCardCount-1]); } else { WORD wUserIndex=(wOperateViewID>=3)?2:wOperateViewID; BYTE cbCardCount=MAX_COUNT-m_cbWeaveCount[wOperateUser]*3; m_GameClientView.m_UserCard[wUserIndex].SetCardData(cbCardCount-1,true); } } //设置界面 m_GameClientView.SetOutCardInfo(INVALID_CHAIR,0); m_GameClientView.m_ControlWnd.ShowWindow(SW_HIDE); m_GameClientView.SetUserAction(wOperateViewID,pOperateResult->cbOperateCode); m_GameClientView.SetStatusFlag((IsLookonMode()==false)&&(m_wCurrentUser==GetMeChairID()),false); //更新界面 m_GameClientView.InvalidGameView(0,0,0,0); //环境设置 PlayActionSound(wOperateUser,pOperateResult->cbOperateCode); //设置时间 if (m_wCurrentUser!=INVALID_CHAIR) { //计算时间 WORD wTimeCount=TIME_OPERATE_CARD; //设置时间 m_GameClientView.SetCurrentUser(SwitchViewChairID(m_wCurrentUser)); SetGameClock(m_wCurrentUser,IDI_OPERATE_CARD,wTimeCount); } return true; } //游戏结束 bool CGameClientEngine::OnSubGameEnd(const void * pBuffer, WORD wDataSize) { //效验数据 ASSERT(wDataSize==sizeof(CMD_S_GameEnd)); if (wDataSize!=sizeof(CMD_S_GameEnd)) return false; //消息处理 CMD_S_GameEnd * pGameEnd=(CMD_S_GameEnd *)pBuffer; //设置状态 SetGameStatus(GS_MJ_FREE); m_GameClientView.SetStatusFlag(false,false); //删除定时器 KillGameClock(IDI_OPERATE_CARD); //设置控件 m_GameClientView.SetStatusFlag(false,false); m_GameClientView.m_ControlWnd.ShowWindow(SW_HIDE); m_GameClientView.m_HandCardControl.SetPositively(false); //设置扑克 for (WORD i=0;iwLeftUser != INVALID_CHAIR ) { strEnd.AppendFormat( TEXT("玩家[]逃跑,将收回刮风下雨所得,并垫付其它玩家的刮风下雨,及未胡牌者花猪。"), m_szAccounts[pGameEnd->wLeftUser] ); if ( m_pIStringMessage ) m_pIStringMessage->InsertSystemString( strEnd ); } strEnd = TEXT("\n本局结束,成绩统计:\r\n"); for( WORD i = 0; i < GAME_PLAYER; i++ ) { if( m_szAccounts[i][0] == 0 ) continue; lstrcpy( ScoreInfo.szUserName[SwitchViewChairID(i)],m_szAccounts[i] ); strTemp.Format(TEXT("%s: %I64d\n"),m_szAccounts[i],pGameEnd->lGameScore[i]); strEnd += strTemp; } //消息积分 if ( m_pIStringMessage ) m_pIStringMessage->InsertSystemString((LPCTSTR)strEnd); //成绩变量 for( WORD i = 0; i < GAME_PLAYER; i++ ) { WORD wViewId = SwitchViewChairID(i); ScoreInfo.wMeChairId = wViewId; WORD j = 0; for( ; j < CountArray(pGameEnd->wWinOrder); j++ ) { if( pGameEnd->wWinOrder[j] == i ) { ScoreInfo.cbWinOrder = (BYTE)j+1; break; } } if( j == CountArray(pGameEnd->wWinOrder) ) ScoreInfo.cbWinOrder = 0; ScoreInfo.wProvideUser = SwitchViewChairID(pGameEnd->wProvideUser[i]); ScoreInfo.lGameScore = pGameEnd->lGameScore[i]; ScoreInfo.lGameTax = pGameEnd->lGameTax[i]; ScoreInfo.lGangScore = pGameEnd->lGangScore[i]; ScoreInfo.cbGenCount = pGameEnd->cbGenCount[i]; //CopyMemory( ScoreInfo.dwChiHuRight,&pGameEnd->dwChiHuRight[i],sizeof(DWORD)*MAX_RIGHT_COUNT ); ZeroMemory( ScoreInfo.wLostFanShu,sizeof(ScoreInfo.wLostFanShu) ); for( WORD j = 0; j < GAME_PLAYER; j++ ) { if( j == i ) continue; ScoreInfo.wLostFanShu[SwitchViewChairID(j)] = pGameEnd->wLostFanShu[i][j]; } m_GameClientView.m_ScoreControl[wViewId].SetScoreInfo( ScoreInfo ); } //用户扑克 for (WORD i=0;icbCardData[i],pGameEnd->cbCardCount[i]); } //设置扑克 m_GameClientView.m_UserCard[0].SetCardData(0,false); m_GameClientView.m_UserCard[1].SetCardData(0,false); m_GameClientView.m_UserCard[2].SetCardData(0,false); m_GameClientView.m_HandCardControl.SetCardData(NULL,0,0); //播放声音 LONGLONG lScore=pGameEnd->lGameScore[GetMeChairID()]; if (lScore>0L) { PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WIN")); } else if (lScore<0L) { PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_LOST")); } else { PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_END")); } //设置界面 if (IsLookonMode()==false) { m_GameClientView.m_btStart.ShowWindow(SW_SHOW); m_GameClientView.SetCurrentUser(INVALID_CHAIR); SetGameClock(GetMeChairID(),IDI_START_GAME,TIME_START_GAME); } //取消托管 if(m_bStustee) OnStusteeControl(0,0); //更新界面 m_GameClientView.InvalidGameView(0,0,0,0); return true; } //用户托管 bool CGameClientEngine::OnSubTrustee(const void * pBuffer,WORD wDataSize) { //效验数据 ASSERT(wDataSize==sizeof(CMD_S_Trustee)); if (wDataSize!=sizeof(CMD_S_Trustee)) return false; //消息处理 CMD_S_Trustee * pTrustee=(CMD_S_Trustee *)pBuffer; m_GameClientView.SetTrustee(SwitchViewChairID(pTrustee->wChairID),pTrustee->bTrustee); if ((IsLookonMode()==true)||(pTrustee->wChairID!=GetMeChairID())) { IClientUserItem * pUserData = GetTableUserItem(pTrustee->wChairID); TCHAR szBuffer[256]; if(pTrustee->bTrustee==true) _sntprintf(szBuffer,sizeof(szBuffer),TEXT("玩家[%s]选择了托管功能."),pUserData->GetNickName()); else _sntprintf(szBuffer,sizeof(szBuffer),TEXT("玩家[%s]取消了托管功能."),pUserData->GetNickName()); if ( m_pIStringMessage ) m_pIStringMessage->InsertSystemString(szBuffer); } return true; } // bool CGameClientEngine::OnSubUserChiHu( const void *pBuffer,WORD wDataSize ) { //效验消息 ASSERT(wDataSize==sizeof(CMD_S_ChiHu)); if (wDataSize!=sizeof(CMD_S_ChiHu)) return false; //消息处理 CMD_S_ChiHu * pChiHu=(CMD_S_ChiHu *)pBuffer; WORD wViewId = SwitchViewChairID( pChiHu->wChiHuUser ); //隐藏控件 m_GameClientView.m_ControlWnd.ShowWindow( SW_HIDE ); //删除定时器 KillGameClock( IDI_OPERATE_CARD ); BYTE cbCardData[MAX_COUNT]; ZeroMemory( cbCardData,sizeof(cbCardData) ); cbCardData[pChiHu->cbCardCount-1] = pChiHu->cbChiHuCard; //设置扑克,名次 if( wViewId == 2 ) { m_GameClientView.m_HandCardControl.SetPositively( false ); m_GameClientView.m_HandCardControl.SetCardData( NULL,0,0 ); m_GameClientView.m_TableCard[2].SetCardData( cbCardData,pChiHu->cbCardCount ); } else { WORD wUserIndex=(wViewId>2)?2:wViewId; m_GameClientView.m_UserCard[wUserIndex].SetCardData( 0,false ); m_GameClientView.m_TableCard[wViewId].SetCardData( cbCardData,pChiHu->cbCardCount ); } m_GameClientView.SetWinOrder( wViewId,pChiHu->cbWinOrder ); ////提示消息 //TCHAR szBuffer[128] = TEXT(""); //_sntprintf( szBuffer,CountArray(szBuffer),TEXT("\n玩家[%s]胡牌,得分:%+I64d\n"),m_szAccounts[pChiHu->wChiHuUser],pChiHu->lGameScore ); //InsertSystemString( szBuffer ); //设置界面 m_GameClientView.SetOutCardInfo(INVALID_CHAIR,0); WORD wAction = WIK_CHI_HU; if( pChiHu->wChiHuUser == pChiHu->wProviderUser ) wAction |= WIK_ZI_MO; m_GameClientView.SetUserAction(wViewId,wAction); m_GameClientView.SetStatusFlag(false,false); //更新界面 m_GameClientView.InvalidGameView(0,0,0,0); //环境设置 PlayActionSound(pChiHu->wChiHuUser,WIK_CHI_HU); return true; } //播放出牌声音 void CGameClientEngine::PlayCardSound(WORD wChairID, BYTE cbCardData) { if(m_GameLogic.IsValidCard(cbCardData) == false) { return; } if(wChairID < 0 || wChairID > 3) { return; } //判断性别 IClientUserItem * pUserData = GetTableUserItem(wChairID); if(pUserData == 0) { assert(0 && "得不到玩家信息"); return; } bool bBoy = (pUserData->GetGender() == GENDER_FEMALE ? false : true); BYTE cbType= (cbCardData & MASK_COLOR); BYTE cbValue= (cbCardData & MASK_VALUE); CString strSoundName; switch(cbType) { case 0X30: //风 { switch(cbValue) { case 1: { strSoundName = _T("F_1"); break; } case 2: { strSoundName = _T("F_2"); break; } case 3: { strSoundName = _T("F_3"); break; } case 4: { strSoundName = _T("F_4"); break; } case 5: { strSoundName = _T("F_5"); break; } case 6: { strSoundName = _T("F_6"); break; } case 7: { strSoundName = _T("F_7"); break; } default: { strSoundName=_T("BU_HUA"); } } break; } case 0X20: //筒 { strSoundName.Format(_T("T_%d"), cbValue); break; } case 0X10: //索 { strSoundName.Format(_T("S_%d"), cbValue); break; } case 0X00: //万 { strSoundName.Format(_T("W_%d"), cbValue); break; } } if(bBoy) { strSoundName = _T("BOY_") +strSoundName; } else { strSoundName = _T("GIRL_") + strSoundName; } m_DirectSound.Play(); PlayGameSound(AfxGetInstanceHandle(), strSoundName); } //播放声音 void CGameClientEngine::PlayActionSound(WORD wChairID,BYTE cbAction) { //判断性别 IClientUserItem * pUserData = GetTableUserItem(wChairID); if(pUserData == 0) { assert(0 && "得不到玩家信息"); return; } if(wChairID < 0 || wChairID > 3) { return; } bool bBoy = (pUserData->GetGender() == GENDER_FEMALE ? false : true); switch (cbAction) { case WIK_NULL: //取消 { if(bBoy) PlayGameSound(AfxGetInstanceHandle(),TEXT("BOY_OUT_CARD")); else PlayGameSound(AfxGetInstanceHandle(),TEXT("GIRL_OUT_CARD")); break; } case WIK_LEFT: case WIK_CENTER: case WIK_RIGHT: //上牌 { if(bBoy) PlayGameSound(AfxGetInstanceHandle(),TEXT("BOY_CHI")); else PlayGameSound(AfxGetInstanceHandle(),TEXT("GIRL_CHI")); break; } case WIK_PENG: //碰牌 { if(bBoy) PlayGameSound(AfxGetInstanceHandle(),TEXT("BOY_PENG")); else PlayGameSound(AfxGetInstanceHandle(),TEXT("GIRL_PENG")); break; } case WIK_GANG: //杠牌 { if(bBoy) PlayGameSound(AfxGetInstanceHandle(),TEXT("BOY_GANG")); else PlayGameSound(AfxGetInstanceHandle(),TEXT("GIRL_GANG")); break; } case WIK_CHI_HU: //吃胡 { if(bBoy) PlayGameSound(AfxGetInstanceHandle(),TEXT("BOY_CHI_HU")); else PlayGameSound(AfxGetInstanceHandle(),TEXT("GIRL_CHI_HU")); break; } } return; } //出牌判断 bool CGameClientEngine::VerdictOutCard(BYTE cbCardData) { return true; } //扣除扑克 void CGameClientEngine::DeductionTableCard(bool bHeadCard) { if (bHeadCard==true) { //切换索引 BYTE cbHeapCount=m_cbHeapCardInfo[m_wHeapHand][0]+m_cbHeapCardInfo[m_wHeapHand][1]; if (cbHeapCount==HEAP_FULL_COUNT) m_wHeapHand=(m_wHeapHand+1)%CountArray(m_cbHeapCardInfo); //减少扑克 m_cbLeftCardCount--; m_cbHeapCardInfo[m_wHeapHand][0]++; //堆立扑克 WORD wHeapViewID=SwitchViewChairID(m_wHeapHand); WORD wMinusHeadCount=m_cbHeapCardInfo[m_wHeapHand][0]; WORD wMinusLastCount=m_cbHeapCardInfo[m_wHeapHand][1]; m_GameClientView.m_HeapCard[wHeapViewID].SetCardData(wMinusHeadCount,wMinusLastCount,HEAP_FULL_COUNT); } else { //切换索引 BYTE cbHeapCount=m_cbHeapCardInfo[m_wHeapTail][0]+m_cbHeapCardInfo[m_wHeapTail][1]; if (cbHeapCount==HEAP_FULL_COUNT) m_wHeapTail=(m_wHeapTail+3)%CountArray(m_cbHeapCardInfo); //减少扑克 m_cbLeftCardCount--; m_cbHeapCardInfo[m_wHeapTail][1]++; //堆立扑克 WORD wHeapViewID=SwitchViewChairID(m_wHeapTail); WORD wMinusHeadCount=m_cbHeapCardInfo[m_wHeapTail][0]; WORD wMinusLastCount=m_cbHeapCardInfo[m_wHeapTail][1]; m_GameClientView.m_HeapCard[wHeapViewID].SetCardData(wMinusHeadCount,wMinusLastCount,HEAP_FULL_COUNT); } return; } //显示控制 bool CGameClientEngine::ShowOperateControl(BYTE cbUserAction, BYTE cbActionCard) { //变量定义 tagGangCardResult GangCardResult; ZeroMemory(&GangCardResult,sizeof(GangCardResult)); //杠牌判断 if ((cbUserAction&WIK_GANG)!=0) { //桌面杆牌 if (cbActionCard!=0) { GangCardResult.cbCardCount=1; GangCardResult.cbCardData[0]=cbActionCard; } //自己杆牌 if (cbActionCard==0) { WORD wMeChairID=GetMeChairID(); m_GameLogic.AnalyseGangCard(m_cbCardIndex,m_WeaveItemArray[wMeChairID],m_cbWeaveCount[wMeChairID],GangCardResult); } } //显示界面 if (IsLookonMode()==false) m_GameClientView.m_ControlWnd.SetControlInfo(cbActionCard,cbUserAction,GangCardResult); return true; } //开始按钮 LRESULT CGameClientEngine::OnStart(WPARAM wParam, LPARAM lParam) { //环境设置 KillGameClock(IDI_START_GAME); m_GameClientView.m_btStart.ShowWindow(SW_HIDE); m_GameClientView.m_ControlWnd.ShowWindow(SW_HIDE); //设置界面 m_GameClientView.SetDiscUser(INVALID_CHAIR); m_GameClientView.SetStatusFlag(false,false); m_GameClientView.SetBankerUser(INVALID_CHAIR); m_GameClientView.SetUserAction(INVALID_CHAIR,0); m_GameClientView.SetOutCardInfo(INVALID_CHAIR,0); m_GameClientView.SetWinOrder(INVALID_CHAIR,0); //扑克设置 m_GameClientView.m_UserCard[0].SetCardData(0,false); m_GameClientView.m_UserCard[1].SetCardData(0,false); m_GameClientView.m_UserCard[2].SetCardData(0,false); m_GameClientView.m_HandCardControl.SetCardData(NULL,0,0); //扑克设置 for (WORD i=0;iInsertSystemString(TEXT("出此牌不符合游戏规则!")); return 0; } //设置变量 m_cbUserAction = 0; m_wCurrentUser=INVALID_CHAIR; BYTE cbOutCardData=(BYTE)wParam; m_GameLogic.RemoveCard(m_cbCardIndex,cbOutCardData); //设置扑克 BYTE cbCardData[MAX_COUNT]; BYTE cbCardCount=m_GameLogic.SwitchToCardData(m_cbCardIndex,cbCardData); m_GameClientView.m_HandCardControl.SetCardData(cbCardData,cbCardCount,0); //设置界面 KillGameClock(IDI_OPERATE_CARD); m_GameClientView.InvalidGameView(0,0,0,0); m_GameClientView.SetStatusFlag(false,false); m_GameClientView.SetUserAction(INVALID_CHAIR,0); m_GameClientView.SetOutCardInfo(2,cbOutCardData); m_GameClientView.m_ControlWnd.ShowWindow(SW_HIDE); //发送数据 CMD_C_OutCard OutCard; OutCard.cbCardData=cbOutCardData; SendSocketData(SUB_C_OUT_CARD,&OutCard,sizeof(OutCard)); //播放声音 PlayCardSound(GetMeChairID(),cbOutCardData); return 0; } //扑克操作 LRESULT CGameClientEngine::OnCardOperate(WPARAM wParam, LPARAM lParam) { //变量定义 BYTE cbOperateCode=(BYTE)(wParam); BYTE cbOperateCard=(BYTE)(LOWORD(lParam)); //状态判断 if ((m_wCurrentUser==GetMeChairID())&&(cbOperateCode==WIK_NULL)) { m_GameClientView.m_ControlWnd.ShowWindow(SW_HIDE); return 0; } //删除时间 KillGameClock(IDI_OPERATE_CARD); m_cbUserAction = 0; //环境设置 m_GameClientView.SetStatusFlag(false,true); m_GameClientView.m_ControlWnd.ShowWindow(SW_HIDE); //发送命令 CMD_C_OperateCard OperateCard; OperateCard.cbOperateCode=cbOperateCode; OperateCard.cbOperateCard=cbOperateCard; SendSocketData(SUB_C_OPERATE_CARD,&OperateCard,sizeof(OperateCard)); return 0; } //拖管控制 LRESULT CGameClientEngine::OnStusteeControl(WPARAM wParam, LPARAM lParam) { //设置变量 m_wTimeOutCount=0; //设置状态 if (m_bStustee ==true) { m_bStustee=false; m_GameClientView.m_btStusteeControl.SetButtonImage(IDB_BT_START_TRUSTEE,AfxGetInstanceHandle(),false,false); //if( FALSE == (BOOL)wParam ) if ( m_pIStringMessage ) m_pIStringMessage->InsertSystemString(_T("您取消了托管功能.")); CMD_C_Trustee Trustee; Trustee.bTrustee = false; SendSocketData(SUB_C_TRUSTEE,&Trustee,sizeof(Trustee)); } else { m_bStustee=true; m_GameClientView.m_btStusteeControl.SetButtonImage(IDB_BT_STOP_TRUSTEE,AfxGetInstanceHandle(),false,false); //if( FALSE == (BOOL)wParam ) if ( m_pIStringMessage ) m_pIStringMessage->InsertSystemString(_T("您选择了托管功能.")); CMD_C_Trustee Trustee; Trustee.bTrustee = true; SendSocketData(SUB_C_TRUSTEE,&Trustee,sizeof(Trustee)); } return 0; } //第二次摇色子消息 LRESULT CGameClientEngine::OnSiceTwo(WPARAM wParam, LPARAM lParam) { //环境处理 PlayGameSound(AfxGetInstanceHandle(),TEXT("DRAW_SICE")); //设置界面 m_GameClientView.SetBankerUser(SwitchViewChairID(m_wBankerUser)); return 0; } //摇色子结束消息 LRESULT CGameClientEngine::OnSiceFinish(WPARAM wParam, LPARAM lParam) { //设置界面 m_GameClientView.m_DrawSiceWnd.ShowWindow(SW_HIDE); bool bPlayerMode = (IsLookonMode()==false); //扑克设置 for (WORD i=0;i=3)?2:wViewChairID; m_GameClientView.m_UserCard[wIndex].SetCardData(MAX_COUNT-1,(i==m_wBankerUser)); } else { BYTE cbCardData[MAX_COUNT]; m_GameLogic.SwitchToCardData(m_cbCardIndex,cbCardData); BYTE cbBankerCard= (i==m_wBankerUser?cbCardData[MAX_COUNT-1]:0); m_GameClientView.m_HandCardControl.SetCardData(cbCardData,MAX_COUNT-1,cbBankerCard); } } m_GameClientView.m_HandCardControl.SetPositively(bPlayerMode); //出牌提示 if ((bPlayerMode==true)&&(m_wCurrentUser!=INVALID_CHAIR)) { WORD wMeChairID=GetMeChairID(); if (m_wCurrentUser==wMeChairID) m_GameClientView.SetStatusFlag(true,false); } //动作处理 if ((bPlayerMode==true)&&(m_cbUserAction!=WIK_NULL)) { ShowOperateControl(m_cbUserAction,0); SetGameClock(GetMeChairID(),IDI_OPERATE_CARD,TIME_OPERATE_CARD); } //更新界面 m_GameClientView.InvalidGameView(0,0,0,0); //激活框架 if (bPlayerMode==true) ActiveGameFrame(); //设置时间 if (m_wCurrentUser!=INVALID_CHAIR) { m_GameClientView.SetCurrentUser(SwitchViewChairID(m_wCurrentUser)); SetGameClock(m_wCurrentUser,IDI_OPERATE_CARD,TIME_OPERATE_CARD); } //环境处理 PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_START")); return 0; } // bool CGameClientEngine::OnSubGangScore( const void *pBuffer, WORD wDataSize ) { //效验消息 ASSERT(wDataSize==sizeof(CMD_S_GangScore)); if (wDataSize!=sizeof(CMD_S_GangScore)) return false; //消息处理 CMD_S_GangScore * pGangScore=(CMD_S_GangScore *)pBuffer; CString strTemp ,strEnd; strEnd.Format( TEXT("\n----------%s----------\n"),pGangScore->cbXiaYu==TRUE?TEXT("下雨"):TEXT("刮风") ); //InsertGeneralString( strEnd,RGB(0,0,0),false ); strEnd = TEXT(""); for( WORD i = 0; i < GAME_PLAYER; i++ ) { strTemp.Format(TEXT("%s: %I64d\n"),m_szAccounts[i],pGangScore->lGangScore[i]); strEnd += strTemp; } //消息积分 //InsertGeneralString( strEnd,RGB(0,0,255),false); strEnd = TEXT("------------------------\n"); //InsertGeneralString( strEnd,RGB(0,0,0),false ); //设置界面 LONGLONG lGangScore[GAME_PLAYER]; for( WORD i = 0; i < GAME_PLAYER; i++ ) lGangScore[SwitchViewChairID(i)] = pGangScore->lGangScore[i]; m_GameClientView.SetGangScore( SwitchViewChairID(pGangScore->wChairId),pGangScore->cbXiaYu,lGangScore ); return true; } //////////////////////////////////////////////////////////////////////////