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

📄 clientgamedlg.cpp

📁 原子,棋牌游戏源代码,功能齐全,稳定,适合用于棋牌游戏开发
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				{
					m_MessageHandle.InsertNormalMessage("对家同意提前结束。");
				}
				else 
				{
					m_MessageHandle.InsertNormalMessage("对家不同意提前结束。");
				}
				return true;
			}
			
		case ASS_PASS://不出
			{
				m_iNowOutPeople=(BYTE)pNetHead->bHandleCode;
				
				int iStation = ViewStation(m_iNowOutPeople);
				m_PlayView.m_PassCard[iStation].ShowWindow(SW_HIDE);

				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);
						OnHitCard(0,0);
					
				}
				if (m_iNowOutPeople!=-1) SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
				return true;
			}
			
		case ASS_RECV_PASS://收到不出
			{
				if (uDataSize != sizeof(tagPassStruct)) return FALSE;
				tagPassStruct *pass = (tagPassStruct *) pNetData;

				int iStation = ViewStation(pass->iPassStation);
				m_PlayView.m_UserCard[iStation].SetCard(NULL,NULL,0);
				m_PlayView.m_PassCard[iStation].ShowWindow(SW_SHOW);
				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];
					}
				}
				
				if (pPlayInfo->iScore > 0) m_PlayView.m_btStop.EnableWindow(true);
				m_PlayView.m_StationView.SetUserPlayInfo(szName,pPlayInfo->iScore,iCardCount,TRUE);
				return true;
			}

		case ASS_START_NEXT_HALF:	////开始下半局
			{	
				
				if (uDataSize != sizeof(tagLastHalfStruct)) return FALSE;
				tagLastHalfStruct *pLastHaltInfo = (tagLastHalfStruct *)pNetData;

				KillClock(0);
				
				//上一轮数据
				if (m_bShowIngLast)
				{
					KillTimer(ID_SHOW_LAST);
					m_bShowIngLast=FALSE;
					for (int i=0;i<4;i++)
						m_PlayView.m_UserCard[ViewStation(i)].SetCard(m_DeskCard[i],NULL,m_iDeskCardCount[i]);
				}
				m_bShowLast=FALSE;
				
				//在聊天框里显示成绩
				CString str;
				m_MessageHandle.InsertNormalMessage("上半局结束:");
				str.Format("%d : %d",pLastHaltInfo->iScores[0],pLastHaltInfo->iScores[1]);
				m_MessageHandle.InsertNormalMessage(str.GetBuffer(MAX_PATH));
				m_MessageHandle.InsertNormalMessage("------");

				m_MessageHandle.InsertNormalMessage("下半局开始:");
				str.Format(" %s 先出牌",pLastHaltInfo->szName);
				m_MessageHandle.InsertNormalMessage(str.GetBuffer(MAX_PATH));
				m_MessageHandle.InsertNormalMessage("------");
			
				SetStationParameter(GS_WAIT_NEXT);
				OnControlHitBegin();
				//SetClock(GetMeUserInfo()->bDeskStation,1,ID_BEGIN_TIME);
				
				ResetGameStation(RS_GAME_END);
				m_bFlagNextHalf = 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_iNtCount=0;
	m_iNtPeopole=-1;
	m_iNowOutPeople=-1;
	m_iBaseCount=0;
	m_iFirstOutPeople=-1;
	m_iLastCardCount=0;
	m_bShowLast=FALSE;
	::memset(m_iBackCard,0,sizeof(m_iBackCard));
	::memset(m_iDeskCardCount,0,sizeof(m_iDeskCardCount));

	::memset(m_iUserJiaoFen,0,sizeof(m_iUserJiaoFen));

	//界面重置
	m_PlayView.m_btGiveBack.ShowWindow(SW_HIDE);
	m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
	m_PlayView.m_btPass.ShowWindow(SW_HIDE);
	//m_PlayView.m_NtList.ShowWindow(SW_HIDE);
	//m_PlayView.m_btLastTurn.EnableWindow(FALSE);
	m_PlayView.m_btBackCard.EnableWindow(FALSE);
//	m_PlayView.m_btThing.EnableWindow(FALSE);
	m_PlayView.m_StationView.SetShowMessage(FALSE);
	m_PlayView.SetGamePoint();
	m_PlayView.SetNTStation(-1);
	m_PlayView.SetShowNtStation(-1,0);
	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);
		m_PlayView.m_PassCard[i].ShowWindow(SW_HIDE);
	}
	if (m_PlayView.m_GameInfo.GetSafeHwnd()) m_PlayView.m_GameInfo.DestroyWindow();
//	if (m_PlayView.m_BackCardDlg.GetSafeHwnd()) m_PlayView.m_BackCardDlg.DestroyWindow();
	if (m_PlayView.m_HaveThing.GetSafeHwnd()) m_PlayView.m_HaveThing.DestroyWindow();
	if (m_PlayView.m_ThingMessage.GetSafeHwnd()) m_PlayView.m_ThingMessage.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;
}

//清除所有定时器
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("tml\\Warning.wav",NULL,SND_ASYNC|SND_FILENAME);
			}

			return true;
		}
	case ID_OUT_CARD:	//出牌
		{
			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 < 0) //首先出牌
					{
						//发送数据
						OutCardStruct OutCard;
						m_Logic.AutoOutCard(m_iMeCardList,m_iMeCardCount,m_iBaseCard,m_iBaseCount,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("tml\\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;
		}
	}
	return true;
}

//按动扑克按钮函数
LRESULT	CClientGameDlg::OnHitCard(WPARAM wparam, LPARAM lparam)
{
	
	if (GetStationParameter()==GS_PLAY_GAME)	//出牌状态
	{
		//验证出牌信息
		BYTE iUpCard[39];
		if (m_iNowOutPeople!=GetMeUserInfo()->bDeskStation) return 0;
		int iCardCount=m_PlayView.m_MeCard.GetUpCard(iUpCard);
	
		//出牌数目判断
		if (iCardCount==0)
		{
			m_PlayView.m_btOutCard.EnableWindow(FALSE);
			return 0;
		}

		//验证是否可以出这样的扑克
		if (m_iLastOutPeople < 0)//m_iFirstOutPeople==GetMeUserInfo()->bDeskStation)	//第一个出牌者
		{
			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,
												m_iBaseCount,m_iMeCardList,m_iMeCardCount));
		}
	}

	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)
{
	//设置控件
	if (m_PlayView.m_btOutCard.IsWindowEnabled()&&m_PlayView.m_btOutCard.IsWindowVisible())
	{
		//设置数据
		KillAllTimer();
		m_iNowOutPeople=-1;
		m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
		m_PlayView.m_btPass.ShowWindow(SW_HIDE);

		//发送数据
		OutCardStruct OutCard;
		OutCard.iCardCount=m_PlayView.m_MeCard.GetUpCard(OutCard.iCardList);
		m_Logic.SortCard(OutCard.iCardList,NULL,OutCard.iCardCount);
		if(OutCard.iCardCount!=0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -