📄 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_BACK_CARD,OnHitLookBack)
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_WM_TIMER()
// ON_WM_CLOSE()
END_MESSAGE_MAP()
//构造函数
CClientGameDlg::CClientGameDlg() : CTMLframe(&m_PlayView)
{
m_iVersion=7;
m_iVersion2=0;
m_iLessCount=0;
m_iBeginStation=0;
m_iEndStation=0;
m_iCardCount=0;
m_iMeCardCount=0;
m_bShowIngLast=FALSE;
m_bShowLast=FALSE;
m_iLastCardCount=0;
m_iNtCount=0;
m_iNowOutPeople=-1;
m_iFirstOutPeople=-1;
m_iNtPeopole=-1;
m_iLastOutPeople = -1;
m_bSortFalg = false;
IsFirstOutCard = true;
m_iOutFlag = 0;
// m_iTimerStation=-1;
// m_iTimerCount=-1;
m_bTimeOutCount=0;
::memset(m_iBackCard,0,sizeof(m_iBackCard));
::memset(m_iDeskCardCount,0,sizeof(m_iDeskCardCount));
::memset(m_iMeCardList,0,sizeof(m_iMeCardList));
::memset(m_iUserJiaoFen,0,sizeof(m_iUserJiaoFen));
m_nJiaoZu=0;
// 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_iBeginStation=pGameStation->iBeginStation;
m_iEndStation=pGameStation->iEndStation;
m_iPalyCardCount=pGameStation->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.SetPlayInfo(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,
pGameStation->iBeginStation,pGameStation->iEndStation);
return TRUE;
}
case GS_SEND_CARD: //发牌状态
case GS_WAIT_BACK: //等待埋底牌状态
{
GameStation_3 * pGameStation=(GameStation_3 *)pStationData;
//设置数据
m_iLessCount=pGameStation->iPlayCount;
m_iBeginStation=pGameStation->iBeginStation;
m_iEndStation=pGameStation->iEndStation;
m_iPalyCardCount=pGameStation->iCardCount;
m_iNtCount=pGameStation->iNtCardCount;
m_iNtPeopole=pGameStation->iNtPeople;
m_iMeCardCount=pGameStation->iUserCardCount;
::CopyMemory(m_iMeCardList,pGameStation->iUserCard,sizeof(BYTE)*m_iMeCardCount);
if (pGameStation->iUpGradePeople==-1) m_Logic.SetNTCardNum(pGameStation->iPlayNTNum[0]);
else m_Logic.SetNTCardNum(pGameStation->iPlayNTNum[pGameStation->iUpGradePeople%2]);
m_Logic.SetNTHuaKind(pGameStation->iNtHua);
//设置界面
m_PlayView.m_StationView.SetShowMessage(TRUE);
m_PlayView.m_StationView.SetUpGrade(pGameStation->iUpGradePeople);
m_PlayView.m_StationView.SetNTInfo(pGameStation->iNtPeople,pGameStation->iNtHua,m_iPalyCardCount);
m_PlayView.m_StationView.SetMeSideInfo(m_iBeginStation,m_iEndStation,pGameStation->iMeStation);
m_PlayView.m_StationView.SetOtherSideInfo(m_iBeginStation,m_iEndStation,pGameStation->iOtherStation);
m_PlayView.m_StationView.SetPlayInfo(pGameStation->iBeenPlayGame,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_WAIT_BACK)&&(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_iBeginStation=pGameStation->iBeginStation;
m_iEndStation=pGameStation->iEndStation;
m_iPalyCardCount=pGameStation->iCardCount;
m_iNowOutPeople=pGameStation->iOutCardPeople;
m_iFirstOutPeople=pGameStation->iFirstOutPeople;
m_iBaseCount=pGameStation->iBaseOutCount;
m_iMeCardCount=pGameStation->iUserCardCount;
::CopyMemory(m_iMeCardList,pGameStation->iUserCardList,sizeof(BYTE)*m_iMeCardCount);
//设置界面
m_PlayView.m_StationView.SetShowMessage(TRUE);
m_PlayView.m_StationView.SetPlayInfo(pGameStation->iBeenPlayGame,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.SetUserPlayInfo(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];
int hs = m_Logic.GetCardHuaKind(m_DeskCard[i][0],FALSE);
//m_PlayView.m_UserCard[hs].SetCard(m_DeskCard[i],NULL,m_iDeskCardCount[i]);
}
for (int i = 0;i < 4;i++)
{
int hs = m_Logic.GetCardHuaKind(pGameStation->iOutCardList[i][0],FALSE);
m_PlayView.m_UserCard[hs].SetCard(pGameStation->iOutCardList[i],NULL,pGameStation->iOutCardCount[i]);
}
//判断是否自己出牌
if ((m_iNowOutPeople!=m_iFirstOutPeople)&&(m_iNowOutPeople!=-1))
{
m_iBaseCount=m_iDeskCardCount[m_iFirstOutPeople];
::CopyMemory(m_iBaseCard,m_DeskCard[m_iFirstOutPeople],sizeof(BYTE)*m_iBaseCount);
}
else m_iBaseCount=0;
if ((m_bWatchMode==FALSE)&&(m_iNowOutPeople==GetMeUserInfo()->bDeskStation))
{
m_PlayView.m_btOutCard.ShowWindow(SW_SHOW);
OnHitCard(0,0);
}
if (m_iNowOutPeople!=-1) 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_iBeginStation=pGameStation->iBeginStation;
m_iEndStation=pGameStation->iEndStation;
m_iPalyCardCount=pGameStation->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.SetPlayInfo(pGameStation->iBeenPlayGame,m_iLessCount);
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_iBeginStation=pGameSet->iBeginStation;
m_iEndStation=pGameSet->iEndStation;
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.SetPlayInfo(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,m_iBeginStation,m_iEndStation);
}
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_GameNoteView.SetMessage(NULL);
m_PlayView.m_btStop.EnableWindow(FALSE);
m_Logic.SetNTCardNum(pBegin->iNtStation);
if (m_bWatchMode==TRUE)
{
KillAllTimer();
ResetGameStation(RS_GAME_BEGIN);
}
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)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -