📄 clientgamedlg.cpp
字号:
{
m_MessageHandle.InsertNormalMessage("对家同意提前结束。");
}
else
{
m_MessageHandle.InsertNormalMessage("对家不同意提前结束。");
}
return true;
}
case ASS_PASS://不出
{
m_iNowOutPeople=(BYTE)pNetHead->bHandleCode;
int iStation = ViewStation(m_iNowOutPeople);
m_PlayView.m_PassCard[iStation].ShowWindow(SW_HIDE);
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_RECV_PASS://收到不出
{
if (uDataSize != sizeof(tagPassStruct)) return FALSE;
tagPassStruct *pass = (tagPassStruct *) pNetData;
int iStation = ViewStation(pass->iPassStation);
m_PlayView.m_UserCard[iStation].SetCard(NULL,NULL,0);
m_PlayView.m_PassCard[iStation].ShowWindow(SW_SHOW);
return true;
}
case ASS_MODIFY_PLAYINFO://更新游戏信息
{
if (uDataSize != sizeof(tagPlayInfoStruct)) return FALSE;
tagPlayInfoStruct *pPlayInfo = (tagPlayInfoStruct *)pNetData;
char szName[4][21];
int iCardCount[4];
for(int i = 0;i < 4;i++)
{
if (m_pUserInfo[i] != NULL)
{
::strcpy(szName[i],m_pUserInfo[i]->GameUserInfo.szName);
iCardCount[i] = (int)pPlayInfo->iCardCnt[i];
}
}
if (pPlayInfo->iScore > 0) m_PlayView.m_btStop.EnableWindow(true);
m_PlayView.m_StationView.SetUserPlayInfo(szName,pPlayInfo->iScore,iCardCount,TRUE);
return true;
}
case ASS_START_NEXT_HALF: ////开始下半局
{
if (uDataSize != sizeof(tagLastHalfStruct)) return FALSE;
tagLastHalfStruct *pLastHaltInfo = (tagLastHalfStruct *)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;
//在聊天框里显示成绩
CString str;
m_MessageHandle.InsertNormalMessage("上半局结束:");
str.Format("%d : %d",pLastHaltInfo->iScores[0],pLastHaltInfo->iScores[1]);
m_MessageHandle.InsertNormalMessage(str.GetBuffer(MAX_PATH));
m_MessageHandle.InsertNormalMessage("------");
m_MessageHandle.InsertNormalMessage("下半局开始:");
str.Format(" %s 先出牌",pLastHaltInfo->szName);
m_MessageHandle.InsertNormalMessage(str.GetBuffer(MAX_PATH));
m_MessageHandle.InsertNormalMessage("------");
SetStationParameter(GS_WAIT_NEXT);
OnControlHitBegin();
//SetClock(GetMeUserInfo()->bDeskStation,1,ID_BEGIN_TIME);
ResetGameStation(RS_GAME_END);
m_bFlagNextHalf = true;
return true;
}
}
}
//else if ((pNetHead->bMainID==MDM_GAME_ACTION)&&(pNetHead->bAssistantID==ASS_GAME_LEFT))
//{
// //用户离开判断
// if (uDataSize!=sizeof(GameLeftStruct)) return FALSE;
// GameLeftStruct * pUserLeft=(GameLeftStruct *)pNetHead;
// if ((GetStationParameter()==GS_WAIT_ARGEE)&&(pUserLeft->bDeskStation==0))
// {
// for (int i=0;i<4;i++) m_PlayView.SetArgee(i,FALSE);
// if (m_PlayView.m_GameInfo.GetSafeHwnd()) m_PlayView.m_GameInfo.DestroyWindow();
// m_PlayView.m_GameNoteView.SetMessage(TEXT("正在等待东家设置牌局"));
// }
//}
return __super::HandleGameMessage(pNetHead,pNetData,uDataSize,pClientSocket);
}
//重新设置界面
void CClientGameDlg::ResetGameFrame()
{
m_bTimeOutCount=0;
m_iMeCardCount=0;
m_iNtCount=0;
m_iNtPeopole=-1;
m_iNowOutPeople=-1;
m_iBaseCount=0;
m_iFirstOutPeople=-1;
m_iLastCardCount=0;
m_bShowLast=FALSE;
::memset(m_iBackCard,0,sizeof(m_iBackCard));
::memset(m_iDeskCardCount,0,sizeof(m_iDeskCardCount));
::memset(m_iUserJiaoFen,0,sizeof(m_iUserJiaoFen));
//界面重置
m_PlayView.m_btGiveBack.ShowWindow(SW_HIDE);
m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
m_PlayView.m_btPass.ShowWindow(SW_HIDE);
//m_PlayView.m_NtList.ShowWindow(SW_HIDE);
//m_PlayView.m_btLastTurn.EnableWindow(FALSE);
m_PlayView.m_btBackCard.EnableWindow(FALSE);
// m_PlayView.m_btThing.EnableWindow(FALSE);
m_PlayView.m_StationView.SetShowMessage(FALSE);
m_PlayView.SetGamePoint();
m_PlayView.SetNTStation(-1);
m_PlayView.SetShowNtStation(-1,0);
m_PlayView.m_MeCard.SetCard(NULL,NULL,0);
m_PlayView.m_GameNoteView.SetMessage(NULL);
for (int i=0;i<4;i++)
{
m_PlayView.m_UserCard[i].SetCard(NULL,NULL,0);
m_PlayView.m_PassCard[i].ShowWindow(SW_HIDE);
}
if (m_PlayView.m_GameInfo.GetSafeHwnd()) m_PlayView.m_GameInfo.DestroyWindow();
// if (m_PlayView.m_BackCardDlg.GetSafeHwnd()) m_PlayView.m_BackCardDlg.DestroyWindow();
if (m_PlayView.m_HaveThing.GetSafeHwnd()) m_PlayView.m_HaveThing.DestroyWindow();
if (m_PlayView.m_ThingMessage.GetSafeHwnd()) m_PlayView.m_ThingMessage.DestroyWindow();
if (m_PlayView.m_GameSet.GetSafeHwnd()) m_PlayView.m_GameSet.DestroyWindow();
// if (m_PlayView.m_GameEndView.GetSafeHwnd()) m_PlayView.m_GameEndView.DestroyWindow();
return __super::ResetGameFrame();
}
//开始按钮函数
LRESULT CClientGameDlg::OnHitBegin(WPARAM wparam, LPARAM lparam)
{
OnControlHitBegin();
return 0;
}
bool CClientGameDlg::OnControlHitBegin()
{
if ((GetStationParameter()==GS_WAIT_SETGAME)&&(GetMeUserInfo()->bDeskStation==0))
{
tagGameSetInfo * pGameSet=m_PlayView.m_GameSet.GetGameSetInfo();
if (pGameSet!=NULL)
{
UserArgeeGame Agree;
Agree.iBeginStation=pGameSet->iBeginStation;
Agree.iEndStation=pGameSet->iEndStation;
Agree.iPlayCount=pGameSet->iPlayCount;
Agree.iCardCount=pGameSet->iCardCount;
SendGameData(&Agree,sizeof(Agree),MDM_GM_GAME_NOTIFY,ASS_GM_AGREE_GAME,0);
}
m_PlayView.m_btContinue.ShowWindow(SW_HIDE);
}
else if ((GetStationParameter()==GS_WAIT_NEXT)||(GetStationParameter()==GS_WAIT_ARGEE))
{
m_PlayView.m_btContinue.ShowWindow(SW_HIDE);
SendGameData(MDM_GM_GAME_NOTIFY,ASS_GM_AGREE_GAME,0);
}
KillAllTimer();
m_PlayView.m_StationView.CleanAllInfo(FALSE);
m_PlayView.m_StationView.m_iTurePoint=0;
ResetGameStation(RS_GAME_BEGIN);
return true;
}
//清除所有定时器
void CClientGameDlg::KillAllTimer()
{
KillTimer(ID_BEGIN_TIME);
KillTimer(ID_WAIT_ROB);
KillTimer(ID_GIVE_BACK);
KillTimer(ID_OUT_CARD);
KillTimer(ID_SHOW_CARD);
return;
}
//定时器消息
bool CClientGameDlg::OnClock(BYTE bDeskStation, UINT uTimeID, UINT uTimeCount)
{
switch (uTimeID)
{
case ID_BEGIN_TIME: //继续游戏定时器
{
if (uTimeCount<=1)
{
//时间到了
OnHitBegin(0,0);
return true;
}
if (uTimeCount<=10)
{
if(m_pGameInfo->bEnableSound)
PlaySound("tml\\Warning.wav",NULL,SND_ASYNC|SND_FILENAME);
}
return true;
}
case ID_OUT_CARD: //出牌
{
int iViewStation=ViewStation(bDeskStation);
if (uTimeCount<=1) //时间到了
{
//判断超时
if((m_iNowOutPeople==GetMeUserInfo()->bDeskStation) && (m_bWatchMode==FALSE))
m_bTimeOutCount++;
if (m_bTimeOutCount>5 && (m_iNowOutPeople==GetMeUserInfo()->bDeskStation) && (m_bWatchMode==FALSE))
{
KillClock(0);
SendGameData(MDM_GM_GAME_FRAME,ASS_GM_FORCE_QUIT,0);
SendGameData(MDM_GR_USER_ACTION,ASS_GR_USER_UP,0);
AFCMessage(TEXT("超时次数太多,游戏结束!"),m_pGameInfo->szGameName,MB_ICONQUESTION,this);
PostMessage(WM_CLOSE,0,0);
return false;
}
else if(m_iNowOutPeople==GetMeUserInfo()->bDeskStation && !m_bWatchMode)
{
CString str;
str.Format("请注意,你已经超时 %d 次了,超时五次会当做逃跑处理。",m_bTimeOutCount);
m_MessageHandle.InsertNormalMessage(str.GetBuffer(MAX_PATH));
}
if ((m_iNowOutPeople==GetMeUserInfo()->bDeskStation)&&(m_bWatchMode==FALSE))
{
if (m_iLastOutPeople < 0) //首先出牌
{
//发送数据
OutCardStruct OutCard;
m_Logic.AutoOutCard(m_iMeCardList,m_iMeCardCount,m_iBaseCard,m_iBaseCount,OutCard.iCardList,
OutCard.iCardCount,TRUE);
m_PlayView.m_UserCard[2].SetCard(OutCard.iCardList,NULL,OutCard.iCardCount);
m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
m_PlayView.m_btPass.ShowWindow(SW_HIDE);
SendGameData(&OutCard,sizeof(OutCard)-sizeof(OutCard.iCardList)+sizeof(BYTE)*OutCard.iCardCount,
MDM_GM_GAME_NOTIFY,ASS_OUT_CARD,0);
}
else
{
OnHitPass(0,0);
}
}
return true;
}
if ((uTimeCount<=6)&&(m_bWatchMode==FALSE)&&(iViewStation==2))
{
if(m_pGameInfo->bEnableSound)
PlaySound("tml\\Warning.wav",NULL,SND_ASYNC|SND_FILENAME);
}
return true;
}
case ID_SHOW_LAST: //查看上一轮扑克
{
m_bShowIngLast=FALSE;
for (int i=0;i<3;i++)
m_PlayView.m_UserCard[ViewStation(i)].SetCard(m_DeskCard[i],NULL,m_iDeskCardCount[i]);
return true;
}
}
return true;
}
//按动扑克按钮函数
LRESULT CClientGameDlg::OnHitCard(WPARAM wparam, LPARAM lparam)
{
if (GetStationParameter()==GS_PLAY_GAME) //出牌状态
{
//验证出牌信息
BYTE iUpCard[39];
if (m_iNowOutPeople!=GetMeUserInfo()->bDeskStation) return 0;
int iCardCount=m_PlayView.m_MeCard.GetUpCard(iUpCard);
//出牌数目判断
if (iCardCount==0)
{
m_PlayView.m_btOutCard.EnableWindow(FALSE);
return 0;
}
//验证是否可以出这样的扑克
if (m_iLastOutPeople < 0)//m_iFirstOutPeople==GetMeUserInfo()->bDeskStation) //第一个出牌者
{
m_PlayView.m_btOutCard.EnableWindow(m_Logic.GetCardShape(iUpCard,iCardCount)!=UG_ERROR_KIND);
}
else //随后出牌者
{
m_PlayView.m_btOutCard.EnableWindow(m_Logic.CanOutCard(iUpCard,iCardCount,m_iBaseCard,
m_iBaseCount,m_iMeCardList,m_iMeCardCount));
}
}
return 0;
}
LRESULT CClientGameDlg::OnRightHitCard(WPARAM wparam, LPARAM lparam)
{
if(!m_PlayView.m_bRightPower)
OnHitOutCard(0,0);
return 0;
}
//按动出牌按钮函数
LRESULT CClientGameDlg::OnHitOutCard(WPARAM wparam, LPARAM lparam)
{
//设置控件
if (m_PlayView.m_btOutCard.IsWindowEnabled()&&m_PlayView.m_btOutCard.IsWindowVisible())
{
//设置数据
KillAllTimer();
m_iNowOutPeople=-1;
m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
m_PlayView.m_btPass.ShowWindow(SW_HIDE);
//发送数据
OutCardStruct OutCard;
OutCard.iCardCount=m_PlayView.m_MeCard.GetUpCard(OutCard.iCardList);
m_Logic.SortCard(OutCard.iCardList,NULL,OutCard.iCardCount);
if(OutCard.iCardCount!=0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -