📄 clientgamedlg.cpp
字号:
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];
}
}
m_PlayView.m_StationView.SetUserPlayInfo(szName,pPlayInfo->iScore,iCardCount,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);
}
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;
}
//NT 按钮函数
LRESULT CClientGameDlg::OnHitNt(WPARAM wparam, LPARAM lparam)
{
ClientNtStruct NtCard;
int iNtNum=m_Logic.GetNTCardNum();
NtCard.iHuaKind=(int)wparam;
NtCard.iCardCount=0;
for (int i=0;i<m_iMeCardCount;i++)
{
if ((m_Logic.GetCardNum(m_iMeCardList[i])==iNtNum)&&
(m_Logic.GetCardHuaKind(m_iMeCardList[i],TRUE)==(BYTE)wparam))
{
NtCard.iCardCount++;
}
}
if(NtCard.iCardCount==m_nJiaoZu)
{
return 0;
}
m_nJiaoZu=NtCard.iCardCount;
SendGameData(&NtCard,sizeof(NtCard),MDM_GM_GAME_NOTIFY,ASS_NT_CARD,0);
return 0;
}
//更新反牌控件
BOOL CClientGameDlg::UpdateNtList()
{
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_WAIT_ROB: //抢底牌
{
int iViewStation=ViewStation(bDeskStation);
if (uTimeCount<=1)
{
//时间到了
if (m_bWatchMode==FALSE) m_PlayView.m_NtList.ShowWindow(SW_HIDE);
return true;
}
return true;
}
case ID_GIVE_BACK: //留底牌
{
int iViewStation=ViewStation(bDeskStation);
if (uTimeCount<=1)
{
//时间到了
/*if ((m_bWatchMode==FALSE)&&m_PlayView.m_btGiveBack.IsWindowVisible())
{
BackCardStruct BackCard;
BackCard.iBackCardCount=((m_iPalyCardCount==2)?8:6);
::CopyMemory(BackCard.iBackCard,&m_iMeCardList[m_iMeCardCount-BackCard.iBackCardCount],
sizeof(BYTE)*BackCard.iBackCardCount);
m_PlayView.m_btGiveBack.EnableWindow(FALSE);
m_PlayView.m_btGiveBack.ShowWindow(SW_HIDE);
SendGameData(&BackCard,sizeof(BackCard),MDM_GM_GAME_NOTIFY,ASS_BACK_CARD,0);
}*/
return true;
}
if ((uTimeCount<=10)&&(m_bWatchMode==FALSE)&&(GetMeUserInfo()->bDeskStation==m_iNtPeopole))
{
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 (IsFirstOutCard)
{
OutCardStruct OutCard;
m_iOutFlag = m_Logic.AutoOutCard(m_iMeCardList,m_iMeCardCount,m_iBaseOutList,m_iBaseOutListCount,OutCard.iCardList,
OutCard.iCardCount,TRUE);
m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
SendGameData(&OutCard,sizeof(OutCard)-sizeof(OutCard.iCardList)+sizeof(BYTE)*OutCard.iCardCount,
MDM_GM_GAME_NOTIFY,ASS_OUT_CARD,0);
return true;
}
else
{
OutCardStruct OutCard;
m_iOutFlag = m_Logic.AutoOutCard(m_iMeCardList,m_iMeCardCount,m_iBaseOutList,m_iBaseOutListCount,OutCard.iCardList,
OutCard.iCardCount,FALSE);
m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
if (m_iOutFlag == 2)
{
SendGameData(&OutCard,sizeof(OutCard)-sizeof(OutCard.iCardList)+sizeof(BYTE)*OutCard.iCardCount,
MDM_GM_GAME_NOTIFY,ASS_OUT_CARD,m_iOutFlag);
return true;
}
SendGameData(&OutCard,sizeof(OutCard)-sizeof(OutCard.iCardList)+sizeof(BYTE)*OutCard.iCardCount,
MDM_GM_GAME_NOTIFY,ASS_OUT_CARD,0);
return true;
}
}
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;
}
case ID_SHOW_CARD: //甩牌失败
{
int iViewStation=ViewStation(bDeskStation);
if (uTimeCount==2) //复原扑克
{
//上一轮数据
if (m_bShowIngLast)
{
m_bShowIngLast=FALSE;
KillTimer(ID_SHOW_LAST);
for (int i=0;i<3;i++) m_PlayView.m_UserCard[ViewStation(i)].SetCard(NULL,NULL,NULL);
}
//恢复扑克
m_PlayView.m_UserCard[iViewStation].SetCard(m_DeskCard[m_iFirstOutPeople],
NULL,m_iDeskCardCount[m_iFirstOutPeople]);
if (m_iFirstOutPeople==GetMeUserInfo()->bDeskStation)
m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);
}
if (uTimeCount<=1)
{
//时间到了
m_iNowOutPeople=(m_iFirstOutPeople+1)%4;
//显示出牌按钮
if ((m_iNowOutPeople==GetMeUserInfo()->bDeskStation)&&(m_bWatchMode==FALSE))
{
m_PlayView.m_btOutCard.ShowWindow(SW_SHOW);
OnHitCard(0,0);
}
SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
return true;
}
return true;
}
}
return true;
}
//按动扑克按钮函数
LRESULT CClientGameDlg::OnHitCard(WPARAM wparam, LPARAM lparam)
{
///if ((GetStationParameter()==GS_WAIT_BACK)&&(m_PlayView.m_btGiveBack.IsWindowVisible())) //留底牌状态
{
///m_PlayView.m_btGiveBack.EnableWindow(m_PlayView.m_MeCard.GetUpCard(NULL)==((m_iPalyCardCount==2)?8:6));
}
///else if (GetStationParameter()==GS_PLAY_GAME) //出牌状态
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 (IsFirstOutCard)////m_iLastOutPeople < 0) ///GetMeUserInfo()->bDeskStation) //第一个出牌者
{
m_PlayView.m_btOutCard.EnableWindow(m_Logic.GetCardShape(iUpCard,iCardCount)!=UG_ERROR_KIND);
}
else //随后出牌者
{
////AfxMessageBox("随后出牌者");
m_iOutFlag = m_Logic.CanOutCard(iUpCard,iCardCount,m_iBaseOutList,m_iBaseOutListCount,m_iMeCardList,m_iMeCardCount);
m_PlayView.m_btOutCard.EnableWindow((m_iOutFlag != 0 ? TRUE : FALSE));////m_Logic.CanOutCard(iUpCard,iCardCount,m_iBaseOutList,
////m_iBaseOutListCount,m_iMeCardList,m_iMeCardCount));
CString s;
s.Format("%d",m_iOutFlag);
////AfxMessageBox(s);
}
}
return 0;
}
//留底牌按钮函数
LRESULT CClientGameDlg::OnHitBackCard(WPARAM wparam, LPARAM lparam)
{
KillAllTimer();
BackCardStruct BackCard;
m_PlayView.m_MeCard.GetUpCard(BackCard.iBackCard);
m_PlayView.m_MeCard.RemoveUpCard();
m_PlayView.m_btGiveBack.EnableWindow(FALSE);
m_PlayView.m_btGiveBack.ShowWindow(SW_HIDE);
BackCard.iBackCardCount=((m_iPalyCardCount==2)?8:6);
SendGameData(&BackCard,sizeof(BackCard),MDM_GM_GAME_NOTIFY,ASS_BACK_CARD,0);
return 0;
}
LRESULT CClientGameDlg::OnRightHitCard(WPARAM wparam, LPARAM lparam)
{
if(!m_PlayView.m_bRightPower)
OnHitOutCard(0,0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -