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

📄 clientgamedlg.cpp

📁 这是用Windows编写的
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		//		{
		//			m_PlayView.m_StopMessage.Create(IDD_STOP_MESSAGE,this);
		//			m_PlayView.m_StopMessage.m_pParent=this;
		//		}
		//		m_PlayView.m_StopMessage.ShowWindow(SW_SHOW);
		//		return true;
		//	}
		//case ASS_AGREE_STOP://请求提前结束结果
		//	{
		//		if (uDataSize!=sizeof(StopResultStruct))return FALSE;
		//		StopResultStruct *pStop=(StopResultStruct*)pNetData;
		//		if (pStop->bArgee) 
		//		{
		//			m_MessageHandle.InsertNormalMessage("对家同意提前结束。");
		//		}
		//		else 
		//		{
		//			m_MessageHandle.InsertNormalMessage("对家认为还有再升级的机会。");
		//		}
		//		return true;
		//	}
			
		case ASS_PASS://不出
			{
				m_iNowOutPeople=(BYTE)pNetHead->bHandleCode;
				
			
				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);
						m_PlayView.m_btnTiShi.EnableWindow(TRUE);
						m_PlayView.m_btnTiShi.ShowWindow(SW_SHOW);
						OnHitCard(0,0);
					
				}
				if (m_iNowOutPeople!=255) SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
				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];
		//			}
		//		}
		//		
		//		
		//		//m_PlayView.m_StationView.设置剩余牌(szName,pPlayInfo->iScore,iCardCount,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_iNowOutPeople=255;
	m_iFirstOutPeople=-1;
	m_iLastCardCount=0;
	m_bShowLast=FALSE;
	::memset(m_iDeskCardCount,0,sizeof(m_iDeskCardCount));
	::memset(&m_iBaseCard,0,sizeof(m_iBaseCard));

	//界面重置
	m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
	m_PlayView.m_btPass.ShowWindow(SW_HIDE);
	m_PlayView.m_btnTiShi.ShowWindow(SW_HIDE);
	m_PlayView.m_btLastTurn.EnableWindow(FALSE);
	m_PlayView.m_btSortCard.EnableWindow(FALSE);
	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);
	}
	if (m_PlayView.m_GameInfo.GetSafeHwnd()) m_PlayView.m_GameInfo.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;
}
////NT 按钮函数
//LRESULT	CClientGameDlg::OnHitNt(WPARAM wparam, LPARAM lparam)
//{
//
//	return 0;
//}
//
////更新反牌控件
//BOOL CClientGameDlg::UpdateNtList()
//{
//	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("pic\\Warning.wav",NULL,SND_ASYNC|SND_FILENAME);
			}

			return true;
		}
	case ID_WAIT_ROB:	//抢底牌
		{
			int iViewStation=ViewStation(bDeskStation);
			if (uTimeCount<=1)
			{
				//时间到了
			///	if (m_bWatchMode==FALSE) m_PlayView.m_NtList.ShowWindow(SW_HIDE);
				return true;
			}
			return true;
		}
	//case ID_GIVE_BACK:	//留底牌
	//	{
	//		int iViewStation=ViewStation(bDeskStation);
	//		if (uTimeCount<=1)
	//		{
	//			//时间到了
	//			/*if ((m_bWatchMode==FALSE)&&m_PlayView.m_btGiveBack.IsWindowVisible())
	//			{
	//				BackCardStruct BackCard;
	//				BackCard.iBackCardCount=((m_iPalyCardCount==2)?8:6);
	//				::CopyMemory(BackCard.iBackCard,&m_iMeCardList[m_iMeCardCount-BackCard.iBackCardCount],
	//							 sizeof(BYTE)*BackCard.iBackCardCount);
	//				m_PlayView.m_btGiveBack.EnableWindow(FALSE);
	//				m_PlayView.m_btGiveBack.ShowWindow(SW_HIDE);
	//				SendGameData(&BackCard,sizeof(BackCard),MDM_GM_GAME_NOTIFY,ASS_BACK_CARD,0);
	//			}*/
	//			return true;
	//		}
	//		if ((uTimeCount<=10)&&(m_bWatchMode==FALSE)&&(GetMeUserInfo()->bDeskStation==m_iNtPeopole)) 
	//		{
	//			if(m_pGameInfo->bEnableSound)
	//				PlaySound("pic\\Warning.wav",NULL,SND_ASYNC|SND_FILENAME);
	//		}
	//		return true;
	//	}
	case ID_OUT_CARD:	//出牌
		{
			m_PlayView.UpdateViewFace(NULL);
			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 ==255)||(m_iLastOutPeople=m_iNowOutPeople)) //判断是否第一个出牌者
					{
						OutCardStruct OutCard;
						if(m_iMeCardCount > 0)
						{
							OutCard.iCardCount = 1;
							OutCard.iCardList[0] =m_iMeCardList[m_iMeCardCount - 1];
							m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
							m_PlayView.m_btPass.ShowWindow(SW_HIDE);
							m_PlayView.m_btnTiShi.ShowWindow(SW_HIDE);
							//出牌
							SendGameData(&OutCard,sizeof(OutCard) -sizeof(OutCard.iCardList)+sizeof(BYTE)*OutCard.iCardCount,
					  							MDM_GM_GAME_NOTIFY,ASS_OUT_CARD,0);
							
						}

						
						////发送数据
						//OutCardStruct OutCard;
						//m_Logic.AutoOutCard(m_iMeCardList,m_iMeCardCount,m_iBaseCard,m_iBaseCard.iCardCount,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("pic\\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;
		}
	case ID_SHOW_CARD:	//甩牌失败
		{
			int iViewStation=ViewStation(bDeskStation);
			if (uTimeCount==2)	//复原扑克
			{
				//上一轮数据
				if (m_bShowIngLast)
				{
					m_bShowIngLast=FALSE;
					KillTimer(ID_SHOW_LAST);
					for (int i=0;i<3;i++) m_PlayView.m_UserCard[ViewStation(i)].SetCard(NULL,NULL,NULL);
				}

				//恢复扑克
				m_PlayView.m_UserCard[iViewStation].SetCard(m_DeskCard[m_iFirstOutPeople],
					NULL,m_iDeskCardCount[m_iFirstOutPeople]);
				if (m_iFirstOutPeople==GetMeUserInfo()->bDeskStation) 
					m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);
			}
			if (uTimeCount<=1)
			{
				//时间到了
				m_iNowOutPeople=(m_iFirstOutPeople+1)%4;

				//显示出牌按钮
				if ((m_iNowOutPeople==GetMeUserInfo()->bDeskStation)&&(m_bWatchMode==FALSE))
				{
					m_PlayView.m_btOutCard.ShowWindow(SW_SHOW);
					OnHitCard(0,0);
				}
				SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
				return true;
			}
			return true;
		}
	}
	return true;
}

//按动扑克按钮函数
LRESULT	CClientGameDlg::OnHitCard(WPARAM wparam, LPARAM lparam)
{ 

	if (m_iNowOutPeople!=GetMeUserInfo()->bDeskStation) return 0;
	if (GetStationParameter()==GS_PLAY_GAME)	//出牌状态
	{
		//验证出牌信息
		BYTE iUpCard[27];
		int iCardCount=m_PlayView.m_MeCard.GetUpCard(iUpCard);
	
		//出牌数目判断
		if (iCardCount==0)
		{
			m_PlayView.m_btOutCard.EnableWindow(FALSE);
			return 0;
		}

		//验证是否可以出这样的扑克
		if (m_iLastOutPeople == m_iNowOutPeople)//m_iFirstOutPeople==GetMeUserInfo()->bDeskStation)	//第一个出牌者
		{

 
			//m_PlayView.m_btOutCard.EnableWindow(m_Logic.bCanFirstChu(iUpCard,iCardCount));
				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.iCardList,m_iBaseCard.iCardCount,m_iMeCardList,m_iMeCardCount));
		}
	}

	return 0;

}

////留底牌按钮函数
//LRESULT	CClientGameDlg::OnHitBackCard(WPARAM wparam, LPARAM lparam)
//{
//	KillAllTimer();
//	
//	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)
{


	OnHitCard(0,0);
	//设置控件
	//设置控件
	if (m_PlayView.m_btOutCard.IsWindowEnabled()&&m_PlayView.m_btOutCard.IsWindowVisible())
	{
		//设置数据
		KillAllTimer();
		m_iNowOutPeople=255;
		m_iSelCard.iCardCount=0;
		m_PlayView.m_btOutCard.ShowWindow(SW_HIDE);
		m_PlayView.m_btPass.ShowWindow(SW_HIDE);
		m_PlayView.m_btnTiShi.ShowWindow(SW_HIDE);
		//发送数据
		OutCardStruct OutCard;
		OutCard.iCardCount=m_PlayView.m_MeCard.GetUpCard(OutCard.iCardList);
		if(OutCard.iCardCount!=0)
			SendGameData(&OutCard,sizeof(OutCard)-sizeof(OutCard.iCardList)+sizeof(BYTE)*OutCard.iCardCount,
							  MDM_GM_GAME_NOTIFY,ASS_OUT_CARD,0);
		//设置预显示
		m_PlayView.m_UserCard[2].SetCard(OutCard.iCardList,NULL,OutCard.iCardCount);
	}

	return 0;
}

//按动上轮按钮函数
LRESULT	CClientGameDlg::OnHitLastTurn(WPARAM wparam, LPARAM lparam)
{
	if ((m_bShowIngLast)||(!m_bShowLast)||(m_iLastCardCount==0)||(m_iNowOutPeople==m_iFirstOutPeople)) return 0;
	m_bShowIngLast=TRUE;
	SetTimer(ID_SHOW_LAST,3000,NULL);
	for (int i=0;i<3;i++)
		m_PlayView.m_UserCard[ViewStation(i)].SetCard(m_iLastOutCard[i],NULL,m_iLastCardCount);
	return 0;
}

////按动排序钮函数
LRESULT	CClientGameDlg::OnHitSortCard(WPARAM wparam, LPARAM lparam)
{
	//if (m_PlayView.m_BackCardDlg.GetSafeHwnd()==NULL) m_PlayView.m_BackCardDlg.Create(IDD_BACK_CARD,this);
	//m_PlayView.m_BackCardDlg.SetBackCard(m_iBackCard,(m_iPalyCardCount==2)?8:6);
	////把按底牌按钮函数移到相应位置
	//CRect rect1,rect2;
	//m_PlayView.m_BackCardDlg.GetWindowRect(rect1);
	//m_PlayView.GetClientRect(rect2);
	//m_PlayView.m_BackCardDlg.MoveWindow(rect2.Width()-60-rect1.Width(),rect2.Height()-135-rect1.Height(),rect1.Width(),rect1.Height());

	//m_PlayView.m_BackCardDlg.ShowWindow(SW_SHOW);
	//m_PlayView.m_BackCardDlg.SetFocus();
	//return 0;
//		BYTE bUpList[128];
//		m_PlayView.m_iCardNum=m_PlayView.m_MeCard.GetCard(m_PlayView.m_TempMeCard,bUpList);
//		m_PlayView.m_MeCard.SetShowCard(TRUE);
//		m_PlayView.m_MeCard.SetCard(m_iBackCard,NULL,(m_iPalyCardCount==2)?8:6);
//		m_PlayView.m_MeCard.SetUseMouse(FALSE);
//		m_PlayView.m_btSortCard.ShowWindow(SW_HIDE);
//		SetTimer(ID_LOOK_BACK,2000,NULL);
	/*	m_PlayView.m_MeCard.SetShowCard(FALSE);
		m_PlayView.m_MeCard.ShowWindow(SW_HIDE);
		m_PlayView.m_MeBackCard.SetShowCard(TRUE);
		m_PlayView.m_MeBackCard.SetUseMouse(FALSE);
		m_PlayView.m_MeBackCard.ShowWindow(SW_SHOW);
		m_PlayView.m_MeBackCard.SetCard(m_iBackCard,NULL,(m_iPalyCardCount==2)?8:6);
		m_PlayView.m_btSortCard.ShowWindow(SW_HIDE);
		SetTimer(ID_LOOK_BACK,2000,NULL);*/

		if (!m_bSortFalg)//排序
		{
			m_Logic.ReSortCard(m_iMeCardList,m_iMeCardCount);
			m_bSortFalg = true;
		}
		else 
		{
			m_Logic.SortCard(m_iMeCardList,NULL,m_iMeCardCount);
			m_bSortFalg = false;
		}

		m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);


	return 0;

}

////按动有事按钮函数
//LRESULT	CClientGameDlg::OnHitHaveThing(WPARAM wparam, LPARAM lparam)
//{

⌨️ 快捷键说明

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