//加注按钮 LRESULT CGameClientDlg::OnAddScore(WPARAM wParam, LPARAM lParam) { //删除定时器 KillTimer(IDI_TIME_USER_ADD_SCORE); //获取筹码 WORD wMeChairID=GetMeChairID(); BYTE bTemp=(BYTE)wParam; LONGLONG lCurrentScore=0; if(bTemp==1)lCurrentScore=__max(m_lTurnMaxScore/8,1L); else if(bTemp==2)lCurrentScore=__max(m_lTurnMaxScore/4,1L); else if(bTemp==3)lCurrentScore=__max(m_lTurnMaxScore/2,1L); else if(bTemp==4)lCurrentScore=__max(m_lTurnMaxScore,1L); //控制按钮 UpdateScoreControl(NULL,SW_HIDE); //界面设置 m_lTableScore[wMeChairID]=lCurrentScore; m_GameClientView.SetUserTableScore(m_wViewChairID[wMeChairID],m_lTableScore[wMeChairID]); PlayGameSound(AfxGetInstanceHandle(),TEXT("ADD_SCORE")); //发送消息 CMD_C_AddScore AddScore; AddScore.lScore=lCurrentScore; SendData(SUB_C_ADD_SCORE,&AddScore,sizeof(AddScore)); return 0; }
//用户下注 bool CGameClientDlg::OnSubAddScore(const void * pBuffer, WORD wDataSize) { //效验数据 if (wDataSize!=sizeof(CMD_S_AddScore)) return false; CMD_S_AddScore * pAddScore=(CMD_S_AddScore *)pBuffer; //删除定时器/控制按钮 if(IsCurrentUser(pAddScore->wAddScoreUser) && m_GameClientView.m_btOneScore.IsWindowVisible()==TRUE) { KillTimer(IDI_TIME_USER_ADD_SCORE); UpdateScoreControl(NULL,SW_HIDE); } //变量定义 WORD wAddScoreUser=pAddScore->wAddScoreUser; WORD wViewChairID=m_wViewChairID[wAddScoreUser]; //加注界面 m_lTableScore[pAddScore->wAddScoreUser]=pAddScore->lAddScoreCount; m_GameClientView.SetUserTableScore(wViewChairID,pAddScore->lAddScoreCount); //播放声音 if (!IsCurrentUser(pAddScore->wAddScoreUser) && m_cbPlayStatus[wAddScoreUser]==TRUE) PlayGameSound(AfxGetInstanceHandle(),TEXT("ADD_SCORE")); return true; }
//加注按钮 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::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::OnSendFinish(WPARAM wParam,LPARAM lParam) { //控制界面 if ((IsLookonMode()==false)&&(m_wCurrentUser==GetMeChairID())) { ActiveGameFrame(); UpdateScoreControl(); } if(m_wCurrentUser<GAME_PLAYER) { SetGameTimer(m_wCurrentUser,IDI_USER_ADD_SCORE,TIME_USER_ADD_SCORE); } return 0; }
//发牌完成 LRESULT CGameClientDlg::OnSendCardFinish(WPARAM wParam, LPARAM lParam) { //状态判断 if (m_wCurrentUser==INVALID_CHAIR) return 0; //加注状态 if ((IsLookonMode()==false)&&(GetMeChairID()==m_wCurrentUser)) { //界面设置 ActiveGameFrame(); UpdateScoreControl(); } //设置时间 SetGameTimer(m_wCurrentUser,IDI_USER_ADD_SCORE,TIME_USER_ADD_SCORE); return 0; }
//定时操作 void CGameClientDlg::OnTimer(UINT nIDEvent) { switch(nIDEvent) { case IDI_TIME_USER_ADD_SCORE: { //测试代码 //m_GameClientView.m_btOpenCard.ShowWindow(SW_SHOW); //删除定时器 KillTimer(IDI_TIME_USER_ADD_SCORE); //获取位置 WORD wMeChairID=GetMeChairID(); WORD wViewChairID=m_wViewChairID[wMeChairID]; //控制按钮 UpdateScoreControl(NULL,SW_HIDE); //发送消息 CMD_C_AddScore AddScore; AddScore.lScore=__max(m_lTurnMaxScore/8,1L); SendData(SUB_C_ADD_SCORE,&AddScore,sizeof(AddScore)); //界面设置 m_lTableScore[wMeChairID]=AddScore.lScore; m_GameClientView.SetUserTableScore(wViewChairID,m_lTableScore[wMeChairID]); PlayGameSound(AfxGetInstanceHandle(),TEXT("ADD_SCORE")); return; } case IDI_TIME_OPEN_CARD: { //删除定时器 KillTimer(IDI_TIME_OPEN_CARD); //摊牌 OnOpenCard(0,0); return; } } CGameFrameDlg::OnTimer(nIDEvent); }
//游戏场景 bool CGameClientDlg::OnGameSceneMessage(BYTE cbGameStation, bool bLookonOther, const void * pBuffer, WORD wDataSize) { //显示用户 m_GameClientView.SetShowUserView(TRUE); //物理位置 m_wMeChairID = GetMeChairID(); for(WORD i=0;i<GAME_PLAYER;i++) { m_GameClientView.SetUserPost(i,SwitchViewChairID(i)); m_GameClientView.SetMePost(m_wMeChairID); } switch (cbGameStation) { case GS_FREE: //空闲状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusFree)) return false; CMD_S_StatusFree * pStatusFree=(CMD_S_StatusFree *)pBuffer; //设置状态 SetGameStatus(GS_FREE); //下注信息 m_GameClientView.SetTitleInfo(pStatusFree->lCellMinScore,pStatusFree->lCellMaxScore); //设置控件 if (IsLookonMode()==false) { m_GameClientView.m_btStart.ShowWindow(SW_SHOW); m_GameClientView.m_btStart.SetFocus(); m_GameClientView.m_btExit.ShowWindow(SW_SHOW); m_GameClientView.m_btAutoStart.ShowWindow(SW_SHOW); } //设置时间 SetGameTimer(GetMeChairID(),IDI_START_GAME,TIME_START_GAME); //旁观设置 OnLookonChanged(bLookonOther,NULL,0); return true; } case GS_PLAYING: //游戏状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusPlay)) return false; CMD_S_StatusPlay * pStatusPlay=(CMD_S_StatusPlay *)pBuffer; //设置状态 SetGameStatus(GS_PLAYING); //设置变量 m_wDUser = pStatusPlay->wDUser; m_wCurrentUser=pStatusPlay->wCurrentUser;//当前玩家 CopyMemory(m_lTableScore,pStatusPlay->lTableScore,sizeof(m_lTableScore));//下注数目 CopyMemory(m_lTotalScore,pStatusPlay->lTotalScore,sizeof(m_lTotalScore));//下注数目 CopyMemory(m_cbPlayStatus,pStatusPlay->cbPlayStatus,sizeof(m_cbPlayStatus));//用户游戏状态 //加注信息 m_lAddLessScore = pStatusPlay->lAddLessScore; m_lCellScore = pStatusPlay->lCellScore; m_lTurnMaxScore = pStatusPlay->lTurnMaxScore; m_lTurnLessScore= pStatusPlay->lTurnLessScore; m_lCenterScore = pStatusPlay->lCenterScore; CopyMemory(m_cbHandCardData[GetMeChairID()],pStatusPlay->cbHandCardData,MAX_COUNT); CopyMemory(m_cbCenterCardData,pStatusPlay->cbCenterCardData,sizeof(m_cbCenterCardData)); //设置扑克 if(!IsLookonMode()) { if(m_cbPlayStatus[GetMeChairID()]==TRUE) m_GameClientView.m_CardControl[GetMeChairID()].SetCardData(m_cbHandCardData[GetMeChairID()],MAX_COUNT); m_GameClientView.m_btAutoStart.ShowWindow(SW_SHOW); } //中心扑克 if(pStatusPlay->cbBalanceCount >0) { BYTE cbTempCount = pStatusPlay->cbBalanceCount+2; m_GameClientView.m_CenterCardControl.SetCardData(m_cbCenterCardData,min(cbTempCount,MAX_CENTERCOUNT)); } //设置界面 for (WORD i =0;i<GAME_PLAYER;i++) { if(m_cbPlayStatus[i] == FALSE)continue; m_GameClientView.m_SmallCardControl[i].SetCardData(MAX_COUNT); m_GameClientView.SetUserTableScore(i,m_lTableScore[i]); m_GameClientView.SetTotalScore(i,m_lTotalScore[i]); } m_GameClientView.SetDFlag(m_wDUser); m_GameClientView.SetTitleInfo(m_lCellScore,pStatusPlay->lCellMaxScore); m_GameClientView.SetCenterScore(m_lCenterScore); //更新界面 m_GameClientView.UpdateGameView(NULL); //当前玩家 if((IsLookonMode() == false)&&(m_wCurrentUser == GetMeChairID())) UpdateScoreControl(); //设置时间 SetGameTimer(m_wCurrentUser,IDI_USER_ADD_SCORE,TIME_USER_ADD_SCORE); //旁观设置 OnLookonChanged(bLookonOther,NULL,0); //坐下按钮 if(IsLookonMode()) { m_GameClientView.SetMyLookOn(GetMeChairID()); //更新界面 m_GameClientView.UpdateGameView(NULL); } return true; } } return false; }
//加注消息 bool CGameClientDlg::OnSubAddScore(const void * pBuffer, WORD wDataSize) { //效验数据 if (wDataSize!=sizeof(CMD_S_AddScore)) return false; CMD_S_AddScore * pAddScore=(CMD_S_AddScore *)pBuffer; //变量定义 WORD wMeChairID=GetMeChairID(); WORD wAddScoreUser=pAddScore->wAddScoreUser; //加注处理 if ((IsLookonMode()==true)||(pAddScore->wAddScoreUser!=wMeChairID)) { //加注界面 if(pAddScore->lAddScoreCount>0) { m_GameClientView.DrawMoveAnte(pAddScore->wAddScoreUser,CGameClientView::AA_BASEFROM_TO_BASEDEST,pAddScore->lAddScoreCount); //m_GameClientView.SetUserTableScore(pAddScore->wAddScoreUser,pAddScore->lAddScoreCount+m_lTableScore[pAddScore->wAddScoreUser]); m_lTotalScore[pAddScore->wAddScoreUser] += pAddScore->lAddScoreCount; m_GameClientView.SetTotalScore(pAddScore->wAddScoreUser,m_lTotalScore[pAddScore->wAddScoreUser]); m_lTableScore[pAddScore->wAddScoreUser] +=pAddScore->lAddScoreCount; } //播放声音 if (m_cbPlayStatus[wAddScoreUser]==TRUE) { //播放声音 if (pAddScore->lAddScoreCount==0L) PlayGameSound(AfxGetInstanceHandle(),TEXT("NO_ADD")); else if (pAddScore->lAddScoreCount==m_lTurnMaxScore) PlayGameSound(AfxGetInstanceHandle(),TEXT("SHOW_HAND")); else if ((pAddScore->lAddScoreCount)==m_lTurnLessScore) PlayGameSound(AfxGetInstanceHandle(),TEXT("FOLLOW")); else PlayGameSound(AfxGetInstanceHandle(),TEXT("ADD_SCORE")); } } //设置变量 m_wCurrentUser=pAddScore->wCurrentUser; m_lTurnLessScore=pAddScore->lTurnLessScore; m_lTurnMaxScore = pAddScore->lTurnMaxScore; m_lAddLessScore = pAddScore->lAddLessScore; //控制界面 if ((IsLookonMode()==false)&&(m_wCurrentUser==wMeChairID)) { ActiveGameFrame(); UpdateScoreControl(); } //设置时间 if (m_wCurrentUser==INVALID_CHAIR) { KillGameTimer(IDI_USER_ADD_SCORE); //一轮平衡 //中心积分累计 for (WORD i =0;i<GAME_PLAYER;i++) { m_lCenterScore += m_lTableScore[i]; } //筹码移动 for (WORD i =0;i<GAME_PLAYER;i++) { if(m_cbPlayStatus[i] == FALSE) continue; if(m_lTableScore[i]!=0L) { //m_GameClientView.SetUserTableScore(i,m_lTableScore[i]); m_GameClientView.DrawMoveAnte(i,CGameClientView::AA_BASEDEST_TO_CENTER,m_lTableScore[i]); m_GameClientView.SetUserTableScore(i,0L); } } //m_GameClientView.SetCenterScore(m_lCenterScore); ZeroMemory(m_lTableScore,sizeof(m_lTableScore)); m_GameClientView.UpdateGameView(NULL); m_GameClientView.UpdateWindow(); } else if(m_wCurrentUser<GAME_PLAYER)SetGameTimer(m_wCurrentUser,IDI_USER_ADD_SCORE,TIME_USER_ADD_SCORE); return true; }
//游戏结束 bool CGameClientDlg::OnSubGameEnd(const void * pBuffer, WORD wDataSize) { //效验参数 if (wDataSize!=sizeof(CMD_S_GameEnd)) return false; CMD_S_GameEnd * pGameEnd=(CMD_S_GameEnd *)pBuffer; //删除定时器 KillGameTimer(IDI_NULLITY); KillGameTimer(IDI_CALL_BANKER); KillTimer(IDI_TIME_USER_ADD_SCORE); KillTimer(IDI_TIME_OPEN_CARD); //清理数据 for(WORD i=0;i<GAME_PLAYER;i++) { m_GameClientView.ShowOpenCard(i,FALSE); } m_GameClientView.SetWaitInvest(false); UpdateScoreControl(NULL,SW_HIDE); m_GameClientView.m_btOx.ShowWindow(SW_HIDE); m_GameClientView.m_btHintOx.ShowWindow(SW_HIDE); m_GameClientView.m_btOpenCard.ShowWindow(SW_HIDE); m_GameClientView.m_btReSort.ShowWindow(SW_HIDE); m_GameClientView.m_btShortcut.ShowWindow(SW_HIDE); m_GameClientView.m_btBanker.ShowWindow(SW_HIDE); m_GameClientView.m_btIdler.ShowWindow(SW_HIDE); m_GameClientView.SetWaitCall(0xff); m_GameClientView.m_bOpenCard=false; //状态设置 SetGameStatus(GS_FREE); //播放声音 if (IsLookonMode()==false) { if (pGameEnd->lGameScore[GetMeChairID()]>0L) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WIN")); else PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_LOST")); } else PlayGameSound(GetModuleHandle(NULL),TEXT("GAME_END")); //显示积分 for (WORD i=0;i<GAME_PLAYER;i++) { if(GetUserData(i)!=NULL)m_GameClientView.ShowScore(m_wViewChairID[i],true); m_GameClientView.SetUserTableScore(m_wViewChairID[i],pGameEnd->lGameScore[i]); } m_GameClientView.m_ScoreView.ResetScore(); for (WORD i=0;i<GAME_PLAYER;i++) { //设置信息 if (pGameEnd->lGameScore[i]!=0L || i==m_wBankerUser) { m_GameClientView.m_ScoreView.SetGameTax(pGameEnd->lGameTax[i],i); if (m_szAccounts[i][0]=='#') m_GameClientView.m_ScoreView.SetGameScore(i,TEXT("已离开"),pGameEnd->lGameScore[i]); else m_GameClientView.m_ScoreView.SetGameScore(i,m_szAccounts[i],pGameEnd->lGameScore[i]); } } m_GameClientView.m_ScoreView.ShowWindow(SW_SHOW); //显示牌型 bool bOxSound=false; for (WORD i=0;i<GAME_PLAYER;i++) { WORD wViewChairID=m_wViewChairID[i]; if(i==GetMeChairID() && !IsLookonMode())continue; m_GameClientView.m_CardControl[wViewChairID].SetDisplayFlag(true); //牛牛牌型 if(m_cbHandCardData[i][0]>0) { if(m_bUserOxCard[i]==TRUE) { //扑克数据 BYTE bCardData[MAX_COUNT]; CopyMemory(bCardData,m_cbHandCardData[i],sizeof(bCardData)); //获取牛牛数据 m_GameLogic.GetOxCard(bCardData,MAX_COUNT); BYTE bCardValue=m_GameLogic.GetCardType(bCardData,MAX_COUNT); ASSERT(bCardValue>0); //加载数据 if(bCardValue<OX_THREE_SAME) { m_GameClientView.m_CardControl[wViewChairID].SetCardData(bCardData,3); m_GameClientView.m_CardControlOx[wViewChairID].SetCardData(&bCardData[3],2); } //显示点数 if(bCardValue>=10)bOxSound=true; m_GameClientView.SetUserOxValue(wViewChairID,bCardValue); } else { //无牛 m_GameClientView.SetUserOxValue(wViewChairID,0); } } } m_GameClientView.DisplayType(true); ////////////////////////////////////////////////////////////////////////// // WORD wMeChiarID = GetMeChairID(); // if(m_bUserOxCard[wMeChiarID]==TRUE)//牛牌分类 // { // //设置变量 // BYTE bTemp[MAX_COUNT]; // CopyMemory(bTemp,m_cbHandCardData[wMeChiarID],sizeof(bTemp)); // // //获取牛牌 // m_GameLogic.GetOxCard(bTemp,MAX_COUNT); // // //显示点数 // BYTE bValue=m_GameLogic.GetCardLogicValue(bTemp[3])+m_GameLogic.GetCardLogicValue(bTemp[4]); // ASSERT(bValue>0); // if(bValue>10) // bValue-=10; // if(bValue>=10)bOxSound=true; // else // bOxSound =false; // } // // //牛牛声音 // if (bOxSound) // { // if(GetUserData(GetMeChairID())->cbGender== 0) // PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_OXOX0")); // else // PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_OXOX1")); // } ////////////////////////////////////////////////////////////////////////// // //牛牛声音 // if(bOxSound) // { // PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_OXOX")); // } //开始按钮 if (IsLookonMode()==false) { m_GameClientView.m_btStart.ShowWindow(SW_SHOW); SetGameTimer(GetMeChairID(),IDI_START_GAME,TIME_USER_START_GAME); } //成绩显示在即时聊天对话框 TCHAR szBuffer[512]=TEXT(""); _snprintf(szBuffer,CountArray(szBuffer),TEXT("\n本局结束,成绩统计:")); InsertGeneralString(szBuffer,RGB(0,128,255),true); for (WORD i=0;i<GAME_PLAYER;i++) { //变量定义 const tagUserData * pUserData=GetUserData(i); //成绩输出 if (pUserData!=NULL) { _snprintf(szBuffer,CountArray(szBuffer),TEXT("%s:%+I64d"),pUserData->szName,pGameEnd->lGameScore[i]); InsertGeneralString(szBuffer,RGB(0,128,255),true); } else if(m_szAccounts[i][0]=='#') { _snprintf(szBuffer,CountArray(szBuffer),TEXT("%s:%+I64d"),TEXT("用户离开"),pGameEnd->lGameScore[i]); InsertGeneralString(szBuffer,RGB(0,128,255),true); } } //状态变量 m_wBankerUser=INVALID_CHAIR; ZeroMemory(m_szAccounts,sizeof(m_szAccounts)); ZeroMemory(m_cbPlayStatus,sizeof(m_cbPlayStatus)); return true; }
//游戏场景 bool CGameClientDlg::OnGameSceneMessage(BYTE cbGameStation, bool bLookonOther, const void * pBuffer, WORD wDataSize) { if(IsLookonMode())m_GameClientView.m_bLookOnUser=true; switch (cbGameStation) { case GS_FREE: //空闲状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusFree)) return false; CMD_S_StatusFree * pStatusFree=(CMD_S_StatusFree *)pBuffer; //设置控件 if (IsLookonMode()==false) { SetGameTimer(GetMeChairID(),IDI_START_GAME,TIME_USER_START_GAME); m_GameClientView.m_btStart.ShowWindow(SW_SHOW); m_GameClientView.m_btStart.SetFocus(); } return true; } case GS_TK_CALL: // 叫庄状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusCall)) return false; CMD_S_StatusCall * pStatusCall=(CMD_S_StatusCall *)pBuffer; //用户信息 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() && pStatusCall->wCallBanker==GetMeChairID()) { //控件显示 //ActiveGameFrame(); m_GameClientView.m_btBanker.ShowWindow(SW_SHOW); m_GameClientView.m_btIdler.ShowWindow(SW_SHOW); } //等待标志 WORD wViewID=m_wViewChairID[pStatusCall->wCallBanker]; m_GameClientView.SetWaitCall((BYTE)wViewID); //实际定时器 if(pStatusCall->wCallBanker==GetMeChairID()) { SetGameTimer(pStatusCall->wCallBanker,IDI_CALL_BANKER,TIME_USER_CALL_BANKER); } else SetGameTimer(pStatusCall->wCallBanker,IDI_NULLITY,TIME_USER_CALL_BANKER); return true; } case GS_TK_SCORE: //下注状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusScore)) return false; CMD_S_StatusScore * pStatusScore=(CMD_S_StatusScore *)pBuffer; //设置变量 m_lTurnMaxScore=pStatusScore->lTurnMaxScore; m_wBankerUser=pStatusScore->wBankerUser; CopyMemory(m_lTableScore,pStatusScore->lTableScore,sizeof(m_lTableScore)); for (WORD i=0;i<GAME_PLAYER;i++) { //视图位置 m_wViewChairID[i]=SwitchViewChairID(i); //桌面筹码 if(m_lTableScore[i]>0L)m_GameClientView.SetUserTableScore(m_wViewChairID[i],m_lTableScore[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() && pStatusScore->lTurnMaxScore>0L && m_lTableScore[GetMeChairID()]==0L) { 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); } //更新控件 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); return true; } case GS_TK_PLAYING: //游戏状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusPlay)) return false; CMD_S_StatusPlay * pStatusPlay=(CMD_S_StatusPlay *)pBuffer; //设置变量 m_lTurnMaxScore=pStatusPlay->lTurnMaxScore; m_wBankerUser=pStatusPlay->wBankerUser; CopyMemory(m_lTableScore,pStatusPlay->lTableScore,sizeof(m_lTableScore)); CopyMemory(m_bUserOxCard,pStatusPlay->bOxCard,sizeof(m_bUserOxCard)); for (WORD i=0;i<GAME_PLAYER;i++) { //视图位置 m_wViewChairID[i]=SwitchViewChairID(i); //桌面筹码 if(m_lTableScore[i]>0L)m_GameClientView.SetUserTableScore(m_wViewChairID[i],m_lTableScore[i]); //获取用户 const tagUserData * pUserData=GetUserData(i); if (pUserData==NULL) continue; //游戏信息 m_cbPlayStatus[i]=TRUE; //扑克数据 CopyMemory(m_cbHandCardData[i],pStatusPlay->cbHandCardData[i],MAX_COUNT); //用户名字 lstrcpyn(m_szAccounts[i],pUserData->szName,CountArray(m_szAccounts[i])); } //庄家标志 WORD wID=m_wViewChairID[m_wBankerUser]; m_GameClientView.SetBankerUser(wID); //左上信息 //m_GameClientView.SetScoreInfo(m_lTurnMaxScore,0); //设置界面 LONGLONG lTableScore=0L; for (WORD i=0;i<GAME_PLAYER;i++) { //设置位置 WORD wViewChairID=m_wViewChairID[i]; //设置扑克 if (m_cbPlayStatus[i]==TRUE) { m_GameClientView.m_CardControl[wViewChairID].SetCardData(pStatusPlay->cbHandCardData[i],MAX_COUNT); } } WORD wMeChiarID=GetMeChairID(); WORD wViewChairID=m_wViewChairID[wMeChiarID]; if(!IsLookonMode())m_GameClientView.m_CardControl[wViewChairID].SetPositively(true); if(IsAllowLookon() || !IsLookonMode()) { m_GameClientView.m_CardControl[wViewChairID].SetDisplayFlag(true); } //摊牌标志 for (WORD i=0;i<GAME_PLAYER;i++) { if(m_bUserOxCard[i]!=0xff) { m_GameClientView.ShowOpenCard(m_wViewChairID[i]); } } //控件处理 if(!IsLookonMode()) { //显示控件 if(m_bUserOxCard[wMeChiarID]==0xff) { OnSendCardFinish(0,0); } else { m_GameClientView.m_CardControl[wViewChairID].SetPositively(false); if(m_bUserOxCard[wMeChiarID]==TRUE)//牛牌分类 { //设置变量 BYTE bTemp[MAX_COUNT]; CopyMemory(bTemp,m_cbHandCardData[wMeChiarID],sizeof(bTemp)); //获取牛牌 m_GameLogic.GetOxCard(bTemp,MAX_COUNT); BYTE bCardValue=m_GameLogic.GetCardType(bTemp,MAX_COUNT); ASSERT(bCardValue>0); if(bCardValue<OX_THREE_SAME) { //设置控件 m_GameClientView.m_CardControl[wViewChairID].SetCardData(bTemp,3); m_GameClientView.m_CardControlOx[wViewChairID].SetCardData(&bTemp[3],2); } //显示点数 m_GameClientView.SetUserOxValue(wViewChairID,bCardValue); } else { //无牛 m_GameClientView.SetUserOxValue(wViewChairID,0); } } } return true; } } return false; }
//用户加注 bool CGameClientDlg::OnSubAddScore(const void * pBuffer, WORD wDataSize) { //效验数据 if (wDataSize!=sizeof(CMD_S_AddScore)) return false; CMD_S_AddScore * pAddScore=(CMD_S_AddScore *)pBuffer; //变量定义 WORD wMeChairID=GetMeChairID(); WORD wAddScoreUser=pAddScore->wAddScoreUser; WORD wViewChairID=SwitchViewChairID(wAddScoreUser); //梭哈判断 if (m_bShowHand==false) { //获取用户 const tagUserData * pUserData=GetUserData(wAddScoreUser); if (pUserData!=NULL) m_bShowHand=(pUserData->lScore==(m_lTableScore[wAddScoreUser*2+1]+pAddScore->lAddScoreCount)); } //加注处理 if ((IsLookonMode()==true)||(pAddScore->wAddScoreUser!=wMeChairID)) { //加注界面 m_GameClientView.m_PlayerJeton[wViewChairID].SetScore(pAddScore->lAddScoreCount); //播放声音 if (m_cbPlayStatus[wAddScoreUser]==TRUE) { //获取积分 const tagUserData * pUserData=(tagUserData *)GetUserData(wAddScoreUser); LONG lTableScore=m_lTableScore[wAddScoreUser*2+1]; LONG lTurnAddScore=m_lTableScore[wAddScoreUser*2]; LONG lShowHandScore=pUserData->lScore-lTableScore; //播放声音 if ((pAddScore->lAddScoreCount-lTurnAddScore)==0L) PlayGameSound(AfxGetInstanceHandle(),TEXT("NO_ADD")); else if (pAddScore->lAddScoreCount==lShowHandScore) PlayGameSound(AfxGetInstanceHandle(),TEXT("SHOW_HAND")); else if ((pAddScore->lAddScoreCount+lTableScore)==m_lTurnLessScore) PlayGameSound(AfxGetInstanceHandle(),TEXT("FOLLOW")); else PlayGameSound(AfxGetInstanceHandle(),TEXT("ADD_SCORE")); } } //设置变量 m_wCurrentUser=pAddScore->wCurrentUser; m_lTurnLessScore=pAddScore->lTurnLessScore; m_lTableScore[wAddScoreUser*2]=pAddScore->lAddScoreCount; //设置筹码 m_GameClientView.SetUserTableScore(wViewChairID,m_lTableScore[wAddScoreUser*2+1]+m_lTableScore[wAddScoreUser*2]); m_GameClientView.UpdateGameView(NULL); //控制界面 if ((IsLookonMode()==false)&&(pAddScore->wCurrentUser==wMeChairID)) { ActiveGameFrame(); UpdateScoreControl(); } //设置时间 if (m_wCurrentUser==INVALID_CHAIR) KillGameTimer(IDI_USER_ADD_SCORE); else SetGameTimer(m_wCurrentUser,IDI_USER_ADD_SCORE,TIME_USER_ADD_SCORE); return true; }
//游戏场景 bool CGameClientDlg::OnGameSceneMessage(BYTE cbGameStation, bool bLookonOther, const void * pBuffer, WORD wDataSize) { switch (cbGameStation) { case GS_FREE: //空闲状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusFree)) return false; CMD_S_StatusFree * pStatusFree=(CMD_S_StatusFree *)pBuffer; //设置控件 if (IsLookonMode()==false) { m_GameClientView.m_btStart.ShowWindow(SW_SHOW); m_GameClientView.m_btStart.SetFocus(); } //设置时间 if (IsLookonMode()==false) SetGameTimer(GetMeChairID(),IDI_START_GAME,30); return true; } case GS_PLAYING: //游戏状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusPlay)) return false; CMD_S_StatusPlay * pStatusPlay=(CMD_S_StatusPlay *)pBuffer; //下注信息 m_lMaxScore=pStatusPlay->lMaxScore; m_lCellScore=pStatusPlay->lCellScore; m_lTurnMaxScore=pStatusPlay->lTurnMaxScore; m_lTurnLessScore=pStatusPlay->lTurnLessScore; CopyMemory(m_lTableScore,pStatusPlay->lTableScore,sizeof(m_lTableScore)); //状态变量 m_wCurrentUser=pStatusPlay->wCurrentUser; m_bAddScore=(pStatusPlay->bAddScore==TRUE)?true:false; m_bShowHand=(pStatusPlay->bShowHand==TRUE)?true:false; CopyMemory(m_cbPlayStatus,pStatusPlay->cbPlayStatus,sizeof(m_cbPlayStatus)); //帐号名字 for (WORD i=0;i<GAME_PLAYER;i++) { const tagUserData * pUserData=GetUserData(i); if (pUserData!=NULL) lstrcpyn(m_szAccounts[i],pUserData->szName,CountArray(m_szAccounts[i])); } //设置界面 LONG lTableScore=0L; for (WORD i=0;i<GAME_PLAYER;i++) { //设置位置 WORD wViewChairID=SwitchViewChairID(i); //设置扑克 if (m_cbPlayStatus[i]==TRUE) { BYTE cbCardCount=pStatusPlay->cbCardCount[i]; m_GameClientView.m_CardControl[wViewChairID].SetCardData(pStatusPlay->cbHandCardData[i],cbCardCount); } lTableScore += m_lTableScore[2*i+1]; //筹码设置 m_GameClientView.m_PlayerJeton[wViewChairID].SetScore(m_lTableScore[2*i]); //设置下注 m_GameClientView.SetUserTableScore(wViewChairID,m_lTableScore[2*i]+m_lTableScore[2*i+1]); } m_GameClientView.m_PlayerJeton[GAME_PLAYER].SetScore(lTableScore); // m_GameClientView.SetCellScore(m_lCellScore); //玩家设置 if (IsLookonMode()==false) { //控制设置 m_GameClientView.m_CardControl[2].SetPositively(true); if (m_wCurrentUser==GetMeChairID()) UpdateScoreControl(); } //设置定时器 SetGameTimer(m_wCurrentUser,IDI_USER_ADD_SCORE,TIME_USER_ADD_SCORE); return true; } } return false; }