📄 clientgamedlg.cpp
字号:
// {
// 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)
// {
// m_MessageHandle.InsertNormalMessage("对家同意提前结束。");
// }
// else
// {
// m_MessageHandle.InsertNormalMessage("对家认为还有再升级的机会。");
// }
// return true;
// }
case ASS_PASS://不出
{
m_iNowOutPeople=(BYTE)pNetHead->bHandleCode;
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);
m_PlayView.m_btnTiShi.EnableWindow(TRUE);
m_PlayView.m_btnTiShi.ShowWindow(SW_SHOW);
OnHitCard(0,0);
}
if (m_iNowOutPeople!=255) SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
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];
// }
// }
//
//
// //m_PlayView.m_StationView.设置剩余牌(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_iNowOutPeople=255;
m_iFirstOutPeople=-1;
m_iLastCardCount=0;
m_bShowLast=FALSE;
::memset(m_iDeskCardCount,0,sizeof(m_iDeskCardCount));
::memset(&m_iBaseCard,0,sizeof(m_iBaseCard));
//界面重置
m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
m_PlayView.m_btPass.ShowWindow(SW_HIDE);
m_PlayView.m_btnTiShi.ShowWindow(SW_HIDE);
m_PlayView.m_btLastTurn.EnableWindow(FALSE);
m_PlayView.m_btSortCard.EnableWindow(FALSE);
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_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)
//{
//
// 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("pic\\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("pic\\Warning.wav",NULL,SND_ASYNC|SND_FILENAME);
// }
// return true;
// }
case ID_OUT_CARD: //出牌
{
m_PlayView.UpdateViewFace(NULL);
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 ==255)||(m_iLastOutPeople=m_iNowOutPeople)) //判断是否第一个出牌者
{
OutCardStruct OutCard;
if(m_iMeCardCount > 0)
{
OutCard.iCardCount = 1;
OutCard.iCardList[0] =m_iMeCardList[m_iMeCardCount - 1];
m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
m_PlayView.m_btPass.ShowWindow(SW_HIDE);
m_PlayView.m_btnTiShi.ShowWindow(SW_HIDE);
//出牌
SendGameData(&OutCard,sizeof(OutCard) -sizeof(OutCard.iCardList)+sizeof(BYTE)*OutCard.iCardCount,
MDM_GM_GAME_NOTIFY,ASS_OUT_CARD,0);
}
////发送数据
//OutCardStruct OutCard;
//m_Logic.AutoOutCard(m_iMeCardList,m_iMeCardCount,m_iBaseCard,m_iBaseCard.iCardCount,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("pic\\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 (m_iNowOutPeople!=GetMeUserInfo()->bDeskStation) return 0;
if (GetStationParameter()==GS_PLAY_GAME) //出牌状态
{
//验证出牌信息
BYTE iUpCard[27];
int iCardCount=m_PlayView.m_MeCard.GetUpCard(iUpCard);
//出牌数目判断
if (iCardCount==0)
{
m_PlayView.m_btOutCard.EnableWindow(FALSE);
return 0;
}
//验证是否可以出这样的扑克
if (m_iLastOutPeople == m_iNowOutPeople)//m_iFirstOutPeople==GetMeUserInfo()->bDeskStation) //第一个出牌者
{
//m_PlayView.m_btOutCard.EnableWindow(m_Logic.bCanFirstChu(iUpCard,iCardCount));
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.iCardList,m_iBaseCard.iCardCount,m_iMeCardList,m_iMeCardCount));
}
}
return 0;
}
////留底牌按钮函数
//LRESULT CClientGameDlg::OnHitBackCard(WPARAM wparam, LPARAM lparam)
//{
// KillAllTimer();
//
// 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)
{
OnHitCard(0,0);
//设置控件
//设置控件
if (m_PlayView.m_btOutCard.IsWindowEnabled()&&m_PlayView.m_btOutCard.IsWindowVisible())
{
//设置数据
KillAllTimer();
m_iNowOutPeople=255;
m_iSelCard.iCardCount=0;
m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
m_PlayView.m_btPass.ShowWindow(SW_HIDE);
m_PlayView.m_btnTiShi.ShowWindow(SW_HIDE);
//发送数据
OutCardStruct OutCard;
OutCard.iCardCount=m_PlayView.m_MeCard.GetUpCard(OutCard.iCardList);
if(OutCard.iCardCount!=0)
SendGameData(&OutCard,sizeof(OutCard)-sizeof(OutCard.iCardList)+sizeof(BYTE)*OutCard.iCardCount,
MDM_GM_GAME_NOTIFY,ASS_OUT_CARD,0);
//设置预显示
m_PlayView.m_UserCard[2].SetCard(OutCard.iCardList,NULL,OutCard.iCardCount);
}
return 0;
}
//按动上轮按钮函数
LRESULT CClientGameDlg::OnHitLastTurn(WPARAM wparam, LPARAM lparam)
{
if ((m_bShowIngLast)||(!m_bShowLast)||(m_iLastCardCount==0)||(m_iNowOutPeople==m_iFirstOutPeople)) return 0;
m_bShowIngLast=TRUE;
SetTimer(ID_SHOW_LAST,3000,NULL);
for (int i=0;i<3;i++)
m_PlayView.m_UserCard[ViewStation(i)].SetCard(m_iLastOutCard[i],NULL,m_iLastCardCount);
return 0;
}
////按动排序钮函数
LRESULT CClientGameDlg::OnHitSortCard(WPARAM wparam, LPARAM lparam)
{
//if (m_PlayView.m_BackCardDlg.GetSafeHwnd()==NULL) m_PlayView.m_BackCardDlg.Create(IDD_BACK_CARD,this);
//m_PlayView.m_BackCardDlg.SetBackCard(m_iBackCard,(m_iPalyCardCount==2)?8:6);
////把按底牌按钮函数移到相应位置
//CRect rect1,rect2;
//m_PlayView.m_BackCardDlg.GetWindowRect(rect1);
//m_PlayView.GetClientRect(rect2);
//m_PlayView.m_BackCardDlg.MoveWindow(rect2.Width()-60-rect1.Width(),rect2.Height()-135-rect1.Height(),rect1.Width(),rect1.Height());
//m_PlayView.m_BackCardDlg.ShowWindow(SW_SHOW);
//m_PlayView.m_BackCardDlg.SetFocus();
//return 0;
// BYTE bUpList[128];
// m_PlayView.m_iCardNum=m_PlayView.m_MeCard.GetCard(m_PlayView.m_TempMeCard,bUpList);
// m_PlayView.m_MeCard.SetShowCard(TRUE);
// m_PlayView.m_MeCard.SetCard(m_iBackCard,NULL,(m_iPalyCardCount==2)?8:6);
// m_PlayView.m_MeCard.SetUseMouse(FALSE);
// m_PlayView.m_btSortCard.ShowWindow(SW_HIDE);
// SetTimer(ID_LOOK_BACK,2000,NULL);
/* m_PlayView.m_MeCard.SetShowCard(FALSE);
m_PlayView.m_MeCard.ShowWindow(SW_HIDE);
m_PlayView.m_MeBackCard.SetShowCard(TRUE);
m_PlayView.m_MeBackCard.SetUseMouse(FALSE);
m_PlayView.m_MeBackCard.ShowWindow(SW_SHOW);
m_PlayView.m_MeBackCard.SetCard(m_iBackCard,NULL,(m_iPalyCardCount==2)?8:6);
m_PlayView.m_btSortCard.ShowWindow(SW_HIDE);
SetTimer(ID_LOOK_BACK,2000,NULL);*/
if (!m_bSortFalg)//排序
{
m_Logic.ReSortCard(m_iMeCardList,m_iMeCardCount);
m_bSortFalg = true;
}
else
{
m_Logic.SortCard(m_iMeCardList,NULL,m_iMeCardCount);
m_bSortFalg = false;
}
m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);
return 0;
}
////按动有事按钮函数
//LRESULT CClientGameDlg::OnHitHaveThing(WPARAM wparam, LPARAM lparam)
//{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -