//时间消息 bool CGameClientDlg::OnTimerMessage(WORD wChairID, UINT nElapse, UINT nTimerID) { switch (nTimerID) { case IDI_OUT_CARD: //用户出牌 { //超时判断 if (nElapse==0) { if ((IsLookonMode()==false)&&(wChairID==GetMeChairID())) { OnOutCard(0,0); AutomatismOutCard(); } return false; } m_GameClientView.SetTimeFlag(30,nElapse); //播放声音 if (m_bHandCardCount<m_bTurnCardCount) return true; if ((nElapse<=10)&&(wChairID==GetMeChairID())&&(IsLookonMode()==false)) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); return true; } case IDI_START_GAME: //开始游戏 { if (nElapse==0) { //if ((IsLookonMode()==false)&&(wChairID==GetMeChairID())) OnStart(0,0); return false; } m_GameClientView.SetTimeFlag(30,nElapse); if ((nElapse<=10)&&(wChairID==GetMeChairID())&&(IsLookonMode()==false)) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); return true; } case IDI_LAND_SCORE: //挖坑叫分 { if (nElapse==0) { //if ((IsLookonMode()==false)&&(wChairID==GetMeChairID())) OnKouPai(255,255); return false; } if ((nElapse<=10)&&(wChairID==GetMeChairID())&&(IsLookonMode()==false)) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); return true; } case IDI_KOU_CARD: { if (nElapse==0) { if ((IsLookonMode()==false)&&(wChairID==GetMeChairID())) OnKouPai(255,255); return false; } m_GameClientView.SetTimeFlag(10,nElapse); if ((nElapse<=10)&&(wChairID==GetMeChairID())&&(IsLookonMode()==false)) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); return true; } } return false; }
//游戏场景 bool CGameClientDlg::OnGameSceneMessage(BYTE cbGameStation, bool bLookonOther, const void * pBuffer, WORD wDataSize) { switch (cbGameStation) { case GS_MJ_FREE: //空闲状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusFree)) return false; CMD_S_StatusFree * pStatusFree=(CMD_S_StatusFree *)pBuffer; //设置数据 m_wBankerUser=pStatusFree->wBankerUser; m_GameClientView.SetCellScore(pStatusFree->lCellScore); m_GameClientView.m_HandCardControl.SetDisplayItem(true); //托管设置 for (WORD i=0;i<GAME_PLAYER;i++) { m_GameClientView.SetTrustee(SwitchViewChairID(i),pStatusFree->bTrustee[i]); } //设置界面 for (WORD i=0;i<GAME_PLAYER;i++) { m_cbHeapCardInfo[i][0]=0; m_cbHeapCardInfo[i][1]=HEAP_FULL_COUNT-(((i==m_wBankerUser)||((i+2)%4==m_wBankerUser))?34:34); m_GameClientView.m_HeapCard[SwitchViewChairID(i)].SetCardData(m_cbHeapCardInfo[i][0],m_cbHeapCardInfo[i][1],HEAP_FULL_COUNT); } //设置控件 if (IsLookonMode()==false) { m_GameClientView.m_btStart.ShowWindow(SW_SHOW); m_GameClientView.m_btStart.SetFocus(); m_GameClientView.m_btStusteeControl.EnableWindow(TRUE); SetGameTimer(GetMeChairID(),IDI_START_GAME,TIME_START_GAME); } //丢弃效果 m_GameClientView.SetDiscUser(INVALID_CHAIR); m_GameClientView.SetTimer(IDI_DISC_EFFECT,250,NULL); //更新界面 m_GameClientView.UpdateGameView(NULL); return true; } case GS_MJ_PLAY: //游戏状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusPlay)) return false; CMD_S_StatusPlay * pStatusPlay=(CMD_S_StatusPlay *)pBuffer; //设置变量 m_wBankerUser=pStatusPlay->wBankerUser; m_wCurrentUser=pStatusPlay->wCurrentUser; m_cbLeftCardCount=pStatusPlay->cbLeftCardCount; m_bStustee=pStatusPlay->bTrustee[GetMeChairID()]; //旁观 if( IsLookonMode()==true ) m_GameClientView.m_HandCardControl.SetDisplayItem(IsAllowLookon()||IsAllowUserLookon()); //托管设置 for (WORD i=0;i<GAME_PLAYER;i++) { m_GameClientView.SetTrustee(SwitchViewChairID(i),pStatusPlay->bTrustee[i]); } m_wTimeOutCount=0; if(pStatusPlay->bTrustee[GetMeChairID()]) m_GameClientView.m_btStusteeControl.SetButtonImage(IDB_BT_STOP_TRUSTEE,AfxGetInstanceHandle(),false); else m_GameClientView.m_btStusteeControl.SetButtonImage(IDB_BT_START_TRUSTEE,AfxGetInstanceHandle(),false); //听牌状态 WORD wMeChairID=GetMeChairID(); m_bHearStatus=(pStatusPlay->cbHearStatus[wMeChairID]==TRUE)?true: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(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;i<GAME_PLAYER;i++) wViewChairID[i]=SwitchViewChairID(i); //界面设置 m_GameClientView.SetCellScore(pStatusPlay->lCellScore); m_GameClientView.SetBankerUser(wViewChairID[m_wBankerUser]); //组合扑克 BYTE cbWeaveCard[4]={0,0,0,0}; for (WORD i=0;i<GAME_PLAYER;i++) { WORD wOperateViewID = SwitchViewChairID(i); for (BYTE j=0;j<m_cbWeaveCount[i];j++) { BYTE cbWeaveKind=m_WeaveItemArray[i][j].cbWeaveKind; BYTE cbCenterCard=m_WeaveItemArray[i][j].cbCenterCard; BYTE cbWeaveCardCount=m_GameLogic.GetWeaveCard(cbWeaveKind,cbCenterCard,cbWeaveCard); m_GameClientView.m_WeaveCard[wViewChairID[i]][j].SetCardData(cbWeaveCard,cbWeaveCardCount); if ((cbWeaveKind&WIK_GANG)&&(m_WeaveItemArray[i][j].wProvideUser==i)) m_GameClientView.m_WeaveCard[wViewChairID[i]][j].SetDisplayItem(false); WORD wProviderViewID = SwitchViewChairID(m_WeaveItemArray[i][j].wProvideUser); m_GameClientView.m_WeaveCard[wOperateViewID][j].SetDirectionCardPos(3-(wOperateViewID-wProviderViewID+4)%4); } //听牌状态 if (pStatusPlay->cbHearStatus[i]==TRUE) { WORD wViewChairID=SwitchViewChairID(i); m_GameClientView.SetUserListenStatus(wViewChairID,true); } } //用户扑克 if (m_wCurrentUser==GetMeChairID()) { //调整扑克 if (pStatusPlay->cbSendCardData!=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;i<GAME_PLAYER;i++) { //用户扑克 if (i!=GetMeChairID()) { BYTE cbCardCount=13-m_cbWeaveCount[i]*3; WORD wUserCardIndex=(wViewChairID[i]<2)?wViewChairID[i]:2; m_GameClientView.m_UserCard[wUserCardIndex].SetCardData(cbCardCount,(m_wCurrentUser==i)); } //丢弃扑克 WORD wViewChairID=SwitchViewChairID(i); m_GameClientView.m_DiscardCard[wViewChairID].SetCardData(m_cbDiscardCard[i],m_cbDiscardCount[i]); } //控制设置 if (IsLookonMode()==false) { m_GameClientView.m_HandCardControl.SetPositively(true); m_GameClientView.m_HandCardControl.SetDisplayItem(true); m_GameClientView.m_btStusteeControl.EnableWindow(TRUE); } //堆立扑克 for (WORD i=0;i<GAME_PLAYER;i++) { m_cbHeapCardInfo[i][0]=0; m_cbHeapCardInfo[i][1]=HEAP_FULL_COUNT-(((i==m_wBankerUser)||((i+2)%4==m_wBankerUser))?34:34); } //分发扑克 BYTE cbTakeCount=MAX_REPERTORY-m_cbLeftCardCount; BYTE cbSiceFirst=HIBYTE(pStatusPlay->wSiceCount); BYTE cbSiceSecond=LOBYTE(pStatusPlay->wSiceCount); WORD wTakeChairID=(m_wBankerUser+7-cbSiceFirst)%GAME_PLAYER; for (WORD i=0;i<GAME_PLAYER;i++) { //计算数目 BYTE cbValidCount=HEAP_FULL_COUNT-m_cbHeapCardInfo[wTakeChairID][1]-((i==0)?(cbSiceSecond-1)*2:0); BYTE cbRemoveCount=__min(cbValidCount,cbTakeCount); //提取扑克 cbTakeCount-=cbRemoveCount; m_cbHeapCardInfo[wTakeChairID][(i==0)?1:0]+=cbRemoveCount; //完成判断 if (cbTakeCount==0) { m_wHeapHand=wTakeChairID; m_wHeapTail=(m_wBankerUser+7-cbSiceFirst)%GAME_PLAYER; break; } //切换索引 wTakeChairID=(wTakeChairID+1)%GAME_PLAYER; } //堆立界面 for (WORD i=0;i<GAME_PLAYER;i++) { m_GameClientView.m_HeapCard[wViewChairID[i]].SetCardData(m_cbHeapCardInfo[i][0],m_cbHeapCardInfo[i][1],HEAP_FULL_COUNT); } //历史扑克 if (m_wOutCardUser!=INVALID_CHAIR) { WORD wOutChairID=SwitchViewChairID(m_wOutCardUser); m_GameClientView.SetOutCardInfo(wOutChairID,m_cbOutCardData); } //操作界面 if ((IsLookonMode()==false)&&(pStatusPlay->cbActionMask!=WIK_NULL)) { //获取变量 BYTE cbActionMask=pStatusPlay->cbActionMask; BYTE cbActionCard=pStatusPlay->cbActionCard; //变量定义 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) SetGameTimer(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; if ((m_bHearStatus==true)&&(m_wCurrentUser==GetMeChairID())) wTimeCount=TIME_HEAR_STATUS; //ASSERT(FALSE); //设置时间 SetGameTimer(m_wCurrentUser,TIME_OPERATE_CARD,wTimeCount); } //丢弃效果 m_GameClientView.SetDiscUser(SwitchViewChairID(m_wOutCardUser)); m_GameClientView.SetTimer(IDI_DISC_EFFECT,250,NULL); //更新界面 m_GameClientView.UpdateGameView(NULL); return true; } } return false; }
//发牌消息 bool CGameClientDlg::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; //丢弃扑克 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(true); } //当前用户 if ((IsLookonMode()==false)&&(m_wCurrentUser==wMeChairID)) { //激活框架 ActiveGameFrame(); //听牌判断 if (m_bHearStatus==false) { BYTE cbChiHuRight=0; BYTE cbWeaveCount=m_cbWeaveCount[wMeChairID]; pSendCard->cbActionMask|=m_GameLogic.AnalyseTingCard(m_cbCardIndex,m_WeaveItemArray[wMeChairID],cbWeaveCount,cbChiHuRight); } //动作处理 if (pSendCard->cbActionMask!=WIK_NULL) { //获取变量 BYTE cbActionCard=pSendCard->cbCardData; BYTE cbActionMask=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.UpdateGameView(NULL); //计算时间 WORD wTimeCount=TIME_OPERATE_CARD; if ((m_bHearStatus==true)&&(m_wCurrentUser==wMeChairID)) wTimeCount=TIME_HEAR_STATUS; //设置时间 m_GameClientView.SetCurrentUser(SwitchViewChairID(m_wCurrentUser)); SetGameTimer(m_wCurrentUser,IDI_OPERATE_CARD,wTimeCount); return true; }
//游戏场景 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::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); //删除定时器 KillGameTimer(IDI_OPERATE_CARD); //设置控件 m_GameClientView.SetStatusFlag(false,false); m_GameClientView.m_ControlWnd.ShowWindow(SW_HIDE); m_GameClientView.m_HandCardControl.SetPositively(false); ////结束设置 荒庄 //if (pGameEnd->cbChiHuCard==0) //{ // DeductionTableCard(true); // m_GameClientView.SetHuangZhuang(true); //} //设置扑克 for (WORD i=0;i<GAME_PLAYER;i++) { m_GameClientView.m_WeaveCard[i][0].SetDisplayItem(true); m_GameClientView.m_WeaveCard[i][1].SetDisplayItem(true); m_GameClientView.m_WeaveCard[i][2].SetDisplayItem(true); m_GameClientView.m_WeaveCard[i][3].SetDisplayItem(true); } //变量定义 tagScoreInfo ScoreInfo; tagWeaveInfo WeaveInfo; ZeroMemory(&ScoreInfo,sizeof(ScoreInfo)); ZeroMemory(&WeaveInfo,sizeof(WeaveInfo)); //成绩变量 ScoreInfo.wBankerUser=m_wBankerUser; ScoreInfo.wProvideUser=pGameEnd->wProvideUser; ScoreInfo.cbProvideCard=pGameEnd->cbProvideCard; //设置积分 CString strTemp ,strEnd = "\n"; for (WORD i=0;i<GAME_PLAYER;i++) { const tagUserData * pUserData=GetUserData(i); //胡牌类型 ScoreInfo.dwChiHuKind[i]=pGameEnd->dwChiHuKind[i]; ScoreInfo.dwChiHuRight[i]=pGameEnd->dwChiHuRight[i]; //设置成绩 ScoreInfo.lGameScore[i]=pGameEnd->lGameScore[i]; lstrcpyn(ScoreInfo.szUserName[i],pUserData->szName,CountArray(ScoreInfo.szUserName[i])); if(pGameEnd->lGameScore[i]>0) strTemp.Format("%s: %+ld\n",pUserData->szName,pGameEnd->lGameScore[i]); else strTemp.Format("%s: %ld\n",pUserData->szName,pGameEnd->lGameScore[i]); strEnd += strTemp; //胡牌扑克 if ((ScoreInfo.cbCardCount==0)&&(pGameEnd->dwChiHuKind[i]!=CHK_NULL)) { //组合扑克 WeaveInfo.cbWeaveCount=m_cbWeaveCount[i]; for (BYTE j=0;j<WeaveInfo.cbWeaveCount;j++) { BYTE cbWeaveKind=m_WeaveItemArray[i][j].cbWeaveKind; BYTE cbCenterCard=m_WeaveItemArray[i][j].cbCenterCard; WeaveInfo.cbPublicWeave[j]=m_WeaveItemArray[i][j].cbPublicCard; WeaveInfo.cbCardCount[j]=m_GameLogic.GetWeaveCard(cbWeaveKind,cbCenterCard,WeaveInfo.cbCardData[j]); } //设置扑克 ScoreInfo.cbCardCount=pGameEnd->cbCardCount[i]; CopyMemory(ScoreInfo.cbCardData,&pGameEnd->cbCardData[i],ScoreInfo.cbCardCount*sizeof(BYTE)); //提取胡牌 for (BYTE j=0;j<ScoreInfo.cbCardCount;j++) { if (ScoreInfo.cbCardData[j]==pGameEnd->cbProvideCard) { MoveMemory(&ScoreInfo.cbCardData[j],&ScoreInfo.cbCardData[j+1],(ScoreInfo.cbCardCount-j-1)*sizeof(BYTE)); ScoreInfo.cbCardData[ScoreInfo.cbCardCount-1]=pGameEnd->cbProvideCard; break; } } } } //消息积分 InsertSystemString((LPCTSTR)strEnd); //成绩界面 m_GameClientView.m_ScoreControl.SetScoreInfo(ScoreInfo,WeaveInfo); //用户扑克 for (WORD i=0;i<GAME_PLAYER;i++) { WORD wViewChairID=SwitchViewChairID(i); if (pGameEnd->dwChiHuKind[i]!=CHK_NULL) m_GameClientView.SetUserAction(wViewChairID,WIK_CHI_HU); m_GameClientView.m_TableCard[wViewChairID].SetCardData(pGameEnd->cbCardData[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); //播放声音 //播放声音 LONG 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); SetGameTimer(GetMeChairID(),IDI_START_GAME,TIME_START_GAME); } //取消托管 if(m_bStustee) OnStusteeControl(0,0); //更新界面 m_GameClientView.UpdateGameView(NULL); 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; //加注处理 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::OnGameSceneMessage(BYTE cbGameStation, bool bLookonOther, const void * pBuffer, WORD wDataSize) { switch (cbGameStation) { case GS_FREE: //空闲状态 { //效验数据 ASSERT(wDataSize==sizeof(CMD_S_StatusFree)); if (wDataSize!=sizeof(CMD_S_StatusFree)) return false; //消息处理 CMD_S_StatusFree * pStatusFree=(CMD_S_StatusFree *)pBuffer; //设置时间 SetGameTimer(GetMeChairID(),IDI_FREE,pStatusFree->cbTimeLeave); //玩家信息 m_lMeMaxScore=pStatusFree->lUserMaxScore; m_GameClientView.SetMeMaxScore(m_lMeMaxScore); WORD wMeChairID=GetMeChairID(); m_GameClientView.SetMeChairID(SwitchViewChairID(wMeChairID)); //庄家信息 SetBankerInfo(pStatusFree->wBankerUser,pStatusFree->lBankerScore); m_GameClientView.SetBankerScore(pStatusFree->cbBankerTime,pStatusFree->lBankerWinScore); m_bEnableSysBanker=pStatusFree->bEnableSysBanker; m_GameClientView.EnableSysBanker(m_bEnableSysBanker); //控制信息 m_lApplyBankerCondition=pStatusFree->lApplyBankerCondition; m_lAreaLimitScore=pStatusFree->lAreaLimitScore; m_GameClientView.SetAreaLimitScore(m_lAreaLimitScore); //设置状态 SetGameStatus(GS_FREE); //更新控制 UpdateButtonContron(); m_GameClientView.UpdateGameView(NULL); return true; } case GS_PLAYING: //游戏状态 case GS_GAME_END: //结束状态 { //效验数据 ASSERT(wDataSize==sizeof(CMD_S_StatusPlay)); if (wDataSize!=sizeof(CMD_S_StatusPlay)) return false; //消息处理 CMD_S_StatusPlay * pStatusPlay=(CMD_S_StatusPlay *)pBuffer; //全局下注 m_GameClientView.PlaceUserJetton(ID_TIAN_MARK,pStatusPlay->lAllTianScore); m_GameClientView.PlaceUserJetton(ID_DI_MARK,pStatusPlay->lAllDiScore); m_GameClientView.PlaceUserJetton(ID_XUAN_MARK,pStatusPlay->lAllXuanScore); m_GameClientView.PlaceUserJetton(ID_HUANG_MARK,pStatusPlay->lAllHuangScore); //玩家下注 SetMePlaceJetton(ID_TIAN_MARK,pStatusPlay->lUserTianScore); SetMePlaceJetton(ID_DI_MARK,pStatusPlay->lUserDiScore); SetMePlaceJetton(ID_XUAN_MARK,pStatusPlay->lUserXuanScore); SetMePlaceJetton(ID_HUANG_MARK,pStatusPlay->lUserHuangScore); //玩家积分 m_lMeMaxScore=pStatusPlay->lUserMaxScore; m_GameClientView.SetMeMaxScore(m_lMeMaxScore); WORD wMeChairID=GetMeChairID(); m_GameClientView.SetMeChairID(SwitchViewChairID(wMeChairID)); //控制信息 m_lApplyBankerCondition=pStatusPlay->lApplyBankerCondition; m_lAreaLimitScore=pStatusPlay->lAreaLimitScore; m_GameClientView.SetAreaLimitScore(m_lAreaLimitScore); if (pStatusPlay->cbGameStatus==GS_GAME_END) { //扑克信息 m_GameClientView.SetCardInfo(true,pStatusPlay->cbTableCardArray); m_GameClientView.FinishDispatchCard(); //设置成绩 m_GameClientView.SetCurGameScore(pStatusPlay->lEndUserScore,pStatusPlay->lEndUserReturnScore,pStatusPlay->lEndBankerScore,pStatusPlay->lEndRevenue); } else { m_GameClientView.SetCardInfo(false,NULL); //播放声音 if (IsEnableSound()) m_DTSDBackground.Play(0,true); } //庄家信息 SetBankerInfo(pStatusPlay->wBankerUser,pStatusPlay->lBankerScore); m_GameClientView.SetBankerScore(pStatusPlay->cbBankerTime,pStatusPlay->lBankerWinScore); m_bEnableSysBanker=pStatusPlay->bEnableSysBanker; m_GameClientView.EnableSysBanker(m_bEnableSysBanker); //设置状态 SetGameStatus(pStatusPlay->cbGameStatus); //设置时间 SetGameTimer(GetMeChairID(),pStatusPlay->cbGameStatus==GS_GAME_END?IDI_DISPATCH_CARD:IDI_PLACE_JETTON,pStatusPlay->cbTimeLeave); //更新按钮 UpdateButtonContron(); m_GameClientView.UpdateGameView(NULL); return true; } } return false; }
//游戏结束 bool CGameClientDlg::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; //--取消 //取消动画 //for (WORD wAreaIndex=ID_TIAN_MARK; wAreaIndex<=ID_HUANG_MARK; wAreaIndex*=2) // m_GameClientView.SetBombEffect(false,wAreaIndex); m_GameClientView.m_bCanGo=false; m_GameClientView.m_bSet=false; //m_GameClientView.SetAreaFlash(0xFF); //设置时间 SetGameTimer(GetMeChairID(),IDI_DISPATCH_CARD, pGameEnd->cbTimeLeave); //扑克信息 m_GameClientView.SetCardInfo(true,pGameEnd->cbTableCardArray); //庄家信息 m_GameClientView.SetBankerScore(pGameEnd->nBankerTime, pGameEnd->lBankerTotallScore); //成绩信息 m_GameClientView.SetCurGameScore(pGameEnd->lUserScore,pGameEnd->lUserReturnScore,pGameEnd->lBankerScore,pGameEnd->lRevenue); //设置状态 SetGameStatus(GS_GAME_END); //更新成绩 for (WORD wUserIndex = 0; wUserIndex < MAX_CHAIR; ++wUserIndex) { tagUserData const *pUserData = GetUserData(wUserIndex); if ( pUserData == NULL ) continue; tagApplyUser ApplyUser ; //更新信息 ApplyUser.lUserScore = pUserData->lScore; ApplyUser.strUserName = pUserData->szName; m_GameClientView.m_ApplyUser.UpdateUser(ApplyUser); } //更新控件 UpdateButtonContron(); //停止声音 m_DTSDBackground.Stop(); m_DTSDCheer[0].Stop(); m_DTSDCheer[1].Stop(); m_DTSDCheer[2].Stop(); // m_DTSDCheer[3].Stop(); // m_DTSDCheer[4].Stop(); 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); //m_GameClientView.m_UserCardControl[wViewChairID].SetDisplayFlag(false); } //一轮判断 if (pPassCard->bNewTurn) { for(BYTE i=0,j=0;i<20;i++) { if(!m_bZhanPaiData[pPassCard->bZhanpaiUser][i]&&m_bTurnCardData[j]&&j<m_bTurnCardCount) { m_bZhanPaiData[pPassCard->bZhanpaiUser][i]=m_bTurnCardData[j]; j++; } } for(BYTE k=0;k<20;k++) if(!m_bZhanPaiData[pPassCard->bZhanpaiUser][k]) { m_bZhanPaiData[pPassCard->bZhanpaiUser][k]=0x41; break; } //设置占牌数目 m_GameClientView.IncreaseZhanPaiCount(SwitchViewChairID(pPassCard->bZhanpaiUser),m_bTurnCardCount); ASSERT(k<=16); m_bTurnCardCount=0; m_bTurnOutType=CT_INVALID; memset(m_bTurnCardData,0,sizeof(m_bTurnCardData)); } if (pPassCard->bNewTurn) { for (WORD i=0;i<GAME_PLAYER;i++) { ZeroMemory(m_bForCardItem[i],sizeof(tagCardItem)*16); m_GameClientView.m_UserCardControl[SwitchViewChairID(i)].GetCardData(m_bForCardItem[i],m_GameClientView.m_UserCardControl[SwitchViewChairID(i)].GetCardCount()); //if (i==pPassCard->wOutCardUser) continue; m_GameClientView.m_UserCardControl[SwitchViewChairID(i)].SetCardData(NULL,0); //m_GameClientView.m_UserCardControl[SwitchViewChairID(i)].SetDisplayFlag(false); } m_GameClientView.SetPassFlag(INVALID_CHAIR,false); m_GameClientView.m_btForeTurn.EnableWindow(TRUE); } //设置按钮 if(pPassCard->bNewTurn&&pPassCard->bZhanpaiUser==GetMeChairID()) m_GameClientView.m_btKouPai.EnableWindow(true); //设置界面 WORD wViewChairID=SwitchViewChairID(pPassCard->wCurrentUser); m_GameClientView.SetPassFlag(wViewChairID,false); m_GameClientView.m_UserCardControl[wViewChairID].SetCardData(NULL,0); //m_GameClientView.m_UserCardControl[wViewChairID].SetDisplayFlag(false); //玩家设置 if ((IsLookonMode()==false)&&(pPassCard->wCurrentUser==GetMeChairID())) { ActiveGameFrame(); m_GameClientView.m_btOutCard.ShowWindow(SW_SHOW); //m_GameClientView.m_btPassCard.ShowWindow(SW_SHOW); m_GameClientView.m_btAutoOutCard.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_btAutoOutCard.EnableWindow((m_bTurnCardCount>0)?TRUE:FALSE); AutoOutCard(0); } //设置占牌 if(pPassCard->bNewTurn) { for(BYTE i=0;i<20;i++) if(!m_bZhanPaiData[pPassCard->bZhanpaiUser][i]) break; WORD wViewUser=SwitchViewChairID(pPassCard->bZhanpaiUser); m_GameClientView.m_ZhanCardControl[wViewUser].SetCardData(m_bZhanPaiData[pPassCard->bZhanpaiUser],i); } //播放声音 if ((IsLookonMode()==true)||(pPassCard->wPassUser!=GetMeChairID())) PlayGameSound(AfxGetInstanceHandle(),TEXT("OUT_CARD")); //设置时间 if (m_bTurnCardCount) { BYTE bCardCount=m_bCardCount[pPassCard->wCurrentUser]; SetGameTimer(pPassCard->wCurrentUser,IDI_OUT_CARD,(bCardCount<m_bTurnCardCount)?3:30); } else SetGameTimer(pPassCard->wCurrentUser,IDI_OUT_CARD,30); return true; }
//游戏结束 bool CGameClientDlg::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; //删除定时器 KillTimer(IDI_MOST_CARD); KillGameTimer(IDI_OUT_CARD); KillGameTimer(IDI_LAND_SCORE); //隐藏控件 m_GameClientView.m_btOutCard.ShowWindow(SW_HIDE); m_GameClientView.m_btPassCard.ShowWindow(SW_HIDE); m_GameClientView.m_btKouPai.ShowWindow(SW_HIDE); m_GameClientView.m_btXianPai.ShowWindow(SW_HIDE); m_GameClientView.m_btQiangCi.ShowWindow(SW_HIDE); m_GameClientView.m_btGiveUpCiangCi.ShowWindow(SW_HIDE); m_GameClientView.m_btAutoOutCard.ShowWindow(SW_HIDE); //禁用控件 m_GameClientView.m_btOutCard.EnableWindow(FALSE); m_GameClientView.m_btPassCard.EnableWindow(FALSE); //设置积分 for (WORD i=0;i<GAME_PLAYER;i++) { const tagUserData * pUserData=GetUserData(i); m_GameClientView.m_ScoreView.SetGameScore(i,pUserData->szName,pGameEnd->lGameScore[i]); m_lForeScore[i]=pGameEnd->lGameScore[i]; m_lAllScore[i]+=pGameEnd->lGameScore[i]; //设置界面 WORD wViewChairID=SwitchViewChairID(i); m_GameClientView.SetForeScore(wViewChairID,m_lForeScore[i]); m_GameClientView.SetAllScore(wViewChairID,m_lAllScore[i]); } m_GameClientView.m_ScoreView.SetGameTax(pGameEnd->lGameTax); m_GameClientView.m_ScoreView.ShowWindow(SW_SHOW); //设置扑克 BYTE bCardPos=0; for (WORD i=0;i<GAME_PLAYER;i++) { WORD wViewChairID=SwitchViewChairID(i); if (wViewChairID==0) m_GameClientView.m_LeaveCardControl[0].SetCardData(&pGameEnd->bCardData[bCardPos],pGameEnd->bCardCount[i]); else if (wViewChairID==2) m_GameClientView.m_LeaveCardControl[1].SetCardData(&pGameEnd->bCardData[bCardPos],pGameEnd->bCardCount[i]); bCardPos+=pGameEnd->bCardCount[i]; if (pGameEnd->bCardCount[i]!=0) { m_GameClientView.SetPassFlag(wViewChairID,false); m_GameClientView.m_UserCardControl[wViewChairID].SetCardData(NULL,0); } } //显示扑克 if (IsLookonMode()==true) m_GameClientView.m_HandCardControl.SetDisplayFlag(true); //播放声音 WORD wMeChairID=GetMeChairID(); LONG lMeScore=pGameEnd->lGameScore[GetMeChairID()]; if (lMeScore>0L) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WIN")); else if (lMeScore<0L) PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_LOST")); else PlayGameSound(GetModuleHandle(NULL),TEXT("GAME_END")); //设置界面 if (IsLookonMode()==false) { m_GameClientView.m_btStart.ShowWindow(SW_SHOW); //SetGameTimer(GetMeChairID(),IDI_START_GAME,90); } return true; }
//用户出牌 bool CGameClientDlg::OnSubOutCard(const void * pBuffer, WORD wDataSize) { ///变量定义 CMD_S_OutCard * pOutCard=(CMD_S_OutCard *)pBuffer; WORD wHeadSize=sizeof(CMD_S_OutCard)-sizeof(pOutCard->bCardData); //效验数据 ASSERT(wDataSize>=wHeadSize); if (wDataSize<wHeadSize) return false; ASSERT(wDataSize==(wHeadSize+pOutCard->bCardCount*sizeof(pOutCard->bCardData[0]))); if (wDataSize!=(wHeadSize+pOutCard->bCardCount*sizeof(pOutCard->bCardData[0]))) return false; //删除定时器 KillTimer(IDI_MOST_CARD); KillGameTimer(IDI_OUT_CARD); //界面设置 WORD wOutViewChairID=SwitchViewChairID(pOutCard->wOutCardUser); m_bCardCount[pOutCard->wOutCardUser]-=pOutCard->bCardCount; m_GameClientView.SetCardCount(wOutViewChairID,m_bCardCount[pOutCard->wOutCardUser]); for(BYTE i=0;i<GAME_PLAYER;i++) m_GameClientView.m_ForeTurn[SwitchViewChairID(i)].SetCardData(NULL,0); //出牌设置 if ((IsLookonMode()==true)||(GetMeChairID()!=pOutCard->wOutCardUser)) { m_GameClientView.m_UserCardControl[wOutViewChairID].SetCardData(pOutCard->bCardData,pOutCard->bCardCount); m_GameClientView.m_UserCardControl[wOutViewChairID].SetDisplayFlag(true); } //记录出牌 m_bTurnCardCount=pOutCard->bCardCount; m_bTurnOutType=m_GameLogic.GetCardType(pOutCard->bCardData,pOutCard->bCardCount); CopyMemory(m_bTurnCardData,pOutCard->bCardData,sizeof(BYTE)*pOutCard->bCardCount); //一轮判断 if (pOutCard->bNewTurn) { for(BYTE i=0,j=0;i<20;i++) { if(!m_bZhanPaiData[pOutCard->wOutCardUser][i]&&m_bTurnCardData[j]&&j<m_bTurnCardCount) { m_bZhanPaiData[pOutCard->wOutCardUser][i]=m_bTurnCardData[j]; j++; } } for(BYTE k=0;k<20;k++) if(!m_bZhanPaiData[pOutCard->wOutCardUser][k]) { m_bZhanPaiData[pOutCard->wOutCardUser][k]=0x41; break; } //设置占牌数目 m_GameClientView.IncreaseZhanPaiCount(wOutViewChairID,m_bTurnCardCount); ASSERT(k<=16); m_bTurnCardCount=0; m_bTurnOutType=CT_INVALID; memset(m_bTurnCardData,0,sizeof(m_bTurnCardData)); } //清理桌面 if (pOutCard->bNewTurn) { for (WORD i=0;i<GAME_PLAYER;i++) { ZeroMemory(m_bForCardItem[i],sizeof(tagCardItem)*16); m_GameClientView.m_UserCardControl[SwitchViewChairID(i)].GetCardData(m_bForCardItem[i],m_GameClientView.m_UserCardControl[SwitchViewChairID(i)].GetCardCount()); //if (i==pOutCard->wOutCardUser&&(!pOutCard->bNewTurn)) continue; m_GameClientView.m_UserCardControl[SwitchViewChairID(i)].SetCardData(NULL,0); //m_GameClientView.m_UserCardControl[SwitchViewChairID(i)].SetDisplayFlag(false); m_GameClientView.m_btForeTurn.EnableWindow(TRUE); } m_GameClientView.SetPassFlag(INVALID_CHAIR,false); } //设置占牌 if(pOutCard->bNewTurn) { for(BYTE i=0;i<20;i++) if(!m_bZhanPaiData[pOutCard->wOutCardUser][i]) break; WORD wViewUser=SwitchViewChairID(pOutCard->wOutCardUser); m_GameClientView.m_ZhanCardControl[wViewUser].SetCardData(m_bZhanPaiData[pOutCard->wOutCardUser],i); } //设置按钮 if(pOutCard->bNewTurn) if(pOutCard->wCurrentUser==GetMeChairID()) m_GameClientView.m_btKouPai.EnableWindow(true); //最大判断 if (pOutCard->bMostCard) { //设置变量 m_bTurnCardCount=0; m_bTurnOutType=CT_INVALID; m_wMostUser=pOutCard->wCurrentUser; memset(m_bTurnCardData,0,sizeof(m_bTurnCardData)); //设置界面 for (WORD i=0;i<GAME_PLAYER;i++) { if (i!=pOutCard->wOutCardUser) { WORD wViewChairID=SwitchViewChairID(i); m_GameClientView.SetPassFlag(wViewChairID,true); m_GameClientView.m_UserCardControl[wViewChairID].SetCardData(NULL,0); //m_GameClientView.m_UserCardControl[wViewChairID].SetDisplayFlag(false); } } //设置按钮 m_GameClientView.m_btKouPai.EnableWindow(true); //播放声音 PlayGameSound(AfxGetInstanceHandle(),TEXT("MOST_CARD")); //设置定时器 SetTimer(IDI_MOST_CARD,3000,NULL); return true; } //播放声音 if ((IsLookonMode()==true)||(GetMeChairID()!=pOutCard->wOutCardUser)) PlayGameSound(AfxGetInstanceHandle(),TEXT("OUT_CARD")); //玩家设置 if (pOutCard->wCurrentUser!=INVALID_CHAIR) { WORD wViewChairID=SwitchViewChairID(pOutCard->wCurrentUser); m_GameClientView.SetPassFlag(wViewChairID,false); m_GameClientView.m_UserCardControl[wViewChairID].SetCardData(NULL,0); //m_GameClientView.m_UserCardControl[wViewChairID].SetDisplayFlag(false); } //玩家设置 if ((IsLookonMode()==false)&&(pOutCard->wCurrentUser==GetMeChairID())) { ActiveGameFrame(); m_GameClientView.m_btOutCard.ShowWindow(SW_SHOW); //m_GameClientView.m_btPassCard.ShowWindow(SW_SHOW); m_GameClientView.m_btAutoOutCard.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_btAutoOutCard.EnableWindow((m_bTurnCardCount>0)?TRUE:FALSE); AutoOutCard(0); } //设置时间 if (pOutCard->wCurrentUser!=INVALID_CHAIR) { BYTE bCardCount=m_bCardCount[pOutCard->wCurrentUser]; SetGameTimer(pOutCard->wCurrentUser,IDI_OUT_CARD,(bCardCount<m_bTurnCardCount)?3:30); } return true; }
//游戏开始 bool CGameClientDlg::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; //设置变量 m_bTurnCardCount=0; m_bTurnOutType=CT_INVALID; /*m_wBanker=pGameStart->wLandUser;*/ m_bCardCount[pGameStart->wBankUser]=16; ZeroMemory(m_bTurnCardData,sizeof(m_bTurnCardData)); for(BYTE i=0;i<GAME_PLAYER;i++) memset(m_bZhanPaiData[i],0,sizeof(m_bZhanPaiData[i])); // //效验数据 //ASSERT(wDataSize==sizeof(CMD_S_SendCard)); //if (wDataSize!=sizeof(CMD_S_SendCard)) return false; //变量定义 //CMD_S_GameStart * pGameStart=(CMD_S_GameStart*)pBuffer; //设置数据 m_bHandCardCount=CountArray(pGameStart->bCardData); CopyMemory(m_bHandCardData,pGameStart->bCardData,sizeof(pGameStart->bCardData)); for (WORD i=0;i<GAME_PLAYER;i++) m_bCardCount[i]=CountArray(pGameStart->bCardData); //设置手中扑克 m_GameClientView.m_HandCardControl.SetCardData(pGameStart->bCardData,16); if (IsLookonMode()==true) m_GameClientView.m_HandCardControl.SetDisplayFlag(false); //设置界面 for (WORD i=0;i<GAME_PLAYER;i++) { m_GameClientView.SetPassFlag(i,false); m_GameClientView.SetCardCount(i,m_bCardCount[i]); m_GameClientView.m_UserCardControl[i].SetCardData(NULL,0); } if (IsLookonMode()==true) { m_GameClientView.m_ScoreView.ShowWindow(SW_HIDE); m_GameClientView.m_LeaveCardControl[0].SetCardData(NULL,0); m_GameClientView.m_LeaveCardControl[1].SetCardData(NULL,0); } //设置按钮 if (IsLookonMode()==false) { ActiveGameFrame(); m_GameClientView.m_btKouPai.ShowWindow(SW_SHOW); m_GameClientView.m_btKouPai.EnableWindow(false); m_GameClientView.m_btXianPai.ShowWindow(SW_SHOW); m_GameClientView.m_btXianPai.EnableWindow(false); m_GameClientView.m_btQiangCi.ShowWindow(SW_SHOW); m_GameClientView.m_btQiangCi.EnableWindow(false); m_GameClientView.m_btGiveUpCiangCi.ShowWindow(SW_SHOW); m_GameClientView.m_btGiveUpCiangCi.EnableWindow(false); m_GameClientView.m_btForeTurn.ShowWindow(SW_SHOW); m_GameClientView.m_btForeTurn.EnableWindow(false); } //抢刺设置 if(IsLookonMode()==false&&GetMeChairID()!=pGameStart->wBankUser) { if(m_GameLogic.GetCardType(m_bHandCardData,m_bHandCardCount)==CT_DROGONANDPHONIX ||m_GameLogic.GetCardType(m_bHandCardData,m_bHandCardCount)==CT_EIGHTDOUBLE) { m_GameClientView.m_btQiangCi.EnableWindow(true); m_GameClientView.m_btGiveUpCiangCi.EnableWindow(true); ASSERT(FALSE); } } //设置控件 //m_GameClientView.ShowLandTitle(false); //m_GameClientView.m_BackCardControl.SetCardData(pGameStart->bBackCard,CountArray(pGameStart->bBackCard)); //设置界面 //m_GameClientView.SetLandScore(INVALID_CHAIR,0); ///m_GameClientView.SetCardCount(SwitchViewChairID(pGameStart->wLandUser),m_bCardCount[pGameStart->wLandUser]); ////地主设置 //if (pGameStart->wLandUser==GetMeChairID()) //{ // BYTE bCardCound=m_bHandCardCount; // m_bHandCardCount+=CountArray(pGameStart->bBackCard); // CopyMemory(&m_bHandCardData[bCardCound],pGameStart->bBackCard,sizeof(pGameStart->bBackCard)); // m_GameLogic.SortCardList(m_bHandCardData,m_bHandCardCount); // m_GameClientView.m_HandCardControl.SetCardData(m_bHandCardData,m_bHandCardCount); //} //m_GameClientView.SetLandUser(SwitchViewChairID(pGameStart->wLandUser),pGameStart->bLandScore); //玩家设置 if (IsLookonMode()==false) m_GameClientView.m_HandCardControl.SetPositively(true); //当前玩家 if ((IsLookonMode()==false)&&(pGameStart->wBankUser==GetMeChairID())) { ActiveGameFrame(); m_GameClientView.m_btKouPai.EnableWindow(true); m_GameClientView.m_btOutCard.EnableWindow(FALSE); m_GameClientView.m_btOutCard.ShowWindow(SW_SHOW); m_GameClientView.m_btPassCard.EnableWindow(FALSE); //m_GameClientView.m_btPassCard.ShowWindow(SW_SHOW); m_GameClientView.m_btAutoOutCard.ShowWindow(SW_SHOW); m_GameClientView.m_btAutoOutCard.EnableWindow(FALSE); } //播放声音 PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_START")); //设置时间 SetGameTimer(pGameStart->wBankUser,IDI_OUT_CARD,30); return true; }
//游戏场景 bool CGameClientDlg::OnGameSceneMessage(BYTE cbGameStation, bool bLookonOther, const void * pBuffer, WORD wDataSize) { switch (cbGameStation) { case GS_WK_FREE: //空闲状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusFree)) return false; CMD_S_StatusFree * pStatusFree=(CMD_S_StatusFree *)pBuffer; //设置界面 m_GameClientView.SetBaseScore(pStatusFree->lBaseScore); //设置控件 if (IsLookonMode()==false) { m_GameClientView.m_btStart.ShowWindow(TRUE); m_GameClientView.m_btStart.SetFocus(); } //设置扑克 if (IsLookonMode()==false) m_GameClientView.m_HandCardControl.SetDisplayFlag(true); return true; } case GS_WK_PLAYING: //游戏状态 { //效验数据 if (wDataSize!=sizeof(CMD_S_StatusPlay)) return false; CMD_S_StatusPlay * pStatusPlay=(CMD_S_StatusPlay *)pBuffer; //设置变量 m_bTurnCardCount=pStatusPlay->bTurnCardCount; m_bHandCardCount=pStatusPlay->bCardCount[GetMeChairID()]; m_bTurnOutType=m_GameLogic.GetCardType(pStatusPlay->bTurnCardData,m_bTurnCardCount); CopyMemory(m_bHandCardData,pStatusPlay->bCardData,m_bHandCardCount); CopyMemory(m_bTurnCardData,pStatusPlay->bTurnCardData,pStatusPlay->bTurnCardCount); //设置界面 for (BYTE i=0;i<GAME_PLAYER;i++) { WORD wViewChairID=SwitchViewChairID(i); m_bCardCount[i]=pStatusPlay->bCardCount[i]; m_GameClientView.SetCardCount(wViewChairID,pStatusPlay->bCardCount[i]); } m_GameClientView.SetBaseScore(pStatusPlay->lBaseScore); m_GameClientView.m_HandCardControl.SetCardData(m_bHandCardData,m_bHandCardCount); //玩家设置 if ((IsLookonMode()==false)&&(pStatusPlay->wCurrentUser==GetMeChairID())) { m_GameClientView.m_btOutCard.EnableWindow(FALSE); m_GameClientView.m_btOutCard.ShowWindow(SW_SHOW); //m_GameClientView.m_btPassCard.ShowWindow(SW_SHOW); m_GameClientView.m_btAutoOutCard.ShowWindow(SW_SHOW); m_GameClientView.m_btPassCard.EnableWindow((m_bTurnCardCount!=0)?TRUE:FALSE); m_GameClientView.m_btAutoOutCard.EnableWindow((m_bTurnCardCount!=0)?TRUE:FALSE); } //桌面设置 if (m_bTurnCardCount!=0) { WORD wViewChairID=SwitchViewChairID(pStatusPlay->wLastOutUser); m_GameClientView.m_UserCardControl[wViewChairID].SetCardData(m_bTurnCardData,m_bTurnCardCount); m_GameClientView.m_UserCardControl[wViewChairID].SetDisplayFlag(true); } //设置定时器 SetGameTimer(pStatusPlay->wCurrentUser,IDI_OUT_CARD,30); //设置扑克 if (IsLookonMode()==false) { m_GameClientView.m_HandCardControl.SetPositively(true); m_GameClientView.m_HandCardControl.SetDisplayFlag(true); } 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; }
//更新控制 void CGameClientDlg::UpdateButtonContron() { //置能判断 bool bEnablePlaceJetton=true; if (m_bEnableSysBanker==false&&m_wCurrentBanker==INVALID_CHAIR) bEnablePlaceJetton=false; if (GetGameStatus()!=GS_PLACE_JETTON) bEnablePlaceJetton=false; if (m_wCurrentBanker==GetMeChairID()) bEnablePlaceJetton=false; if (IsLookonMode()) bEnablePlaceJetton=false; //下注按钮 if (bEnablePlaceJetton==true) { //计算积分 LONG lCurrentJetton=m_GameClientView.GetCurrentJetton(); const tagUserData *pMeUserData=GetUserData(GetMeChairID()); //LONG lLeaveScore=m_lMeMaxScore-m_lMeTianScore*10-m_lMeDiScore*10-m_lMeXuanScore*10-m_lMeHuangScore*10; LONG lLeaveScore1=pMeUserData->lScore-m_lMeTianScore*10-m_lMeDiScore*10-m_lMeXuanScore*10-m_lMeHuangScore*10; LONG lLeaveScore2=m_lMeMaxScore-m_lMeTianScore-m_lMeDiScore-m_lMeXuanScore-m_lMeHuangScore; //CString str; //str.Format("%ld,%ld",lLeaveScore1,lLeaveScore2); //AfxMessageBox(str); LONG lLeaveScore=min(lLeaveScore1/10,lLeaveScore2); /* CString str; str.Format("%ld",lLeaveScore); AfxMessageBox(str);*/ //设置光标 //if (lCurrentJetton*10>lLeaveScore) //{ // if (lLeaveScore>=5000000L*10) m_GameClientView.SetCurrentJetton(5000000L); // else if (lLeaveScore>=1000000L*10) m_GameClientView.SetCurrentJetton(1000000L); // else if (lLeaveScore>=100000L*10) m_GameClientView.SetCurrentJetton(100000L); // else if (lLeaveScore>=10000L*10) m_GameClientView.SetCurrentJetton(10000L); // else if (lLeaveScore>=1000L*10) m_GameClientView.SetCurrentJetton(1000L); // else if (lLeaveScore>=100L*10) m_GameClientView.SetCurrentJetton(100L); // else m_GameClientView.SetCurrentJetton(0L); //} ////控制按钮 //m_GameClientView.m_btJetton100.EnableWindow((lLeaveScore>=100*10)?TRUE:FALSE); //m_GameClientView.m_btJetton1000.EnableWindow((lLeaveScore>=1000*10)?TRUE:FALSE); //m_GameClientView.m_btJetton10000.EnableWindow((lLeaveScore>=10000*10)?TRUE:FALSE); //m_GameClientView.m_btJetton100000.EnableWindow((lLeaveScore>=100000*10)?TRUE:FALSE); //m_GameClientView.m_btJetton1000000.EnableWindow((lLeaveScore>=1000000*10)?TRUE:FALSE); //m_GameClientView.m_btJetton5000000.EnableWindow((lLeaveScore>=5000000*10)?TRUE:FALSE); if (lCurrentJetton>lLeaveScore) { if (lLeaveScore>=5000000L) m_GameClientView.SetCurrentJetton(5000000L); else if (lLeaveScore>=1000000L) m_GameClientView.SetCurrentJetton(1000000L); else if (lLeaveScore>=500000L) m_GameClientView.SetCurrentJetton(500000L); else if (lLeaveScore>=100000L) m_GameClientView.SetCurrentJetton(100000L); else if (lLeaveScore>=50000L) m_GameClientView.SetCurrentJetton(50000L); else if (lLeaveScore>=10000L) m_GameClientView.SetCurrentJetton(10000L); else if (lLeaveScore>=1000L) m_GameClientView.SetCurrentJetton(1000L); else if (lLeaveScore>=100L) m_GameClientView.SetCurrentJetton(100L); else m_GameClientView.SetCurrentJetton(0L); } //控制按钮 m_GameClientView.m_btJetton100.EnableWindow((lLeaveScore>=100)?TRUE:FALSE); m_GameClientView.m_btJetton1000.EnableWindow((lLeaveScore>=1000)?TRUE:FALSE); m_GameClientView.m_btJetton10000.EnableWindow((lLeaveScore>=10000)?TRUE:FALSE); m_GameClientView.m_btJetton50000.EnableWindow((lLeaveScore>=50000)?TRUE:FALSE); m_GameClientView.m_btJetton100000.EnableWindow((lLeaveScore>=100000)?TRUE:FALSE); m_GameClientView.m_btJetton500000.EnableWindow((lLeaveScore>=500000)?TRUE:FALSE); m_GameClientView.m_btJetton1000000.EnableWindow((lLeaveScore>=1000000)?TRUE:FALSE); m_GameClientView.m_btJetton5000000.EnableWindow((lLeaveScore>=5000000)?TRUE:FALSE); } else { //设置光标 m_GameClientView.SetCurrentJetton(0L); //禁止按钮 m_GameClientView.m_btJetton100.EnableWindow(FALSE); m_GameClientView.m_btJetton1000.EnableWindow(FALSE); m_GameClientView.m_btJetton10000.EnableWindow(FALSE); m_GameClientView.m_btJetton50000.EnableWindow(FALSE); m_GameClientView.m_btJetton100000.EnableWindow(FALSE); m_GameClientView.m_btJetton500000.EnableWindow(FALSE); m_GameClientView.m_btJetton1000000.EnableWindow(FALSE); m_GameClientView.m_btJetton5000000.EnableWindow(FALSE); } //庄家按钮 if (!IsLookonMode()) { //获取信息 const tagUserData *pMeUserData=GetUserData(GetMeChairID()); //申请按钮 bool bEnableApply=true; if (m_wCurrentBanker==GetMeChairID()) bEnableApply=false; if (m_bMeApplyBanker) bEnableApply=false; if (pMeUserData->lScore<m_lApplyBankerCondition) bEnableApply=false; m_GameClientView.m_btApplyBanker.EnableWindow(bEnableApply?TRUE:FALSE); //取消按钮 bool bEnableCancel=true; if (m_wCurrentBanker==GetMeChairID() && GetGameStatus()!=GS_FREE) bEnableCancel=false; if (m_bMeApplyBanker==false) bEnableCancel=false; m_GameClientView.m_btCancelBanker.EnableWindow(bEnableCancel?TRUE:FALSE); m_GameClientView.m_btCancelBanker.SetButtonImage(m_wCurrentBanker==GetMeChairID()?IDB_BT_CANCEL_BANKER:IDB_BT_CANCEL_APPLY,AfxGetInstanceHandle(),false); //显示判断 if (m_bMeApplyBanker) { m_GameClientView.m_btCancelBanker.ShowWindow(SW_SHOW); m_GameClientView.m_btApplyBanker.ShowWindow(SW_HIDE); } else { m_GameClientView.m_btCancelBanker.ShowWindow(SW_HIDE); m_GameClientView.m_btApplyBanker.ShowWindow(SW_SHOW); } } else { m_GameClientView.m_btCancelBanker.EnableWindow(FALSE); m_GameClientView.m_btApplyBanker.EnableWindow(FALSE); m_GameClientView.m_btApplyBanker.ShowWindow(SW_SHOW); m_GameClientView.m_btCancelBanker.ShowWindow(SW_HIDE); } return; }
//游戏结束 bool CGameClientDlg::OnSubGameEnd(const void * pBuffer, WORD wDataSize) { //效验参数 if (wDataSize!=sizeof(CMD_S_GameEnd)) return false; CMD_S_GameEnd * pGameEnd=(CMD_S_GameEnd *)pBuffer; //状态设置 HideScoreControl(); SetGameStatus(GS_FREE); KillGameTimer(IDI_USER_ADD_SCORE); m_GameClientView.SetUserTableScore(INVALID_CHAIR,0L); //播放声音 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")); //正常结束 m_GameClientView.m_ScoreView.ResetScore(); for (WORD i=0;i<GAME_PLAYER;i++) { //设置信息 if (pGameEnd->lGameScore[i]!=0L) { if (m_szAccounts[i][0]==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.SetGameTax(i,pGameEnd->lGameTax[i]); if (pGameEnd->cbCardData[i]!=0) { //获取扑克 BYTE cbCardData[5]; WORD wViewChairID=SwitchViewChairID(i); BYTE cbCardCount=(BYTE)m_GameClientView.m_CardControl[wViewChairID].GetCardData(cbCardData,CountArray(cbCardData)); //设置扑克 cbCardData[0]=pGameEnd->cbCardData[i]; m_GameClientView.m_CardControl[wViewChairID].SetDisplayHead(true); m_GameClientView.m_CardControl[wViewChairID].SetCardData(cbCardData,cbCardCount); } } } m_GameClientView.m_ScoreView.ShowWindow(SW_SHOW); //设置积分 TCHAR szBuffer[128] = TEXT(""); InsertGeneralString(TEXT("\n本局结束,成绩统计:"),RGB(255,0,255),true); for (WORD i=0;i<GAME_PLAYER;i++) { if( pGameEnd->lGameScore[i] != 0L && m_szAccounts[i][0]!=0 ) { //在聊天框显示成绩 _snprintf(szBuffer,CountArray(szBuffer),TEXT(" %s: %+ld分"),m_szAccounts[i],pGameEnd->lGameScore[i]); InsertGeneralString(szBuffer,RGB(255,0,255),true); } } //加注信息 m_lMaxScore=0L; m_lCellScore=0L; m_lTurnMaxScore=0L; m_lTurnLessScore=0L; ZeroMemory(m_lTableScore,sizeof(m_lTableScore)); //状态变量 m_bAddScore=false; m_bShowHand=false; m_wCurrentUser=INVALID_CHAIR; ZeroMemory(m_szAccounts,sizeof(m_szAccounts)); ZeroMemory(m_cbPlayStatus,sizeof(m_cbPlayStatus)); //开始按钮 if (IsLookonMode()==false) { m_GameClientView.m_btStart.ShowWindow(SW_SHOW); SetGameTimer(GetMeChairID(),IDI_START_GAME,TIME_START_GAME); } return true; }
//加注消息 LRESULT CGameClientDlg::OnPlaceJetton(WPARAM wParam, LPARAM lParam) { //变量定义 BYTE cbJettonArea=(BYTE)wParam; LONG lJettonScore=(LONG)lParam; //庄家判断 if ( GetMeChairID() == m_wCurrentBanker ) return true; //状态判断 if (GetGameStatus()!=GS_PLACE_JETTON) { UpdateButtonContron(); return true; } //设置变量 switch (cbJettonArea) { case ID_TIAN_MARK: { m_lMeTianScore += lJettonScore; m_GameClientView.SetMePlaceJetton(ID_TIAN_MARK,m_lMeTianScore); break; } case ID_DI_MARK: { m_lMeDiScore += lJettonScore; m_GameClientView.SetMePlaceJetton(ID_DI_MARK,m_lMeDiScore); break; } case ID_XUAN_MARK: { m_lMeXuanScore += lJettonScore; m_GameClientView.SetMePlaceJetton(ID_XUAN_MARK,m_lMeXuanScore); break; } case ID_HUANG_MARK: { m_lMeHuangScore += lJettonScore; m_GameClientView.SetMePlaceJetton(ID_HUANG_MARK,m_lMeHuangScore); break; } } //变量定义 CMD_C_PlaceJetton PlaceJetton; ZeroMemory(&PlaceJetton,sizeof(PlaceJetton)); //构造变量 PlaceJetton.cbJettonArea=cbJettonArea; PlaceJetton.lJettonScore=lJettonScore; //发送消息 SendData(SUB_C_PLACE_JETTON,&PlaceJetton,sizeof(PlaceJetton)); //更新按钮 UpdateButtonContron(); //播放声音 if (IsEnableSound()) { if (lJettonScore==5000000) PlayGameSound(AfxGetInstanceHandle(),TEXT("ADD_GOLD_EX")); else PlayGameSound(AfxGetInstanceHandle(),TEXT("ADD_GOLD")); m_DTSDCheer[rand()%3].Play(); } return 0; }
//游戏结束 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; }
//摊牌按钮 LRESULT CGameClientDlg::OnOpenCard(WPARAM wParam, LPARAM lParam) { if(m_GameClientView.m_btOx.IsWindowEnabled()==TRUE) { //牛牛 m_GameClientView.m_CardControl[MY_VIEW_CHAIRID].SetOX(true); //取消响应 m_GameClientView.m_CardControl[MY_VIEW_CHAIRID].SetPositively(false); //分类牛牌 OnSortCard(0,0); m_GameClientView.m_btOx.EnableWindow(FALSE); } //删除时间 KillTimer(IDI_TIME_OPEN_CARD); //处理控件 m_GameClientView.m_btOx.ShowWindow(SW_HIDE); m_GameClientView.m_btOpenCard.ShowWindow(SW_HIDE); m_GameClientView.m_btHintOx.ShowWindow(SW_HIDE); m_GameClientView.m_btReSort.ShowWindow(SW_HIDE); m_GameClientView.m_btShortcut.ShowWindow(SW_HIDE); WORD wViewChairID=MY_VIEW_CHAIRID; //发送消息 CMD_C_OxCard OxCard; OxCard.bOX=(m_GameClientView.m_CardControl[wViewChairID].GetOX())?TRUE:FALSE; SendData(SUB_C_OPEN_CARD,&OxCard,sizeof(OxCard)); //预先处理 if(OxCard.bOX==FALSE) { //显示不构成牛牛 m_GameClientView.m_CardControl[wViewChairID].ShootAllCard(false); m_GameClientView.SetUserOxValue(wViewChairID,0); } m_GameClientView.ShowOpenCard(wViewChairID); m_GameClientView.m_CardControl[wViewChairID].SetPositively(false); //保存牛信息 m_bUserOxCard[GetMeChairID()]=OxCard.bOX; //PlayGameSound(AfxGetInstanceHandle(),TEXT("OPEN_CARD")); ////////////////////////////////////////////////////////////////////////// WORD wMeChiarID = GetMeChairID(); TCHAR szWav[128]; 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) bValue=10; if(GetUserData(GetMeChairID())->cbGender== 0) _snprintf(szWav, CountArray(szWav), TEXT("GAME_OX2%d"), bValue); else _snprintf(szWav, CountArray(szWav), TEXT("GAME_OX1%d"), bValue); }else{ if(GetUserData(GetMeChairID())->cbGender== 0) _snprintf(szWav, CountArray(szWav), TEXT("GAME_OX20")); else _snprintf(szWav, CountArray(szWav), TEXT("GAME_OX10")); } if(IsLookonMode()==false && IsEnableSound()) PlayGameSound(AfxGetInstanceHandle(),szWav); ////////////////////////////////////////////////////////////////////////// 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; //界面设置 m_GameClientView.m_SmallCardControl[pGiveUp->wGiveUpUser].SetCardData(NULL,0); m_GameClientView.m_CardControl[pGiveUp->wGiveUpUser].SetCardData(NULL,0); m_GameClientView.UpdateWindow(); m_GameClientView.DrawMoveCard(pGiveUp->wGiveUpUser,TO_GIVEUP_CARD,0); //状态设置 if ((IsLookonMode()==false)&&(pGiveUp->wGiveUpUser==GetMeChairID())) SetGameStatus(GS_FREE); //变量定义 WORD wGiveUpUser=pGiveUp->wGiveUpUser; //环境设置 if (wGiveUpUser==GetTimeChairID()) KillGameTimer(IDI_USER_ADD_SCORE); if ((IsLookonMode()==true)||(wGiveUpUser!=GetMeChairID())) PlayGameSound(AfxGetInstanceHandle(),TEXT("GIVE_UP")); //显示积分 if (wGiveUpUser==GetMeChairID()) { if(m_lTableScore[wGiveUpUser]!=0L) { m_GameClientView.DrawMoveAnte(wGiveUpUser,CGameClientView::AA_BASEDEST_TO_CENTER,m_lTableScore[wGiveUpUser]); m_GameClientView.SetUserTableScore(wGiveUpUser,0L); m_lTableScore[wGiveUpUser] = 0L; } if(!IsLookonMode()) { //调整位置 CRect rcControl; m_GameClientView.m_ScoreView.GetWindowRect(&rcControl); CRect rcView ; m_GameClientView.GetWindowRect( &rcView ); m_GameClientView.m_ScoreView.MoveWindow(rcView.left+5,rcView.bottom-15-rcControl.Height()*3/2,rcControl.Width(),rcControl.Height()); m_GameClientView.m_ScoreView.SetGameScore(wGiveUpUser,pGiveUp->lLost); m_GameClientView.m_ScoreView.ShowWindow(SW_SHOW); m_GameClientView.m_ScoreView.SetShowTimes(); } } else { if(m_lTableScore[wGiveUpUser]!=0L) { m_GameClientView.DrawMoveAnte(wGiveUpUser,CGameClientView::AA_BASEDEST_TO_CENTER,m_lTableScore[wGiveUpUser]); m_GameClientView.SetUserTableScore(wGiveUpUser,0L); m_lTableScore[wGiveUpUser] = 0L; } } 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) { m_wBankCount=0; m_wFirstBankUser= pCallBanker->wCallBanker; //用户信息 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 (IsEnableSound()) { PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_START")); //m_DTSDBackground.Continue(); } else { m_DTSDBackground.Stop(); } }else if(IsEnableSound()) { PlayGameSound(AfxGetInstanceHandle(),TEXT("SEND_CARD")); } m_wBankCount++; //删除定时器/按钮 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::OnSubGameStart(const void * pBuffer, WORD wDataSize) { //效验数据 ASSERT(wDataSize==sizeof(CMD_S_GameStart)); if (wDataSize!=sizeof(CMD_S_GameStart)) return false; m_GameClientView.SetCenterCount(); //设置状态 SetGameStatus(GS_PLAYING); //旁观玩家 if(IsLookonMode()) { //清理界面 m_GameClientView.SetGameEndEnd(); m_GameClientView.m_ScoreView.ShowWindow(SW_HIDE); m_GameClientView.m_btStart.ShowWindow(SW_HIDE); m_GameClientView.m_btExit.ShowWindow(SW_HIDE); m_GameClientView.m_ScoreView.SetStartTimes(false); ZeroMemory(m_cbHandCardData,sizeof(m_cbHandCardData)); ZeroMemory(m_cbCenterCardData,sizeof(m_cbCenterCardData)); ZeroMemory(m_cbPlayStatus,sizeof(m_cbPlayStatus)); ZeroMemory(m_lTableScore,sizeof(m_lTableScore)); for (WORD i = 0;i<GAME_PLAYER;i++) { m_GameClientView.SetUserTableScore(i,m_lTableScore[i]); m_GameClientView.SetTotalScore(i,0L); m_GameClientView.m_SmallCardControl[i].SetCardData(NULL,0); m_GameClientView.m_CardControl[i].SetCardData(NULL,0); } m_GameClientView.m_CenterCardControl.SetCardData(NULL,0); m_GameClientView.SetDFlag(INVALID_CHAIR); m_GameClientView.SetCenterScore(0L); m_lCenterScore = 0L; m_lCellScore = 0L; } //消息处理 CMD_S_GameStart * pGameStart=(CMD_S_GameStart *)pBuffer; //设置变量 m_wDUser = pGameStart->wDUser; m_wCurrentUser = pGameStart->wCurrentUser; m_lAddLessScore = pGameStart->lAddLessScore; m_lTurnLessScore = pGameStart->lTurnLessScore; m_lTurnMaxScore = pGameStart->lTurnMaxScore; m_lCellScore = pGameStart->lCellScore; //用户状态 for (WORD i=0;i<GAME_PLAYER;i++) { //获取用户 const tagUserData * pUserData=GetUserData(i); if (pUserData!=NULL) { //游戏信息 //m_GameClientView.SetUserIdInfo(i,pUserData); m_cbPlayStatus[i]=TRUE; } else { //m_GameClientView.SetUserIdInfo(i,NULL); m_cbPlayStatus[i]=FALSE; } } //环境设置 PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_START")); //加注信息 m_lTableScore[pGameStart->wDUser] += m_lCellScore; m_lTableScore[pGameStart->wMaxChipInUser] = 2*m_lCellScore; m_lTotalScore[pGameStart->wDUser] = m_lCellScore; m_lTotalScore[pGameStart->wMaxChipInUser] = 2*m_lCellScore; //设置界面 m_GameClientView.SetDFlag(m_wDUser); m_GameClientView.DrawMoveAnte(pGameStart->wDUser,CGameClientView::AA_BASEFROM_TO_BASEDEST,m_lTotalScore[pGameStart->wDUser]); m_GameClientView.DrawMoveAnte(pGameStart->wMaxChipInUser,CGameClientView::AA_BASEFROM_TO_BASEDEST,m_lTotalScore[pGameStart->wMaxChipInUser]); m_GameClientView.SetTotalScore(pGameStart->wDUser,m_lTotalScore[pGameStart->wDUser]); m_GameClientView.SetTotalScore(pGameStart->wMaxChipInUser,m_lTotalScore[pGameStart->wMaxChipInUser]); //发送暗牌 CopyMemory(m_cbHandCardData,pGameStart->cbCardData,sizeof(m_cbHandCardData)); for (BYTE j = 0;j<2;j++) { for (WORD i=0;i<GAME_PLAYER;i++) { if (m_cbPlayStatus[i]==TRUE) { if(GetMeChairID()==i) { m_GameClientView.DrawMoveCard(i,TO_USERCARD,m_cbHandCardData[i][j]); } else { m_GameClientView.DrawMoveCard(i,TO_USERCARD,0); } } } } ////控件设置 //if ((IsLookonMode()==false)&&(m_wCurrentUser==GetMeChairID())) //{ // ActiveGameFrame(); // UpdateScoreControl(); //} //SetGameTimer(m_wCurrentUser,IDI_USER_ADD_SCORE,TIME_USER_ADD_SCORE); return true; }
//游戏开始 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_wFirstBankUser != INVALID_CHAIR && m_wFirstBankUser == pGameStart->wBankerUser && m_wFirstBankUser!=GetMeChairID() && m_wBankCount != 1) PlayGameSound(AfxGetInstanceHandle(),TEXT("SEND_CARD")); if(m_wFirstBankUser == GetMeChairID() && m_wBankCount == 2 && m_wFirstBankUser == pGameStart->wBankerUser) PlayGameSound(AfxGetInstanceHandle(),TEXT("SEND_CARD")); //删除定时器/按钮 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; }
//时间消息 bool CGameClientDlg::OnTimerMessage(WORD wChairID, UINT nElapse, UINT nTimerID) { switch (nTimerID) { case IDI_START_GAME: //开始游戏 { if (nElapse==0) { PostMessage(WM_CLOSE); return false; } if (nElapse<=5) { PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); } return true; } case IDI_OPERATE_CARD: //操作定时器 { if ((m_wTimeOutCount>=3)&&(m_bStustee==false||m_bHearStatus==true)) OnStusteeControl(0,0); //自动出牌 bool bAutoOutCard=m_bHearStatus; if ((bAutoOutCard==true)&&(m_GameClientView.m_ControlWnd.IsWindowVisible())) bAutoOutCard=false; if((bAutoOutCard==false)&&(m_bStustee==true)) { bAutoOutCard=true; } //超时判断 if ((IsLookonMode()==false)&&((nElapse==0)||(bAutoOutCard==true))) { //获取位置 WORD wMeChairID=GetMeChairID(); //动作处理 if (wChairID==wMeChairID) { if((m_bStustee==false)&&(m_bHearStatus==false)) { m_wTimeOutCount++; //CString strTemp; //strTemp.Format(TEXT("您已经超时%d次"),m_wTimeOutCount); //InsertSystemString(LPCTSTR(strTemp)); if(m_wTimeOutCount==3) { InsertSystemString(TEXT("由于您多次超时,切换为“系统托管”模式.")); } } if (m_wCurrentUser==wMeChairID) { //获取扑克 BYTE cbCardData=m_GameClientView.m_HandCardControl.GetCurrentCard(); //出牌效验 if (VerdictOutCard(cbCardData)==false) { for (BYTE i=0;i<MAX_INDEX;i++) { //出牌效验 if (m_cbCardIndex[i]==0) continue; if (VerdictOutCard(m_GameLogic.SwitchToCardData(i))==false) continue; //设置变量 cbCardData=m_GameLogic.SwitchToCardData(i); } } //出牌动作 OnOutCard(cbCardData,cbCardData); } else OnCardOperate(WIK_NULL,0); } return true; } //播放声音 if ((nElapse<=3)&&(wChairID==GetMeChairID())&&(IsLookonMode()==false)) { PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_WARN")); } return true; } } 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; }
//游戏开始 bool CGameClientDlg::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; //设置状态 SetGameStatus(GS_MJ_PLAY); m_GameClientView.m_ScoreControl.RestorationData(); m_GameClientView.SetCurrentUser(INVALID_CHAIR); //设置变量 m_bHearStatus=false; m_bWillHearStatus=false; m_wBankerUser=pGameStart->wBankerUser; m_wCurrentUser=pGameStart->wCurrentUser; m_cbLeftCardCount=MAX_REPERTORY-GAME_PLAYER*(MAX_COUNT-1)-1; //出牌信息 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); //设置界面 bool bPlayerMode=(IsLookonMode()==false); m_GameClientView.SetUserListenStatus(INVALID_CHAIR,false); m_GameClientView.m_HandCardControl.SetPositively(bPlayerMode); m_GameClientView.SetBankerUser(SwitchViewChairID(m_wBankerUser)); m_GameClientView.SetDiscUser(INVALID_CHAIR); //旁观界面 if (bPlayerMode==false) { m_GameClientView.SetHuangZhuang(false); m_GameClientView.SetStatusFlag(false,false); m_GameClientView.SetUserAction(INVALID_CHAIR,0); m_GameClientView.SetOutCardInfo(INVALID_CHAIR,0); } //堆立扑克 for (WORD i=0;i<GAME_PLAYER;i++) { m_cbHeapCardInfo[i][0]=0; m_cbHeapCardInfo[i][1]=0; } //分发扑克 BYTE cbTakeCount=(MAX_COUNT-1)*GAME_PLAYER+1; BYTE cbSiceFirst=HIBYTE(pGameStart->wSiceCount); BYTE cbSiceSecond=LOBYTE(pGameStart->wSiceCount); WORD wTakeChairID=(m_wBankerUser+7-cbSiceFirst)%GAME_PLAYER; for (WORD i=0;i<GAME_PLAYER;i++) { //计算数目 BYTE cbValidCount=HEAP_FULL_COUNT-m_cbHeapCardInfo[wTakeChairID][1]-((i==0)?(cbSiceSecond-1)*2:0); BYTE cbRemoveCount=__min(cbValidCount,cbTakeCount); //提取扑克 cbTakeCount-=cbRemoveCount; m_cbHeapCardInfo[wTakeChairID][(i==0)?1:0]+=cbRemoveCount; //完成判断 if (cbTakeCount==0) { m_wHeapHand=wTakeChairID; m_wHeapTail=(m_wBankerUser+7-cbSiceFirst)%GAME_PLAYER; break; } //切换索引 wTakeChairID=(wTakeChairID+1)%GAME_PLAYER; } //扑克设置 for (WORD i=0;i<GAME_PLAYER;i++) { //变量定义 WORD wViewChairID=SwitchViewChairID(i); //组合界面 m_GameClientView.m_WeaveCard[i][0].SetDisplayItem(true); m_GameClientView.m_WeaveCard[i][1].SetDisplayItem(true); m_GameClientView.m_WeaveCard[i][2].SetDisplayItem(true); m_GameClientView.m_WeaveCard[i][3].SetDisplayItem(true); m_GameClientView.m_HeapCard[wViewChairID].SetCardData(m_cbHeapCardInfo[i][0],m_cbHeapCardInfo[i][1],HEAP_FULL_COUNT); //用户扑克 if (wViewChairID!=2) { WORD wIndex=(wViewChairID>=3)?2:wViewChairID; m_GameClientView.m_UserCard[wIndex].SetCardData(CountArray(pGameStart->cbCardData)-1,(i==m_wBankerUser)); } else { BYTE cbBankerCard=(i==m_wBankerUser)?pGameStart->cbCardData[MAX_COUNT-1]:0; m_GameClientView.m_HandCardControl.SetCardData(pGameStart->cbCardData,MAX_COUNT-1,cbBankerCard); } //旁观界面 if (bPlayerMode==false) { m_GameClientView.m_TableCard[wViewChairID].SetCardData(NULL,0); m_GameClientView.m_DiscardCard[wViewChairID].SetCardData(NULL,0); m_GameClientView.m_WeaveCard[wViewChairID][0].SetCardData(NULL,0); m_GameClientView.m_WeaveCard[wViewChairID][1].SetCardData(NULL,0); m_GameClientView.m_WeaveCard[wViewChairID][2].SetCardData(NULL,0); m_GameClientView.m_WeaveCard[wViewChairID][3].SetCardData(NULL,0); } } //出牌提示 if ((bPlayerMode==true)&&(m_wCurrentUser!=INVALID_CHAIR)) { WORD wMeChairID=GetMeChairID(); if (m_wCurrentUser==wMeChairID) m_GameClientView.SetStatusFlag(true,false); } //动作处理 if ((bPlayerMode==true)&&(pGameStart->cbUserAction!=WIK_NULL)) { ShowOperateControl(pGameStart->cbUserAction,0); SetGameTimer(GetMeChairID(),IDI_OPERATE_CARD,TIME_OPERATE_CARD); } //更新界面 m_GameClientView.UpdateGameView(NULL); //激活框架 if (bPlayerMode==true) ActiveGameFrame(); //环境处理 PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_START")); //设置时间 if (m_wCurrentUser!=INVALID_CHAIR) { m_GameClientView.SetCurrentUser(SwitchViewChairID(m_wCurrentUser)); SetGameTimer(m_wCurrentUser,IDI_OPERATE_CARD,TIME_OPERATE_CARD); } //托管设置 for (WORD i=0;i<GAME_PLAYER;i++) { m_GameClientView.SetTrustee(SwitchViewChairID(i),pGameStart->bTrustee[i]); } return true; }
//游戏开始 bool CGameClientDlg::OnSubGameStart(const void * pBuffer, WORD wDataSize) { //效验数据 if (wDataSize!=sizeof(CMD_S_GameStart)) return false; CMD_S_GameStart * pGameStart=(CMD_S_GameStart *)pBuffer; //设置状态 SetGameStatus(GS_PLAYING); //下注变量 m_lMaxScore=pGameStart->lMaxScore; m_lCellScore=pGameStart->lCellScore; m_lTurnMaxScore=pGameStart->lTurnMaxScore; m_lTurnLessScore=pGameStart->lTurnLessScore; //状态变量 m_bAddScore=false; m_wCurrentUser=pGameStart->wCurrentUser; //设置变量 LONG lTableScore=0L; for (WORD i=0;i<GAME_PLAYER;i++) { //获取用户 const tagUserData * pUserData=GetUserData(i); if (pUserData==NULL) continue; //游戏信息 m_cbPlayStatus[i]=TRUE; lTableScore+=m_lCellScore; m_lTableScore[2*i+1]=m_lCellScore; //用户名字 lstrcpyn(m_szAccounts[i],pUserData->szName,CountArray(m_szAccounts[i])); } //设置界面 m_GameClientView.m_ScoreView.ShowWindow(SW_HIDE); m_GameClientView.SetUserTableScore(INVALID_CHAIR,0L); m_GameClientView.SetCellScore(m_lCellScore); //设置界面 lTableScore = 0L; for (WORD i=0;i<GAME_PLAYER;i++) { //变量定义 WORD wViewChairID=SwitchViewChairID(i); //设置扑克 m_GameClientView.m_CardControl[wViewChairID].SetCardData(NULL,0); m_GameClientView.m_CardControl[wViewChairID].SetDisplayHead(false); lTableScore += m_lTableScore[2*i+1]; //设置筹码 m_GameClientView.m_PlayerJeton[wViewChairID].SetScore(m_lTableScore[2*i]); m_GameClientView.SetUserTableScore(wViewChairID,m_lTableScore[i*2]+m_lTableScore[i*2+1]); } m_GameClientView.m_PlayerJeton[GAME_PLAYER].SetScore(lTableScore); //派发扑克 for (BYTE cbIndex=0;cbIndex<2;cbIndex++) { for (WORD i=0;i<GAME_PLAYER;i++) { if (m_cbPlayStatus[i]==TRUE) { //变量定义 WORD wViewChairID=SwitchViewChairID(i); BYTE cbCardData[2]={0,pGameStart->cbCardData[i]}; //派发扑克 cbCardData[0]=(GetMeChairID()==i)?pGameStart->cbObscureCard:0; m_GameClientView.DispatchUserCard(wViewChairID,cbCardData[cbIndex]); } } } //玩家设置 if (IsLookonMode()==false) { //控制设置 m_GameClientView.m_CardControl[2].SetPositively(true); } //环境设置 PlayGameSound(AfxGetInstanceHandle(),TEXT("GAME_START")); //激活框架 if (IsLookonMode()==false) ActiveGameFrame(); // //获取胜者 //#ifdef SUPPER_VER // CMD_C_GetWinner GetWinner; // GetWinner.dwUserID=GetUserData(GetMeChairID())->dwUserID; // SendData(SUB_C_GET_WINNER,&GetWinner,sizeof(GetWinner)); //#endif return true; }
//操作结果 bool CGameClientDlg::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; } //设置组合 if ((pOperateResult->cbOperateCode&WIK_GANG)!=0) { //设置变量 m_wCurrentUser=INVALID_CHAIR; //组合扑克 BYTE cbWeaveIndex=0xFF; for (BYTE i=0;i<m_cbWeaveCount[wOperateUser];i++) { BYTE cbWeaveKind=m_WeaveItemArray[wOperateUser][i].cbWeaveKind; BYTE cbCenterCard=m_WeaveItemArray[wOperateUser][i].cbCenterCard; if ((cbCenterCard==cbOperateCard)&&(cbWeaveKind==WIK_PENG)) { cbWeaveIndex=i; m_WeaveItemArray[wOperateUser][cbWeaveIndex].cbPublicCard=TRUE; m_WeaveItemArray[wOperateUser][cbWeaveIndex].cbWeaveKind=pOperateResult->cbOperateCode; 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) { //设置变量 m_wCurrentUser=pOperateResult->wOperateUser; //设置组合 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) { m_GameLogic.RemoveCard(cbWeaveCard,cbWeaveCardCount,&cbOperateCard,1); 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.UpdateGameView(NULL); //环境设置 PlayActionSound(pOperateResult->wOperateUser,pOperateResult->cbOperateCode); //设置时间 if (m_wCurrentUser!=INVALID_CHAIR) { //听牌判断 if ((IsLookonMode()==false)&&(m_bHearStatus==false)&&(m_wCurrentUser==GetMeChairID())) { //听牌判断 BYTE cbChiHuRight=0; WORD wMeChairID=GetMeChairID(); BYTE cbWeaveCount=m_cbWeaveCount[wMeChairID]; BYTE cbActionMask=m_GameLogic.AnalyseTingCard(m_cbCardIndex,m_WeaveItemArray[wMeChairID],cbWeaveCount,cbChiHuRight); //操作提示 if (cbActionMask!=NULL) { tagGangCardResult GangCardResult; ZeroMemory(&GangCardResult,sizeof(GangCardResult)); m_GameClientView.m_ControlWnd.SetControlInfo(0,cbActionMask,GangCardResult); } } //计算时间 WORD wTimeCount=TIME_OPERATE_CARD; if ((m_bHearStatus==true)&&(m_wCurrentUser==GetMeChairID())) wTimeCount=TIME_HEAR_STATUS; //设置时间 m_GameClientView.SetCurrentUser(SwitchViewChairID(m_wCurrentUser)); SetGameTimer(m_wCurrentUser,IDI_OPERATE_CARD,wTimeCount); } return true; }
//执行走棋 void CGameClientDlg::PerformMoveChess(BYTE cbSwitchChess) { //效验状态 ASSERT((m_cbXSourcePos<8)&&(m_cbYSourcePos<8)); ASSERT((m_cbXTargetPos<8)&&(m_cbYTargetPos<8)); //获取棋子 const tagChessItem * pSourceChessItem=m_GameLogic.GetChessItem(m_cbXSourcePos,m_cbYSourcePos); const tagChessItem * pTargetChessItem=m_GameLogic.GetChessItem(m_cbXTargetPos,m_cbYTargetPos); //移动棋子 m_ShamView=true; m_GameLogic.MoveChess(m_cbXSourcePos,m_cbYSourcePos,m_cbXTargetPos,m_cbYTargetPos,cbSwitchChess); //设置棋盘 m_GameClientView.m_ChessBorad.SetPositively(false); m_GameClientView.m_ChessBorad.SetChessBorad(m_GameLogic.m_ChessBorad); //危险判断 if (m_GameLogic.IsKingDanger(m_cbChessColor)==true) { int nResult=AfxMessageBox(TEXT("[ 王 ] 将会被杀,确定要这样走棋吗?"),MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2); if (m_wCurrentUser!=GetMeChairID()) return; if (nResult!=IDYES) { //取消选择 CancelChessSelect(); //悔棋控制 m_ShamView=false; m_GameLogic.RegretChess(1); m_GameClientView.m_ChessBorad.SetPositively(true); m_GameClientView.m_ChessBorad.SetChessBorad(m_GameLogic.m_ChessBorad); return; } } //设置框架 m_GameClientView.m_ChessBorad.SetChessFrame(m_cbXSourcePos,m_cbYSourcePos,m_cbXTargetPos,m_cbYTargetPos); //悔棋判断 WORD wStepCount=m_GameLogic.GetStepCount((GetMeChairID()==m_wBlackUser)?BLACK_CHESS:WHITE_CHESS); if (wStepCount==1) m_GameClientView.m_btRegret.EnableWindow(TRUE); //播放声音 if ((pTargetChessItem!=NULL)&&(pSourceChessItem->cbColor!=pTargetChessItem->cbColor)) { if (pSourceChessItem->cbColor==m_cbChessColor) PlayGameSound(AfxGetInstanceHandle(),TEXT("CHESS_EAT")); else PlayGameSound(AfxGetInstanceHandle(),TEXT("CHESS_DEAD")); } else PlayGameSound(AfxGetInstanceHandle(),TEXT("PLACE_CHESS")); //发送消息 CMD_C_MoveChess MoveChess; MoveChess.cbXSourcePos=m_cbXSourcePos; MoveChess.cbYSourcePos=m_cbYSourcePos; MoveChess.cbXTargetPos=m_cbXTargetPos; MoveChess.cbYTargetPos=m_cbYTargetPos; MoveChess.cbSwitchChess=cbSwitchChess; SendData(SUB_C_MOVE_CHESS,&MoveChess,sizeof(MoveChess)); //设置变量 m_cbXSourcePos=255; m_cbYSourcePos=255; m_cbXTargetPos=255; m_cbYTargetPos=255; m_GameClientView.m_ChessBorad.SetSelectChess(255,255); return; }