//重置框架 void CGameClientDlg::ResetGameFrame() { //游戏变量 m_bHandCardCount=0; m_wBanker=INVALID_CHAIR; memset(m_bCardCount,0,sizeof(m_bCardCount)); memset(m_bHandCardData,0,sizeof(m_bHandCardData)); //出牌变量 m_bTurnCardCount=0; m_bTurnOutType=CT_INVALID; memset(m_bTurnCardData,0,sizeof(m_bTurnCardData)); for(BYTE i=0;i<GAME_PLAYER;i++) { memset(m_bZhanPaiData[i],0,sizeof(m_bZhanPaiData[i])); ZeroMemory(m_bForeCard[i],sizeof(BYTE)*16); ZeroMemory(m_bForCardItem[i],sizeof(tagCardItem)*16); } //辅助变量 m_wTimeOutCount=0; m_wMostUser=INVALID_CHAIR; //删除定时 KillGameTimer(0); KillTimer(IDI_MOST_CARD); return; }
//用户掀牌 bool CGameClientDlg::OnSubXianPai(const void * pBuffer, WORD wDataSize) { //效验数据 ASSERT(wDataSize==sizeof(CMD_S_User_XianPai)); if (wDataSize!=sizeof(CMD_S_User_XianPai)) return false; //消息处理 CMD_S_User_XianPai * pXianPai=(CMD_S_User_XianPai *)pBuffer; m_GameClientView.ShowXianPaiTitle(SW_NORMAL,SwitchViewChairID(pXianPai->wXianPaiUserID)); m_GameClientView.HideAllTitle(false,INVALID_CHAIR); //设置界面 m_GameClientView.SetIncreaseXian(SwitchViewChairID(pXianPai->wXianPaiUserID)); if(pXianPai->wCurrentUser==GetMeChairID()) { ActiveGameFrame(); m_GameClientView.m_btAutoOutCard.ShowWindow(SW_NORMAL); m_GameClientView.m_btOutCard.ShowWindow(SW_NORMAL); //设置被掀次数 m_GameClientView.SetIncreaseBeiXian(SwitchViewChairID(GetMeChairID())); } //设置定时器 KillGameTimer(IDI_OUT_CARD); SetGameTimer(pXianPai->wCurrentUser,IDI_OUT_CARD,30); return true; }
//开始按钮 LRESULT CGameClientDlg::OnStart(WPARAM wParam, LPARAM lParam) { //删除定时器 if(!IsLookonMode())KillGameTimer(IDI_START_GAME); //设置界面 m_GameClientView.DisplayType(false); m_GameClientView.SetBankerUser(INVALID_CHAIR); m_GameClientView.m_btStart.ShowWindow(SW_HIDE); m_GameClientView.m_ScoreView.ShowWindow(SW_HIDE); m_GameClientView.SetUserTableScore(INVALID_CHAIR,0L); for (WORD i=0;i<GAME_PLAYER;i++) { m_GameClientView.ShowScore(i,false); m_GameClientView.m_CardControl[i].SetOX(false); m_GameClientView.SetUserOxValue(i,0xff); m_GameClientView.m_CardControl[i].SetCardData(NULL,0); if(i!=m_wViewChairID[GetMeChairID()])m_GameClientView.m_CardControl[i].SetDisplayFlag(false); m_GameClientView.m_CardControlOx[i].SetCardData(NULL,0); } //加注信息 m_lTurnMaxScore=0L; //m_lTurnLessScore=0L;m_cbHandCardData ZeroMemory(m_lTableScore,sizeof(m_lTableScore)); ZeroMemory(m_bUserOxCard,sizeof(m_bUserOxCard)); ZeroMemory(m_cbHandCardData,sizeof(m_cbHandCardData)); //发送消息 if(!IsLookonMode())SendUserReady(NULL,0); return 0; }
//扑克操作 LRESULT CGameClientDlg::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; } //删除时间 KillGameTimer(IDI_OPERATE_CARD); //环境设置 m_GameClientView.SetStatusFlag(false,true); m_GameClientView.m_ControlWnd.ShowWindow(SW_HIDE); //发送命令 CMD_C_OperateCard OperateCard; OperateCard.cbOperateCode=cbOperateCode; OperateCard.cbOperateCard=cbOperateCard; SendData(SUB_C_OPERATE_CARD,&OperateCard,sizeof(OperateCard)); return 0; }
//放弃出牌 LRESULT CGameClientDlg::OnPassCard(WPARAM wParam, LPARAM lParam) { //状态判断 if (m_GameClientView.m_btPassCard.IsWindowEnabled()==FALSE) return 0; //设置界面 KillGameTimer(IDI_OUT_CARD); m_GameClientView.m_btOutCard.ShowWindow(SW_HIDE); m_GameClientView.m_btOutCard.EnableWindow(FALSE); m_GameClientView.m_btPassCard.ShowWindow(SW_HIDE); m_GameClientView.m_btPassCard.EnableWindow(FALSE); m_GameClientView.m_btOutPrompt.ShowWindow(SW_HIDE); m_GameClientView.m_btOutPrompt.EnableWindow(FALSE); //发送数据 SendData(SUB_C_PASS_CARD); //预先显示 m_GameClientView.m_UserCardControl[2].SetCardData(NULL,0); m_GameClientView.SetPassFlag(2,true); PlayGameSound(AfxGetInstanceHandle(),TEXT("OUT_CARD")); m_GameClientView.m_HandCardControl.SetCardData(m_bHandCardData,m_bHandCardCount); return 0; }
//设置定时器 bool __cdecl CClientKernel::SetGameTimer(WORD wChairID, UINT nTimerID, UINT nElapse) { //效验参数 ASSERT(m_hWnd!=NULL); ASSERT(m_pIClientKernelSink!=NULL); if (m_pIClientKernelSink==NULL) return false; //逻辑处理 if (m_nTimerID!=0L) KillGameTimer(m_nTimerID); if ((wChairID<m_ServerAttribute.wChairCount)&&(nElapse>0L)) { //设置变量 m_nTimerID=nTimerID; m_nElapseCount=nElapse; m_wTimerChairID=wChairID; //设置界面 SetTimer(nTimerID,1000,NULL); m_pIClientKernelSink->OnEventTimer(m_wTimerChairID,nElapse,nTimerID); return true; } return false; }
//时间消息 bool CGameClientDlg::OnTimerMessage(WORD wChairID, UINT nElapse, UINT nTimerID) { switch(nTimerID) { case IDI_START_GAME: { if (nElapse==0) { if ((IsLookonMode()==false)&&(wChairID==GetMeChairID())) PostMessage(WM_CLOSE,0,0); return true; } if ((nElapse<=3)&&(wChairID==GetMeChairID())&&(IsLookonMode()==false)) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); return true; } case IDI_USER_ADD_SCORE: { if (nElapse==0) { if ((IsLookonMode()==false)&&(wChairID==GetMeChairID())) { //删除定时器 KillGameTimer(IDI_USER_ADD_SCORE); OnGiveUp(0,0); } return true; } if ((nElapse<=3)&&(wChairID==GetMeChairID())&&(IsLookonMode()==false)) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); return true; } } return false; }
//重置框架 void CGameClientDlg::ResetGameFrame() { //游戏变量 m_bHandCardCount=0; m_bHintCardCount=0; memset(m_bCardCount,0,sizeof(m_bCardCount)); memset(m_bHandCardData,0,sizeof(m_bHandCardData)); //出牌变量 m_bTurnCardCount=0; m_bTurnOutType=CT_INVALID; memset(m_bTurnCardData,0,sizeof(m_bTurnCardData)); memset(m_bHandCardData,0,sizeof(m_bHintCardData)); //辅助变量 m_wTimeOutCount=0; m_wMostUser=INVALID_CHAIR; //删除定时 KillGameTimer(0); KillTimer(IDI_MOST_CARD); return; }
//开始按钮 LRESULT CGameClientDlg::OnStart(WPARAM wParam, LPARAM lParam) { //设置变量 m_wTimeOutCount=0; m_bHandCardCount=0; m_bTurnCardCount=0; m_bTurnOutType=CT_ERROR; m_wMostUser=INVALID_CHAIR; memset(m_bHandCardData,0,sizeof(m_bHandCardData)); memset(m_bTurnCardData,0,sizeof(m_bTurnCardData)); //设置界面 KillGameTimer(IDI_START_GAME); m_GameClientView.SetCardCount(INVALID_CHAIR,0); m_GameClientView.SetPassFlag(INVALID_CHAIR,false); //隐藏控件 m_GameClientView.m_btStart.ShowWindow(FALSE); m_GameClientView.m_ScoreView.ShowWindow(SW_HIDE); //设置扑克 m_GameClientView.m_HandCardControl.SetCardData(NULL,0); m_GameClientView.m_HandCardControl.SetPositively(false); m_GameClientView.m_LeaveCardControl[0].SetCardData(NULL,0); m_GameClientView.m_LeaveCardControl[1].SetCardData(NULL,0); m_GameClientView.m_LeaveCardControl[2].SetCardData(NULL,0); for (WORD i=0;i<GAME_PLAYER;i++) m_GameClientView.m_UserCardControl[i].SetCardData(NULL,0); //发送消息 SendUserReady(NULL,0); return 0; }
//出牌消息 LRESULT CGameClientDlg::OnOutCard(WPARAM wParam, LPARAM lParam) { //状态判断 if ((m_GameClientView.m_btOutCard.IsWindowEnabled()==FALSE) ||(m_GameClientView.m_btOutCard.IsWindowVisible()==FALSE)) return 0; //设置界面 KillGameTimer(IDI_OUT_CARD); m_GameClientView.m_btOutCard.ShowWindow(SW_HIDE); m_GameClientView.m_btOutCard.EnableWindow(FALSE); m_GameClientView.m_btPassCard.ShowWindow(SW_HIDE); m_GameClientView.m_btPassCard.EnableWindow(FALSE); m_GameClientView.m_btOutPrompt.ShowWindow(SW_HIDE); m_GameClientView.m_btOutPrompt.EnableWindow(FALSE); //发送数据 CMD_C_OutCard OutCard; OutCard.bCardCount=(BYTE)m_GameClientView.m_HandCardControl.GetShootCard(OutCard.bCardData,CountArray(OutCard.bCardData)); m_GameLogic.SortCardList(OutCard.bCardData,OutCard.bCardCount); SendData(SUB_C_OUT_CART,&OutCard,sizeof(OutCard)-sizeof(OutCard.bCardData)+OutCard.bCardCount*sizeof(BYTE)); //预先显示 PlayGameSound(AfxGetInstanceHandle(),TEXT("OUT_CARD")); m_GameClientView.m_UserCardControl[2].SetCardData(OutCard.bCardData,OutCard.bCardCount); //预先删除 BYTE bSourceCount=m_bHandCardCount; m_bHandCardCount-=OutCard.bCardCount; m_GameLogic.RemoveCard(OutCard.bCardData,OutCard.bCardCount,m_bHandCardData,bSourceCount); m_GameClientView.m_HandCardControl.SetCardData(m_bHandCardData,m_bHandCardCount); return 0; }
//加注按钮 LRESULT CGameClientDlg::OnAddScore(WPARAM wParam, LPARAM lParam) { //取消按钮 if( lParam == -1 ) { UpdateScoreControl(); return 0; } else if( lParam == 0 ) { //不加或跟注 return OnFollow(0,0); } //获取筹码 WORD wMeChairID=GetMeChairID(); LONG lCurrentScore=m_lTurnLessScore-m_lTableScore[wMeChairID*2+1]+m_lCellScore*(lParam); //加注设置 m_bAddScore=true; HideScoreControl(); m_GameClientView.m_PlayerJeton[2].SetScore(lCurrentScore); //界面设置 KillGameTimer(IDI_USER_ADD_SCORE); m_GameClientView.UpdateGameView(NULL); PlayGameSound(AfxGetInstanceHandle(),TEXT("ADD_SCORE")); //发送消息 CMD_C_AddScore AddScore; AddScore.lScore=lCurrentScore; SendData(SUB_C_ADD_SCORE,&AddScore,sizeof(AddScore)); return 0; }
//用户放弃 bool CGameClientDlg::OnSubGiveUp(const void * pBuffer, WORD wDataSize) { //效验数据 if (wDataSize!=sizeof(CMD_S_GiveUp)) return false; CMD_S_GiveUp * pGiveUp=(CMD_S_GiveUp *)pBuffer; //设置变量 m_cbPlayStatus[pGiveUp->wGiveUpUser]=FALSE; //变量定义 WORD wGiveUpUser=pGiveUp->wGiveUpUser; BYTE cbCardData[MAX_COUNT]={0,0,0,0,0}; WORD wViewChairID=SwitchViewChairID(wGiveUpUser); BYTE cbCardCount=(BYTE)m_GameClientView.m_CardControl[wViewChairID].GetCardCount(); //设置扑克 m_GameClientView.m_CardControl[wViewChairID].SetPositively(false); m_GameClientView.m_CardControl[wViewChairID].SetDisplayHead(false); m_GameClientView.m_CardControl[wViewChairID].SetCardData(cbCardData,cbCardCount); //状态设置 if ((IsLookonMode()==false)&&(pGiveUp->wGiveUpUser==GetMeChairID())) { HideScoreControl(); SetGameStatus(GS_FREE); } //环境设置 if (wGiveUpUser==GetTimeChairID()) KillGameTimer(IDI_USER_ADD_SCORE); if ((IsLookonMode()==true)||(wGiveUpUser!=GetMeChairID())) PlayGameSound(AfxGetInstanceHandle(),TEXT("GIVE_UP")); return true; }
//自动出牌 bool CGameClientDlg::AutomatismOutCard() { //先出牌者 if (m_bTurnCardCount==0) { //控制界面 KillGameTimer(IDI_OUT_CARD); m_GameClientView.m_btOutCard.ShowWindow(SW_HIDE); m_GameClientView.m_btOutCard.EnableWindow(FALSE); m_GameClientView.m_btPassCard.ShowWindow(SW_HIDE); m_GameClientView.m_btPassCard.EnableWindow(FALSE); m_GameClientView.m_btAutoOutCard.ShowWindow(SW_HIDE); m_GameClientView.m_btAutoOutCard.EnableWindow(FALSE); //发送数据 CMD_C_OutCard OutCard; OutCard.bCardCount=1; OutCard.bCardData[0]=m_bHandCardData[m_bHandCardCount-1]; SendData(SUB_C_OUT_CART,&OutCard,sizeof(OutCard)-sizeof(OutCard.bCardData)+OutCard.bCardCount*sizeof(BYTE)); //预先处理 PlayGameSound(AfxGetInstanceHandle(),TEXT("OUT_CARD")); m_GameClientView.m_UserCardControl[1].SetCardData(OutCard.bCardData,OutCard.bCardCount); //预先删除 BYTE bSourceCount=m_bHandCardCount; m_bHandCardCount-=OutCard.bCardCount; m_GameLogic.RemoveCard(OutCard.bCardData,OutCard.bCardCount,m_bHandCardData,bSourceCount); m_GameClientView.m_HandCardControl.SetCardData(m_bHandCardData,m_bHandCardCount); } else OnPassCard(0,0); return true; }
//用户叫庄 bool CGameClientDlg::OnSubCallBanker(const void * pBuffer, WORD wDataSize) { //效验数据 if (wDataSize!=sizeof(CMD_S_CallBanker)) return false; CMD_S_CallBanker * pCallBanker=(CMD_S_CallBanker *)pBuffer; //首次叫庄 if(pCallBanker->bFirstTimes) { //用户信息 for (WORD i=0;i<GAME_PLAYER;i++) { //视图位置 m_wViewChairID[i]=SwitchViewChairID(i); //获取用户 const tagUserData * pUserData=GetUserData(i); if (pUserData==NULL) continue; //游戏信息 m_cbPlayStatus[i]=TRUE; //用户名字 lstrcpyn(m_szAccounts[i],pUserData->szName,CountArray(m_szAccounts[i])); } //旁观者清理数据 if (IsLookonMode()) OnStart(0,0); } //删除定时器/按钮 if(m_GameClientView.m_btIdler.IsWindowVisible()==TRUE) { KillGameTimer(IDI_CALL_BANKER); m_GameClientView.m_btIdler.ShowWindow(SW_HIDE); m_GameClientView.m_btBanker.ShowWindow(SW_HIDE); } //用户控件显示 if(IsCurrentUser(pCallBanker->wCallBanker)) { m_GameClientView.m_btBanker.ShowWindow(SW_SHOW); m_GameClientView.m_btIdler.ShowWindow(SW_SHOW); } //等待标志 WORD wViewID=m_wViewChairID[pCallBanker->wCallBanker]; m_GameClientView.SetWaitCall((BYTE)wViewID); //实际定时器 if(pCallBanker->wCallBanker==GetMeChairID()) { SetGameTimer(pCallBanker->wCallBanker,IDI_CALL_BANKER,TIME_USER_CALL_BANKER); } else SetGameTimer(pCallBanker->wCallBanker,IDI_NULLITY,TIME_USER_CALL_BANKER); return true; }
//放弃出牌 bool CGameClientDlg::OnSubPassCard(const void * pBuffer, WORD wDataSize) { //效验数据 if (wDataSize!=sizeof(CMD_S_PassCard)) return false; CMD_S_PassCard * pPassCard=(CMD_S_PassCard *)pBuffer; //删除定时器 KillGameTimer(IDI_OUT_CARD); //玩家设置 if ((IsLookonMode()==true)||(pPassCard->wPassUser!=GetMeChairID())) { WORD wViewChairID=SwitchViewChairID(pPassCard->wPassUser); m_GameClientView.SetPassFlag(wViewChairID,true); m_GameClientView.m_UserCardControl[wViewChairID].SetCardData(NULL,0); } //一轮判断 if (pPassCard->bNewTurn==TRUE) { m_bTurnCardCount=0; m_bTurnOutType=CT_ERROR; memset(m_bTurnCardData,0,sizeof(m_bTurnCardData)); } //设置界面 WORD wViewChairID=SwitchViewChairID(pPassCard->wCurrentUser); m_GameClientView.SetPassFlag(wViewChairID,false); m_GameClientView.m_UserCardControl[wViewChairID].SetCardData(NULL,0); //玩家设置 if ((IsLookonMode()==false)&&(pPassCard->wCurrentUser==GetMeChairID())) { ActiveGameFrame(); m_GameClientView.m_btOutCard.ShowWindow(SW_SHOW); m_GameClientView.m_btPassCard.ShowWindow(SW_SHOW); m_GameClientView.m_btOutPrompt.ShowWindow(SW_SHOW); m_GameClientView.m_btPassCard.EnableWindow((m_bTurnCardCount>0)?TRUE:FALSE); m_GameClientView.m_btOutCard.EnableWindow((VerdictOutCard()==true)?TRUE:FALSE); m_GameClientView.m_btOutPrompt.EnableWindow(m_bTurnCardCount>0?TRUE:FALSE); } //播放声音 if ((IsLookonMode()==true)||(pPassCard->wPassUser!=GetMeChairID())) PlayGameSound(AfxGetInstanceHandle(),TEXT("OUT_CARD")); //设置时间 if (m_bTurnCardCount!=0) { WORD wTimeCount=30; if (m_GameClientView.m_btPassCard.IsWindowEnabled()) wTimeCount=10; SetGameTimer(pPassCard->wCurrentUser,IDI_OUT_CARD,wTimeCount); } else SetGameTimer(pPassCard->wCurrentUser,IDI_OUT_CARD,30); return true; }
//时间消息 bool CGameClientDlg::OnTimerMessage(WORD wChairID, UINT nElapse, UINT nTimerID) { switch (nTimerID) { case IDI_START_GAME: //开始定时器 { //中止判断 if (nElapse==0) { PostMessage(WM_CLOSE,0,0); return false; } //警告通知 //if (nElapse<=5) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); if(nElapse%5==0) { if(!IsEnableSound()) m_DTSDBackground.Stop(); } return true; } case IDI_NULLITY: //过滤时器 { //中止判断 if (nElapse==0) { KillGameTimer(IDI_NULLITY); return false; } //警告通知 //if (nElapse<=5) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); return true; } case IDI_CALL_BANKER: //叫庄定时 { //中止判断 if (nElapse==0) { //测试代码 //放弃做庄 OnBanker(0,0); return false; } //警告通知 //if (nElapse<=5) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); return true; } } return false; }
//游戏开始 bool CGameClientDlg::OnSubGameStart(const void * pBuffer, WORD wDataSize) { //效验数据 if (wDataSize!=sizeof(CMD_S_GameStart)) return false; CMD_S_GameStart * pGameStart=(CMD_S_GameStart *)pBuffer; //删除定时器/按钮 if(m_GameClientView.m_btIdler.IsWindowVisible()==TRUE) { KillGameTimer(IDI_CALL_BANKER); m_GameClientView.m_btIdler.ShowWindow(SW_HIDE); m_GameClientView.m_btBanker.ShowWindow(SW_HIDE); } //设置变量 m_lTurnMaxScore=pGameStart->lTurnMaxScore; m_wBankerUser=pGameStart->wBankerUser; m_GameClientView.SetWaitCall(0xff); //设置筹码 if (!IsLookonMode() && pGameStart->lTurnMaxScore>0) { LONGLONG lUserMaxScore[GAME_PLAYER]; ZeroMemory(lUserMaxScore,sizeof(lUserMaxScore)); LONGLONG lTemp=m_lTurnMaxScore; for (WORD i=0;i<GAME_PLAYER;i++) { if(i>0)lTemp/=2; lUserMaxScore[i]=__max(lTemp,1L); } //更新控件 //ActiveGameFrame(); UpdateScoreControl(lUserMaxScore,SW_SHOW); //实际定时器 SetTimer(IDI_TIME_USER_ADD_SCORE,(TIME_USER_ADD_SCORE)*1000,NULL); } //庄家标志 WORD wID=m_wViewChairID[m_wBankerUser]; m_GameClientView.SetBankerUser(wID); //等待标志 m_GameClientView.SetWaitInvest(true); //辅助显示中心时钟 SetGameTimer(GetMeChairID(),IDI_NULLITY,TIME_USER_ADD_SCORE); //环境设置 PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_START")); return true; }
//放弃按钮 LRESULT CGameClientDlg::OnGiveUp(WPARAM wParam, LPARAM lParam) { //界面设置 KillGameTimer(IDI_USER_ADD_SCORE); PlayGameSound(AfxGetInstanceHandle(),TEXT("GIVE_UP")); //发送消息 SendData(SUB_C_GIVE_UP); HideScoreControl(); return 0; }
//析构函数 CAndroidUserItem::~CAndroidUserItem() { //删除时间 KillGameTimer(0); //释放对象 if (m_pIAndroidUserItemSink!=NULL) { m_pIAndroidUserItemSink->Release(); m_pIAndroidUserItemSink=NULL; } return; }
//用户出牌 bool CGameClientDlg::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)) { //环境设置 KillGameTimer(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; }
//时间消息 void CClientKernel::OnTimer(UINT nIDEvent) { //时间处理 if ((m_nTimerID==nIDEvent)&&(m_wTimerChairID!=INVALID_CHAIR)) { //消息处理 if (m_nElapseCount>0) m_nElapseCount--; bool bSuccess=m_pIClientKernelSink->OnEventTimer(m_wTimerChairID,m_nElapseCount,m_nTimerID); if ((m_nElapseCount==0)||(bSuccess==false)) KillGameTimer(m_nTimerID); return; } __super::OnTimer(nIDEvent); }
//出牌操作 LRESULT CGameClientDlg::OnOutCard(WPARAM wParam, LPARAM lParam) { //出牌判断 if ((IsLookonMode()==true)||(m_wCurrentUser!=GetMeChairID())) return 0; //听牌判断 if (((m_bHearStatus==true)||(m_bWillHearStatus==true))&&(VerdictOutCard((BYTE)wParam)==false)) { InsertSystemString(TEXT("出此牌不符合游戏规则!")); return 0; } //听牌设置 if (m_bWillHearStatus==true) { m_bHearStatus=true; m_bWillHearStatus=false; } //设置变量 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); //设置界面 KillGameTimer(IDI_OPERATE_CARD); m_GameClientView.UpdateGameView(NULL); m_GameClientView.SetStatusFlag(false,false); m_GameClientView.SetUserAction(INVALID_CHAIR,0); m_GameClientView.SetOutCardInfo(2,cbOutCardData); m_GameClientView.m_ControlWnd.ShowWindow(SW_HIDE); //播放声音 PlayCardSound(GetMeChairID(),cbOutCardData); //发送数据 CMD_C_OutCard OutCard; OutCard.cbCardData=cbOutCardData; SendData(SUB_C_OUT_CARD,&OutCard,sizeof(OutCard)); return 0; }
//叫分消息 LRESULT CGameClientDlg::OnLandScore(WPARAM wParam, LPARAM lParam) { //设置界面 KillGameTimer(IDI_LAND_SCORE); m_GameClientView.m_btOneScore.ShowWindow(SW_HIDE); m_GameClientView.m_btTwoScore.ShowWindow(SW_HIDE); m_GameClientView.m_btThreeScore.ShowWindow(SW_HIDE); m_GameClientView.m_btGiveUpScore.ShowWindow(SW_HIDE); //发送数据 CMD_C_LandScore LandScore; LandScore.bLandScore=(BYTE)wParam; SendData(SUB_C_LAND_SCORE,&LandScore,sizeof(LandScore)); return 0; }
//让牌消息 LRESULT CGameClientDlg::OnPassCard(WPARAM wParam,LPARAM lParam) { //删除定时器 KillGameTimer(IDI_USER_ADD_SCORE); HideScoreControl(); //发送消息 CMD_C_AddScore AddScore; AddScore.lScore=0L; SendData(SUB_C_ADD_SCORE,&AddScore,sizeof(AddScore)); //声音效果 PlayGameSound(AfxGetInstanceHandle(),TEXT("NO_ADD")); return 0; }
//做庄信息 LRESULT CGameClientDlg::OnBanker(WPARAM wParam, LPARAM lParam) { //删除定时器 KillGameTimer(IDI_CALL_BANKER); //控件处理 m_GameClientView.m_btBanker.ShowWindow(SW_HIDE); m_GameClientView.m_btIdler.ShowWindow(SW_HIDE); //设置变量 CMD_C_CallBanker CallBanker; CallBanker.bBanker = (BYTE)wParam; //发送信息 SendData(SUB_C_CALL_BANKER,&CallBanker,sizeof(CallBanker)); return 0; }
//关闭游戏 VOID CAndroidUserItem::CloseGameClient() { //状态判断 ASSERT((m_bStartClient==true)&&(m_pIServerUserItem!=NULL)); ASSERT((m_pIServerUserItem->GetTableID()==INVALID_TABLE)&&(m_pIServerUserItem->GetChairID()==INVALID_CHAIR)); //删除时间 KillGameTimer(0); //设置变量 m_bStartClient=false; m_cbGameStatus=GS_FREE; //游戏复位 if (m_pIAndroidUserItemSink!=NULL) m_pIAndroidUserItemSink->RepositUserItemSink(); return; }
//发牌消息 bool CGameClientDlg::OnSubSendCard(const void * pBuffer, WORD wDataSize) { //效验数据 if (wDataSize!=sizeof(CMD_S_SendCard)) return false; CMD_S_SendCard * pSendCard=(CMD_S_SendCard *)pBuffer; //删除定时器 KillGameTimer(IDI_NULLITY); m_GameClientView.SetWaitInvest(false); CopyMemory(m_cbHandCardData,pSendCard->cbCardData,sizeof(m_cbHandCardData)); WORD wMeChiarID=GetMeChairID(); WORD wViewChairID=m_wViewChairID[wMeChiarID]; if(IsAllowLookon() || !IsLookonMode()) { m_GameClientView.m_CardControl[wViewChairID].SetDisplayFlag(true); } //派发扑克 for(WORD i=0;i<MAX_COUNT;i++) { for (WORD j=m_wBankerUser;j<m_wBankerUser+GAME_PLAYER;j++) { WORD w=j%GAME_PLAYER; if (m_cbPlayStatus[w]==TRUE) { WORD wViewChairID=m_wViewChairID[w]; if(pSendCard->cbCardData[w][i]!=0) { m_GameClientView.DispatchUserCard(wViewChairID,m_cbHandCardData[w][i]); } } } } //结束动画-去掉发牌动画 m_GameClientView.FinishDispatchCard(); return true; }
//扣牌消息 LRESULT CGameClientDlg::OnKouPai(WPARAM wParam, LPARAM lParam) { //设置界面 KillGameTimer(IDI_LAND_SCORE); m_GameClientView.m_btKouPai.EnableWindow(false); m_GameClientView.m_btXianPai.EnableWindow(SW_HIDE); m_GameClientView.m_btQiangCi.EnableWindow(SW_HIDE); m_GameClientView.m_btGiveUpCiangCi.EnableWindow(SW_HIDE); m_GameClientView.m_btAutoOutCard.ShowWindow(SW_HIDE); m_GameClientView.m_btOutCard.ShowWindow(SW_HIDE); m_GameClientView.m_btPassCard.ShowWindow(SW_HIDE); ////发送数据 //CMD_C_CouPai CouPai; /*LandScore.bLandScore=(BYTE)wParam;*/ //发送消息 SendData(SUB_C_COUPAI); return 0; }
//开始按钮 LRESULT CGameClientDlg::OnStart(WPARAM wParam, LPARAM lParam) { //游戏变量 m_wBlackUser=INVALID_CHAIR; m_wCurrentUser=INVALID_CHAIR; memset(m_wLeftClock,0,sizeof(m_wLeftClock)); //设置界面 m_GameClientView.m_ChessBorad.CleanChess(); m_GameClientView.m_btStart.EnableWindow(FALSE); m_GameClientView.m_btPreserve.EnableWindow(FALSE); m_GameClientView.m_GameScoreWnd.ShowWindow(SW_HIDE); //发送消息 SendUserReady(NULL,0); //关闭时间 KillGameTimer(IDI_START_GAME) ; return 0; }
//梭哈消息 LRESULT CGameClientDlg::OnShowHand(WPARAM wParam,LPARAM lParam) { //构造数据 ShowHand ShowHandObj; //配置数据 if (ShowHandObj.DoModal()==IDOK) { for(BYTE i=0;i<GAME_PLAYER;i++) { const tagUserData * pUserData = GetUserData(i); if(pUserData!=NULL && pUserData->cbUserStatus==US_PLAY)break; } if(i<GAME_PLAYER) { //删除定时器 KillGameTimer(IDI_USER_ADD_SCORE); //获取筹码 WORD wMeChairID=GetMeChairID(); m_lTableScore[GetMeChairID()] +=m_lTurnMaxScore; m_lTotalScore[GetMeChairID()] += m_lTurnMaxScore; m_GameClientView.SetTotalScore(GetMeChairID(),m_lTotalScore[GetMeChairID()]); m_GameClientView.SetUserTableScore(GetMeChairID(),m_lTableScore[GetMeChairID()]); m_GameClientView.UpdateGameView(NULL); HideScoreControl(); //发送消息 CMD_C_AddScore AddScore; AddScore.lScore=m_lTurnMaxScore; SendData(SUB_C_ADD_SCORE,&AddScore,sizeof(AddScore)); //声音效果 PlayGameSound(AfxGetInstanceHandle(),TEXT("SHOW_HAND")); } } return 0; }