⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientgamedlg.cpp

📁 添七,棋牌游戏源代码,功能齐全,稳定,适合用于棋牌游戏开发
💻 CPP
📖 第 1 页 / 共 4 页
字号:

#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 + -