📄 clientgamedlg.cpp
字号:
}
case ASS_SEND_CARD: //服务器发牌
{
if (uDataSize!=sizeof(SendCardStruct)) return FALSE;
SendCardStruct * pSendCard=(SendCardStruct *)pNetData;
m_iMeCardList[m_iMeCardCount++]=pSendCard->iCard;
//m_Logic.SortCard(m_iMeCardList,NULL,m_iMeCardCount);
//m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);
// if(m_pGameInfo->bEnableSound)
// PlaySound("tml\\OutCard.wav",NULL,SND_ASYNC|SND_FILENAME);
return TRUE;
}
case ASS_SEND_FINISH: //发牌完成
{
// if (uDataSize!=sizeof(NetMessageHead)) return FALSE;
//SetClock(GetMeUserInfo()->bDeskStation,pNetHead->bHandleCode,ID_WAIT_ROB);
m_Logic.SetDaoCard((BYTE)pNetHead->bHandleCode);
m_PlayView.m_StationView.SetDaoCardInfo(m_Logic.GetCardNum((BYTE)pNetHead->bHandleCode),TRUE,m_bFlagNextHalf);
m_Logic.SortCard(m_iMeCardList,NULL,m_iMeCardCount);
m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);
if(m_pGameInfo->bEnableSound)
PlaySound("tml\\OutCard.wav",NULL,SND_ASYNC|SND_FILENAME);
return TRUE;
}
case ASS_GAME_PLAY: //开始升级游戏
{
if (uDataSize!=sizeof(BeginPlayStruct)) return FALSE;
BeginPlayStruct * pBeginInfo=(BeginPlayStruct *)pNetData;
m_bTimeOutCount=0;
SetStationParameter(GS_PLAY_GAME);
m_PlayView.m_btBackCard.EnableWindow(TRUE);
m_iNowOutPeople=m_iFirstOutPeople=pBeginInfo->iOutDeskStation;
if ((m_bWatchMode==FALSE)&&(GetMeUserInfo()->bDeskStation==m_iNowOutPeople))
{
m_PlayView.m_btOutCard.ShowWindow(SW_SHOW);
m_PlayView.m_btPass.EnableWindow(FALSE);
m_PlayView.m_btPass.ShowWindow(SW_SHOW);
OnHitCard(0,0);
}
for (int i=0;i<4;i++) m_PlayView.m_UserCard[i].SetCard(NULL,NULL,0);
m_PlayView.m_GameNoteView.SetMessage(NULL);
SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
if(m_pGameInfo->bEnableSound)
PlaySound("tml\\BeginGame.wav",NULL,SND_ASYNC|SND_FILENAME);
return TRUE;
}
case ASS_OUT_CARD: //用户出牌
{
OutCardMsg * pOutCardInfo=(OutCardMsg *)pNetData;
KillAllTimer();
if(m_pGameInfo->bEnableSound)
PlaySound("tml\\OutCard.wav",NULL,SND_ASYNC|SND_FILENAME);
//上一轮数据
if (m_bShowIngLast)
{
m_bShowIngLast=FALSE;
KillTimer(ID_SHOW_LAST);
for (int i=0;i<4;i++)
m_PlayView.m_UserCard[ViewStation(i)].SetCard(m_DeskCard[i],NULL,m_iDeskCardCount[i]);
}
m_iDeskCardCount[pOutCardInfo->bDeskStation]=pOutCardInfo->iCardCount;
::CopyMemory(m_DeskCard[pOutCardInfo->bDeskStation],pOutCardInfo->iCardList,sizeof(BYTE)*pOutCardInfo->iCardCount);
m_iBaseCount=pOutCardInfo->iCardCount;
::CopyMemory(m_iBaseCard,pOutCardInfo->iCardList,sizeof(BYTE)*m_iBaseCount);
//判断是否第一个出牌者
if (m_iLastOutPeople < 0)//pOutCardInfo->bDeskStation==m_iFirstOutPeople)
{
///m_iBaseCount=pOutCardInfo->iCardCount;
//::CopyMemory(m_iBaseCard,pOutCardInfo->iCardList,sizeof(BYTE)*m_iBaseCount);
for (int i=0;i<4;i++)
{
m_PlayView.m_UserCard[i].SetCard(NULL,NULL,0);
m_PlayView.m_PassCard[i].ShowWindow(SW_HIDE);
}
}
m_iLastOutPeople = pOutCardInfo->bDeskStation;
//删除自己的扑克
if (pOutCardInfo->bDeskStation==GetMeUserInfo()->bDeskStation)
{
m_Logic.RemoveCard(pOutCardInfo->iCardList,pOutCardInfo->iCardCount,m_iMeCardList,m_iMeCardCount);
m_iMeCardCount-=pOutCardInfo->iCardCount;
m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);
}
//显示扑克
int iViewStation=ViewStation(pOutCardInfo->bDeskStation);
m_PlayView.m_UserCard[iViewStation].SetCard(pOutCardInfo->iCardList,NULL,pOutCardInfo->iCardCount);
//判断下一出牌者
int iStation = ViewStation(pOutCardInfo->iNextDeskStation);
m_PlayView.m_PassCard[iStation].ShowWindow(SW_HIDE);
m_iNowOutPeople=pOutCardInfo->iNextDeskStation;
if ((m_iNowOutPeople==GetMeUserInfo()->bDeskStation)&&(m_bWatchMode==FALSE))
{
m_PlayView.m_btOutCard.ShowWindow(SW_SHOW);
m_PlayView.m_btPass.EnableWindow(TRUE);
m_PlayView.m_btPass.ShowWindow(SW_SHOW);
OnHitCard(0,0);
}
if (m_iNowOutPeople!=-1) SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
return TRUE;
}
/*case ASS_GAME_POINT: //用户分数
{
if (uDataSize!=sizeof(GamePointStruct)) return FALSE;
GamePointStruct * pPoint=(GamePointStruct *)pNetData;
if(pPoint->bAdd)
{
int iCardCount=0,iCardNum=0;
BYTE iTempCard[36];
for (int i=0;i<4;i++)
{
for (int j=0;j<m_iDeskCardCount[i];j++)
{
iCardNum=m_Logic.GetCardNum(m_DeskCard[i][j]);
if ((iCardNum==5)||(iCardNum==10)||(iCardNum==13)) iTempCard[iCardCount++]=m_DeskCard[i][j];
}
}
m_PlayView.m_StationView.AddPointCard(iTempCard,iCardCount);
}
if(pPoint->iPoint!=0)
m_PlayView.SetGamePoint(pPoint->iPoint);
// if(m_PlayView.m_iGamePoint>=80 && m_PlayView.m_bMeSide && !m_bWatchMode)
m_PlayView.m_btStop.EnableWindow(true);
return TRUE;
}*/
case ASS_NEW_TURN: //新一轮出牌
{
m_iNowOutPeople=m_iFirstOutPeople=(BYTE)pNetHead->bHandleCode;
m_iLastOutPeople = -1;
int iStation = ViewStation(m_iNowOutPeople);
m_PlayView.m_PassCard[iStation].ShowWindow(SW_HIDE);
if ((m_bWatchMode==false)&&(GetMeUserInfo()->bDeskStation==m_iNowOutPeople))
{
m_PlayView.m_btOutCard.ShowWindow(SW_SHOW);
m_PlayView.m_btPass.EnableWindow(FALSE);
m_PlayView.m_btPass.ShowWindow(SW_SHOW);
OnHitCard(0,0);
}
SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
//保存上轮扑克
if (m_bShowIngLast)
{
m_bShowIngLast=FALSE;
KillTimer(ID_SHOW_LAST);
for (int i=0;i<4;i++)
m_PlayView.m_UserCard[ViewStation(i)].SetCard(m_DeskCard[i],NULL,m_iDeskCardCount[i]);
}
m_bShowLast=TRUE;
m_iLastCardCount=m_iDeskCardCount[0];
::CopyMemory(&m_iLastOutCard,&m_DeskCard,sizeof(m_DeskCard));
//m_PlayView.m_btLastTurn.EnableWindow(TRUE);
//删除扑克信息
for (int i=0;i<4;i++) m_iDeskCardCount[i]=0;
return TRUE;
}
case ASS_SALE_END: //游戏安全结束
case ASS_CUT_END: //用户强行离开
{
if (uDataSize!=sizeof(GameCutStruct)) return FALSE;
GameCutStruct * pGameEnd=(GameCutStruct *)pNetData;
KillClock(0);
if(pGameEnd->bDeskStation != GetMeUserInfo()->bDeskStation)
{
//显示信息
TCHAR szMessage[100];
if (pNetHead->bAssistantID==ASS_CUT_END)
sprintf(szMessage,TEXT("由于〖 %s 〗强行退出,游戏结束。"),m_pUserInfo[pGameEnd->bDeskStation]->GameUserInfo.szName);
else
sprintf(szMessage,TEXT("由于〖 %s 〗离开,游戏结束。"),m_pUserInfo[pGameEnd->bDeskStation]->GameUserInfo.szName);
m_PlayView.m_StationView.CleanAllInfo(TRUE);
m_MessageHandle.InsertNormalMessage(szMessage);
}
if(m_pGameInfo->bEnableSound)
PlaySound("tml\\GameOver.wav",NULL,SND_ASYNC|SND_FILENAME);
SetStationParameter(GS_WAIT_SETGAME);
KillAllTimer();
//上一轮数据
if (m_bShowIngLast)
{
m_bShowIngLast=FALSE;
KillTimer(ID_SHOW_LAST);
for (int i=0;i<4;i++)
m_PlayView.m_UserCard[ViewStation(i)].SetCard(m_DeskCard[i],NULL,m_iDeskCardCount[i]);
}
m_bShowLast=FALSE;
m_iLastCardCount=0;
ResetGameStation(RS_GAME_CUT);
//设置牌局
if ((GetMeUserInfo()->bDeskStation==0)&&(m_bWatchMode==FALSE))
m_PlayView.m_GameSet.SetGameSetInfo(m_iCardCount);
else m_PlayView.m_GameNoteView.SetMessage(TEXT("正在等待东家设置牌局"));
m_bFlagNextHalf = false;
return TRUE;
}
case ASS_CONTINUE_END: //游戏结束
case ASS_NO_CONTINUE_END:
{
if (uDataSize!=sizeof(GameEndStruct)) return FALSE;
GameEndStruct * pGameEnd=(GameEndStruct *)pNetData;
KillClock(0);
//上一轮数据
if (m_bShowIngLast)
{
KillTimer(ID_SHOW_LAST);
m_bShowIngLast=FALSE;
for (int i=0;i<4;i++)
m_PlayView.m_UserCard[ViewStation(i)].SetCard(m_DeskCard[i],NULL,m_iDeskCardCount[i]);
}
m_bShowLast=FALSE;
//设置分数
m_PlayView.m_StationView.SetTurePoint(pGameEnd->iTurePoint[GetMeUserInfo()->bDeskStation]);
m_PlayView.m_MeCard.SetShowCard(false);
m_PlayView.m_MeCard.SetCard(pGameEnd->iBackList,NULL,3);
m_PlayView.m_MeCard.SetUseMouse(FALSE);
if (pNetHead->bAssistantID==ASS_NO_CONTINUE_END) //结束游戏
{
// m_PlayView.m_GameEndView.SetEndGameData(pGameEnd,m_pUserInfo,m_iPalyCardCount,this);
//在聊天框里显示成绩
m_MessageHandle.InsertNormalMessage("本局游戏结果:");
m_MessageHandle.InsertNormalMessage("------");
CString str;
for (int i=0;i<4;i++)
{
if (m_pUserInfo[i]!=NULL)
{
str.Format("%s 得分 %d",m_pUserInfo[i]->GameUserInfo.szName,pGameEnd->iTurePoint[i]);
m_MessageHandle.InsertNormalMessage(str.GetBuffer(MAX_PATH));
}
}
m_MessageHandle.InsertNormalMessage("------");
m_PlayView.m_btContinue.ShowWindow(SW_HIDE);
//设置牌局
if ((GetMeUserInfo()->bDeskStation==0)&&(m_bWatchMode==FALSE)) m_PlayView.m_GameSet.SetGameSetInfo(m_iCardCount);
else m_PlayView.m_GameNoteView.SetMessage(TEXT("正在等待东家设置牌局"));
}
else //继续游戏
{
//在聊天框里显示成绩
m_MessageHandle.InsertNormalMessage("本局游戏结果:");
m_MessageHandle.InsertNormalMessage("------");
CString str;
for (int i=0;i<4;i++)
{
if (m_pUserInfo[i]!=NULL)
{
str.Format("%s 得分 %d",m_pUserInfo[i]->GameUserInfo.szName,pGameEnd->iTurePoint[i]);
m_MessageHandle.InsertNormalMessage(str.GetBuffer(MAX_PATH));
}
}
m_MessageHandle.InsertNormalMessage("------");
if (m_bWatchMode==FALSE)
{
m_PlayView.m_btContinue.ShowWindow(SW_SHOW);
m_PlayView.m_btContinue.SetFocus();
}
SetClock(GetMeUserInfo()->bDeskStation,20,ID_BEGIN_TIME);
}
//设置数据
if(m_pGameInfo->bEnableSound)
PlaySound("tml\\GameOver.wav",NULL,SND_ASYNC|SND_FILENAME);
SetStationParameter((pNetHead->bAssistantID==ASS_CONTINUE_END)?GS_WAIT_NEXT:GS_WAIT_SETGAME);
ResetGameStation(RS_GAME_END);
m_bFlagNextHalf = false;
return TRUE;
}
case ASS_HAVE_THING: //用户请求离开
{
HaveThingStruct * pThing=(HaveThingStruct *)pNetData;
if (m_PlayView.m_ThingMessage.GetSafeHwnd()==NULL)
{
m_PlayView.m_ThingMessage.Create(IDD_THING_MESSAGE,this);
m_PlayView.m_ThingMessage.m_pParent=this;
}
m_PlayView.m_ThingMessage.SetLeaveMessage(pThing->szMessage,m_pUserInfo[pThing->pos]->GameUserInfo.szName);
m_PlayView.m_ThingMessage.ShowWindow(SW_SHOW);
return TRUE;
}
case ASS_LEFT_RESULT: //请求离开结果
{
if (uDataSize!=sizeof(LeaveResultStruct)) return FALSE;
LeaveResultStruct * pLeftResult=(LeaveResultStruct *)pNetData;
CString strBuffer;
if (!pLeftResult->bArgeeLeave)
// strBuffer.Format(TEXT("玩家 %s 同意游戏结束。"),m_UserInfo[pLeftResult->bDeskStation].szName);
// else
{
strBuffer.Format(TEXT("玩家 %s 不同意游戏结束。但本局结束后,申请离开者可以离开。"),m_pUserInfo[pLeftResult->bDeskStation]->GameUserInfo.szName);
m_MessageHandle.InsertNormalMessage(strBuffer.GetBuffer(MAX_PATH));
}
return TRUE;
}
case ASS_MESSAGE:
{
if (uDataSize!=sizeof(MessageStruct))
{
AfxMessageBox("435435");
return FALSE;
}
MessageStruct *pMessage=(MessageStruct*)pNetData;
m_MessageHandle.InsertSystemMessage(pMessage->Message);
return true;
}
case ASS_STOP_THING://对家请求提前结束
{
if (m_PlayView.m_StopMessage.GetSafeHwnd()==NULL)
{
m_PlayView.m_StopMessage.Create(IDD_STOP_MESSAGE,this);
m_PlayView.m_StopMessage.m_pParent=this;
}
m_PlayView.m_StopMessage.ShowWindow(SW_SHOW);
return true;
}
case ASS_AGREE_STOP://请求提前结束结果
{
if (uDataSize!=sizeof(StopResultStruct))return FALSE;
StopResultStruct *pStop=(StopResultStruct*)pNetData;
if (pStop->bArgee)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -