📄 clientgamedlg.cpp
字号:
#include "StdAfx.h"
#include "ClientGameDlg.h"
#include "GameSet.h"
#include ".\clientgamedlg.h"
BEGIN_MESSAGE_MAP(CClientGameDlg, CTMLframe)
ON_WM_QUERYDRAGICON()
ON_MESSAGE(IDM_BEGIN,OnHitBegin)
//ON_MESSAGE(IDM_USER_NT,OnHitNt)
ON_MESSAGE(IDM_LEFT_HITCARD,OnHitCard)
//ON_MESSAGE(IDM_GIVE_BACK,OnHitBackCard)
ON_MESSAGE(IDM_OUT_CARD,OnHitOutCard)
ON_MESSAGE(IDM_LOOK_LAST,OnHitLastTurn)
ON_MESSAGE(IDM_Sort_Card,OnHitSortCard)//排序
//ON_MESSAGE(IDM_HAVE_THING,OnHitHaveThing)
//ON_MESSAGE(IDM_SEND_THING,OnSendHaveThing)
//ON_MESSAGE(IDM_ARGEE_LEAVE,OnArgeeUserLeft)
ON_MESSAGE(IDM_RIGHT_HITCARD,OnRightHitCard)
//ON_MESSAGE(IDM_STOP,OnStop)
//ON_MESSAGE(IDM_STOP_THING,OnStopThing) //发送提前结束事件
//ON_MESSAGE(IDM_ARGEE_STOP,OnAgreeStop) //同意提前结束事件
ON_MESSAGE(IDM_PASS,OnHitPass)
ON_MESSAGE(IDM_TISHI,OnTiShi)
ON_WM_TIMER()
// ON_WM_CLOSE()
END_MESSAGE_MAP()
//构造函数
CClientGameDlg::CClientGameDlg() : CTMLframe(&m_PlayView)
{
m_iLessCount=0;
m_iCardCount=0;
m_iMeCardCount=0;
m_bShowIngLast=FALSE;
m_bShowLast=FALSE;
m_iLastCardCount=0;
m_bSortFalg = false;
m_bTimeOutCount=0;
::memset(m_iDeskCardCount,0,sizeof(m_iDeskCardCount));
::memset(m_iMeCardList,0,sizeof(m_iMeCardList));
// WriteProfileInt(TEXT("ShowPicture"),GameSetDlg.m_bRightPower?1:0);
}
//析构函数
CClientGameDlg::~CClientGameDlg()
{
}
//数据绑定函数
void CClientGameDlg::DoDataExchange(CDataExchange * pDX)
{
CTMLframe::DoDataExchange(pDX);
DoDataExchangeWebVirFace(pDX);
}
//初始化函数
BOOL CClientGameDlg::OnInitDialog()
{
CTMLframe::OnInitDialog();
//更新标题
SetDialogIcon(LoadIcon(GetModuleHandle(CLIENT_DLL_NAME),MAKEINTRESOURCE(IDI_CLIENT_ROOM)),TRUE);
m_PlayView.m_bRightPower=GetProfileInt(TEXT("RightPower"),FALSE);
return TRUE;
}
//设置游戏状态
bool CClientGameDlg::SetGameStation(void * pStationData, UINT uDataSize)
{
switch (GetStationParameter())
{
case GS_WAIT_SETGAME: //游戏没有开始状态
{
CString strBuffer;
if(uDataSize!=sizeof(GameStation_1))
{
if (IDYES==AFCMessage(TEXT("你的游戏版本过旧,你要现在重新下载新版本吗?"),m_pGameInfo->szGameName,MB_YESNO|MB_DEFBUTTON1|MB_ICONINFORMATION,this))
{
strBuffer.Format(TEXT("http://www.euqq.com/Kuaile/down/upgrade.exe"),1,1);
ShellExecute(NULL,TEXT("open"),strBuffer,NULL,NULL,SW_MAXIMIZE);
}
return false;
}
GameStation_1 * pGameStation=(GameStation_1 *)pStationData;
/* if(pGameStation->iVersion!=m_iVersion)
{
if (IDYES==AFCMessage(TEXT("你的升级游戏版本过旧,你要现在重新下载新版本吗?"),m_pGameInfo->szGameName,MB_YESNO|MB_DEFBUTTON1|MB_ICONINFORMATION,this))
{
strBuffer.Format(TEXT("http://www.euqq.com/Kuaile/down/upgrade.exe"),1,1);
ShellExecute(NULL,TEXT("open"),strBuffer,NULL,NULL,SW_MAXIMIZE);
}
return false;
}
if(pGameStation->iVersion2!=m_iVersion2)
{
if (IDYES==AFCMessage(TEXT("升级游戏已经更新,但现有版本仍可游戏,你要现在下载最新版本吗?"),m_pGameInfo->szGameName,MB_YESNO|MB_DEFBUTTON1|MB_ICONINFORMATION,this))
{
strBuffer.Format(TEXT("http://www.euqq.com/Kuaile/down/upgrade.exe"),1,1);
ShellExecute(NULL,TEXT("open"),strBuffer,NULL,NULL,SW_MAXIMIZE);
return false;
}
}
*/
m_PlayView.m_MeCard.SetShowCard(!m_bWatchMode||m_bWatchOther);
//显示设置窗口
m_iCardCount=pGameStation->iCardCount;
if ((GetMeUserInfo()->bDeskStation!=0)||m_bWatchMode)
m_PlayView.m_GameNoteView.SetMessage(TEXT("正在等待东家设置牌局"));
else m_PlayView.m_GameSet.SetGameSetInfo(pGameStation->iCardCount);
//GameEndStruct End;
//memset(&End,0,sizeof(End));
//End.iGamePoint=100;
//End.iTurePoint[0]=200;
//End.iTurePoint[1]=200;
//End.iTurePoint[2]=200;
//End.iTurePoint[3]=200;
//m_PlayView.m_GameEndView.SetEndGameData(&End,m_pUserInfo,m_iPalyCardCount,this);
return TRUE;
}
case GS_WAIT_ARGEE: //等待同意状态
{
GameStation_2 * pGameStation=(GameStation_2 *)pStationData;
//设置数据
m_iLessCount=pGameStation->iPlayCount;
m_iPalyCardCount=pGameStation->iCardCount;
//m_PlayView.m_StationView.设置牌局数(1,m_iLessCount);
m_PlayView.m_MeCard.SetShowCard(!m_bWatchMode||m_bWatchOther);
//显示设置窗口
if ((GetMeUserInfo()->bDeskStation==0)||m_bWatchMode)
m_PlayView.m_GameNoteView.SetMessage(TEXT("正在等待其他玩家开始游戏"));
else m_PlayView.m_GameInfo.SetGameSetInfo(pGameStation->iCardCount,pGameStation->iPlayCount);
return TRUE;
}
case GS_SEND_CARD: //发牌状态
{
AfxMessageBox("等待埋底牌状态");
GameStation_3 * pGameStation=(GameStation_3 *)pStationData;
//设置数据
m_iLessCount=pGameStation->iPlayCount;
m_iPalyCardCount=pGameStation->iCardCount;
m_iMeCardCount=pGameStation->iUserCardCount;
::CopyMemory(m_iMeCardList,pGameStation->iUserCard,sizeof(BYTE)*m_iMeCardCount);
//设置界面
//m_PlayView.m_StationView.SetShowMessage(TRUE);
//m_PlayView.m_StationView.SetUpGrade(pGameStation->iUpGradePeople);
m_PlayView.m_iBeenPlayCount=pGameStation->iBeenPlayCount;
//m_PlayView.m_StationView.设置牌局数(pGameStation->iBeenPlayCount,m_iLessCount);
//m_PlayView.m_StationView.SetTurePoint(pGameStation->iWinPoint);
//m_PlayView.m_StationView.AddPunishPoint(pGameStation->iPunishPoint);
m_Logic.SortCard(m_iMeCardList,NULL,m_iMeCardCount);
m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);
//m_PlayView.m_btThing.EnableWindow(!m_bWatchMode);
m_PlayView.m_MeCard.SetUseMouse(!m_bWatchMode);
m_PlayView.m_MeCard.SetShowCard(!m_bWatchMode||m_bWatchOther);
//if (pGameStation->iUpGradePeople!=-1) m_PlayView.m_StationView.SetUpGrade(ViewStation(pGameStation->iUpGradePeople));
//if (m_iNtPeopole!=-1)
//{
// BYTE iNtCard[3];
// iNtCard[0]=m_Logic.GetCardFromHua(pGameStation->iNtHua,m_Logic.GetNTCardNum());
// iNtCard[1]=iNtCard[0];
// iNtCard[2]=iNtCard[0];
// m_PlayView.m_UserCard[ViewStation(m_iNtPeopole)].SetCard(iNtCard,NULL,m_iNtCount);
//}
//UpdateNtList();
//if ((GetStationParameter()==GS_PLAY_GAME)&&(GetMeUserInfo()->bDeskStation==pGameStation->iUpGradePeople))
//{
// SetClock(GetMeUserInfo()->bDeskStation,60,ID_GIVE_BACK);
// //m_PlayView.m_btGiveBack.ShowWindow(SW_SHOW);
// OnHitCard(0,0);
//}
return TRUE;
}
case GS_PLAY_GAME: //游戏进行中
{
GameStation_4 * pGameStation=(GameStation_4 *)pStationData;
//设置数据
m_iLessCount=pGameStation->iPlayCount;
m_iPalyCardCount=pGameStation->iCardCount;
m_iNowOutPeople=pGameStation->iOutCardPeople;
m_iFirstOutPeople=pGameStation->iFirstOutPeople;
m_iBaseCard.iCardCount=pGameStation->iBaseOutCount;
m_iMeCardCount=pGameStation->iUserCardCount;
::CopyMemory(m_iMeCardList,pGameStation->iUserCardList,sizeof(BYTE)*m_iMeCardCount);
//设置界面
//m_PlayView.m_StationView.SetShowMessage(TRUE);
m_PlayView.m_iBeenPlayCount=pGameStation->iBeenPlayCount;
//m_PlayView.m_StationView.设置牌局数(pGameStation->iBeenPlayCount,m_iLessCount);
m_Logic.SortCard(m_iMeCardList,NULL,m_iMeCardCount);
m_PlayView.m_MeCard.SetShowCard(true);
m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);
//m_PlayView.m_btThing.EnableWindow(!m_bWatchMode);
m_PlayView.m_MeCard.SetUseMouse(!m_bWatchMode);
// m_PlayView.m_MeCard.SetShowCard(true);
//m_PlayView.m_MeCard.SetShowCard(!m_bWatchMode||m_bWatchOther);
int iRemainCard[4];
char szName[4][21];
for (int i = 0;i < 4;i++)
{
if (m_pUserInfo[i] != NULL)
{
strcpy(szName[i],m_pUserInfo[i]->GameUserInfo.szName);
iRemainCard[i] = (int) pGameStation->iRemainCard[i];
}
}
//m_PlayView.m_StationView.设置剩余牌(szName,pGameStation->iUserPoint,iRemainCard,TRUE);
//设置扑克
int iPos=m_iMeCardCount;
for (int i=0;i<4;i++)
{
m_iDeskCardCount[i]=pGameStation->iDeskCardCount[i];
::CopyMemory(m_DeskCard[i],&pGameStation->iUserCardList[iPos],sizeof(BYTE)*m_iDeskCardCount[i]);
iPos+=m_iDeskCardCount[i];
m_PlayView.m_UserCard[ViewStation(i)].SetCard(m_DeskCard[i],NULL,m_iDeskCardCount[i]);
}
//判断是否自己出牌
if ((m_iNowOutPeople!=m_iFirstOutPeople)&&(m_iNowOutPeople!=255))
{
m_iBaseCard.iCardCount=m_iDeskCardCount[m_iFirstOutPeople];
::CopyMemory(m_iBaseCard.iCardList,m_DeskCard[m_iFirstOutPeople],sizeof(BYTE)*m_iBaseCard.iCardCount);
}
else ::memset(&m_iBaseCard,0,sizeof(m_iBaseCard));
if ((m_bWatchMode==FALSE)&&(m_iNowOutPeople==GetMeUserInfo()->bDeskStation))
{
m_PlayView.m_btOutCard.ShowWindow(SW_SHOW);
OnHitCard(0,0);
}
if (m_iNowOutPeople!=255) SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
return TRUE;
}
case GS_WAIT_NEXT: //等待下一盘开始
{
GameStation_5 * pGameStation=(GameStation_5 *)pStationData;
//设置数据
m_iLessCount=pGameStation->iPlayCount;
m_iPalyCardCount=pGameStation->iCardCount;
//m_PlayView.m_StationView.SetShowMessage(TRUE);
//m_PlayView.m_StationView.设置牌局数(pGameStation->iBeenPlayCount,m_iLessCount);
m_PlayView.m_iBeenPlayCount=pGameStation->iBeenPlayCount;
m_PlayView.m_MeCard.SetShowCard(!m_bWatchMode||m_bWatchOther);
//显示开始按钮
if (GetMeUserInfo()->bUserState!=USER_ARGEE)
{
if (m_bWatchMode==false)
{
m_PlayView.m_btContinue.ShowWindow(SW_SHOW);
m_PlayView.m_btContinue.SetFocus();
}
SetClock(GetMeUserInfo()->bDeskStation,20,ID_BEGIN_TIME);
}
return TRUE;
}
}
return false;
}
//游戏消息处理函数
bool CClientGameDlg::HandleGameMessage(NetMessageHead * pNetHead, void * pNetData, UINT uDataSize, CTCPClientSocket * pClientSocket)
{
if (pNetHead->bMainID==MDM_GM_GAME_NOTIFY)
{
switch (pNetHead->bAssistantID)
{
case ASS_UG_USER_SET: //用户设置牌局
{
if (uDataSize!=sizeof(UserArgeeGame)) return FALSE;
SetStationParameter(GS_WAIT_ARGEE);
UserArgeeGame * pGameSet=(UserArgeeGame *)pNetData;
//设置数据
m_iLessCount=pGameSet->iPlayCount;
m_iPalyCardCount=pGameSet->iCardCount;
//显示界面
//m_PlayView.m_StationView.SetShowMessage(TRUE);
//m_PlayView.m_StationView.SetMeSideInfo(m_iBeginStation,m_iEndStation,m_iBeginStation);
//m_PlayView.m_StationView.SetOtherSideInfo(m_iBeginStation,m_iEndStation,m_iBeginStation);
//m_PlayView.m_StationView.设置牌局数(1,m_iLessCount);
if ((m_bWatchMode==FALSE)&&(GetMeUserInfo()->bDeskStation!=0))
{
m_PlayView.m_GameNoteView.SetMessage(NULL);
m_PlayView.m_GameInfo.SetGameSetInfo(m_iPalyCardCount,m_iLessCount);
}
else m_PlayView.m_GameNoteView.SetMessage(TEXT("正在等待其他玩家开始游戏"));
return TRUE;
}
// case ASS_BEGIN_UPGRADE: //游戏开始
// {
//
// if (uDataSize!=sizeof(BeginUpgradeStruct)) return FALSE;
// BeginUpgradeStruct * pBegin=(BeginUpgradeStruct *)pNetData;
// m_bTimeOutCount=0;
// SetStationParameter(GS_SEND_CARD);
// //m_PlayView.m_StationView.SetShowMessage(TRUE);
// //m_PlayView.m_btStop.EnableWindow(FALSE);
//
//
//
// if (m_bWatchMode==TRUE)
// {
// KillAllTimer();
// ResetGameStation(RS_GAME_BEGIN);
// }
// m_PlayView.m_GameNoteView.SetMessage(NULL);
// m_PlayView.m_MeCard.SetUseMouse(!m_bWatchMode);
// m_PlayView.m_MeCard.SetShowCard(!m_bWatchMode||m_bWatchOther);
// //else
// //{
// // m_PlayView.m_btThing.EnableWindow(TRUE);
// //}
//// if (m_PlayView.m_GameEndView.GetSafeHwnd()) m_PlayView.m_GameEndView.DestroyWindow();
//
// //设置显示
// //m_PlayView.m_StationView.CleanAllInfo(FALSE);
// //if (pBegin->iUpgradeStation!=255)
// //{
// // ///m_PlayView.m_StationView.SetUpGrade(ViewStation(pBegin->iUpgradeStation));
// // ///m_PlayView.SetNTStation(ViewStation(pBegin->iUpgradeStation));
// //}
// //else m_PlayView.m_StationView.SetUpGrade(-1);
// //m_PlayView.m_StationView.SetMeSideInfo(m_iBeginStation,m_iEndStation,pBegin->iStation[ViewStation(0)%2]);
// //m_PlayView.m_StationView.SetOtherSideInfo(m_iBeginStation,m_iEndStation,pBegin->iStation[ViewStation(1)%2]);
// //m_PlayView.m_StationView.设置牌局数(pBegin->iPlayCount,m_iLessCount);
//
// return TRUE;
// }
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);
///UpdateNtList();
// if(m_pGameInfo->bEnableSound)
// PlaySound("pic\\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_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);
if(m_pGameInfo->bEnableSound)
PlaySound("pic\\OutCard.wav",NULL,SND_ASYNC|SND_FILENAME);
return TRUE;
}
case ASS_GAME_PLAY: //开始游戏
{ /* AfxMessageBox("111111111111111111111111");*/
if (uDataSize!=sizeof(BeginPlayStruct)) return FALSE;
BeginPlayStruct * pBeginInfo=(BeginPlayStruct *)pNetData;
m_bTimeOutCount=0;
SetStationParameter(GS_PLAY_GAME);
if (m_bWatchMode==TRUE)
{
KillAllTimer();
ResetGameStation(RS_GAME_BEGIN);
}
m_PlayView.m_GameNoteView.SetMessage(NULL);
m_PlayView.m_MeCard.SetUseMouse(!m_bWatchMode);
m_PlayView.m_MeCard.SetShowCard(!m_bWatchMode||m_bWatchOther);
m_PlayView.m_btSortCard.EnableWindow(TRUE);
m_iLastOutPeople=m_iNowOutPeople=m_iFirstOutPeople=pBeginInfo->iOutDeskStation;//开始游戏
m_PlayView.m_iBeenPlayCount=pBeginInfo->iBeenPlayCount;
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);
m_PlayView.m_btnTiShi.ShowWindow(SW_SHOW);
OnHitCard(0,0);
}
BOOL bUpGrade=((GetMeUserInfo()->bDeskStation==m_iNowOutPeople)||
((GetMeUserInfo()->bDeskStation+2)%4==m_iNowOutPeople));
///m_PlayView.SetGamePoint(0,!bUpGrade);
// if (m_PlayView.m_GameEndView.GetSafeHwnd()) m_PlayView.m_GameEndView.DestroyWindow();
for (int i=0;i<4;i++) {
m_PlayView.m_UserCard[i].SetCard(NULL,NULL,0);
m_PlayView.m_iLessCardCount[i]=13;
}
m_PlayView.m_GameNoteView.SetMessage(NULL);
SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
//AfxMessageBox("4444444444444444444444444444444444");
if(m_pGameInfo->bEnableSound)
PlaySound("pic\\BeginGame.wav",NULL,SND_ASYNC|SND_FILENAME);
return TRUE;
}
case ASS_OUT_CARD: //用户出牌
{
OutCardMsg * pOutCardInfo=(OutCardMsg *)pNetData;
KillAllTimer();//删除所有定时器
if(m_pGameInfo->bEnableSound)
PlaySound("pic\\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_iBaseCard.iCardCount=pOutCardInfo->iCardCount;//记录最后一次出牌的数量
::CopyMemory(m_iBaseCard.iCardList,pOutCardInfo->iCardList,sizeof(BYTE)*m_iBaseCard.iCardCount);//记录最后一次出牌的牌型
//判断是否第一个出牌者 ,新一轮,请空桌面扑克
if ((m_iLastOutPeople ==255)||(m_iLastOutPeople==GetMeUserInfo()->bDeskStation))//pOutCardInfo->bDeskStation==m_iFirstOutPeople)
{
for (int i=0;i<4;i++) m_PlayView.m_UserCard[i].SetCard(NULL,NULL,0);
}
m_iLastOutPeople = pOutCardInfo->bDeskStation;
//删除自己的扑克
if (m_iLastOutPeople==GetMeUserInfo()->bDeskStation)
{
m_Logic.RemoveCard(m_iBaseCard.iCardList,m_iBaseCard.iCardCount,m_iMeCardList,m_iMeCardCount);
m_iMeCardCount-=m_iBaseCard.iCardCount;
if (m_bSortFalg)
{
m_Logic.ReSortCard(m_iMeCardList,m_iMeCardCount);
}
else
{
m_Logic.SortCard(m_iMeCardList,NULL,m_iMeCardCount); //原来语句
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -