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

📄 clientgamedlg.cpp

📁 这是用Windows编写的
💻 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_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 + -