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

📄 clientgamedlg.cpp

📁 原子,棋牌游戏源代码,功能齐全,稳定,适合用于棋牌游戏开发
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			}
		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);
				
			//	if(m_pGameInfo->bEnableSound)
			//		PlaySound("tml\\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_Logic.SetDaoCard((BYTE)pNetHead->bHandleCode);
				m_PlayView.m_StationView.SetDaoCardInfo(m_Logic.GetCardNum((BYTE)pNetHead->bHandleCode),TRUE,m_bFlagNextHalf);
				m_Logic.SortCard(m_iMeCardList,NULL,m_iMeCardCount);
				m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);		
				if(m_pGameInfo->bEnableSound)
					PlaySound("tml\\OutCard.wav",NULL,SND_ASYNC|SND_FILENAME);
				return TRUE;
			}
	
		
			
		case ASS_GAME_PLAY:		//开始升级游戏
			{
				if (uDataSize!=sizeof(BeginPlayStruct)) return FALSE;
				BeginPlayStruct * pBeginInfo=(BeginPlayStruct *)pNetData;
				m_bTimeOutCount=0;
				SetStationParameter(GS_PLAY_GAME);

				m_PlayView.m_btBackCard.EnableWindow(TRUE);
				m_iNowOutPeople=m_iFirstOutPeople=pBeginInfo->iOutDeskStation;

			
				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);
					OnHitCard(0,0);
				}

				for (int i=0;i<4;i++) m_PlayView.m_UserCard[i].SetCard(NULL,NULL,0);
				m_PlayView.m_GameNoteView.SetMessage(NULL);
				SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);
				if(m_pGameInfo->bEnableSound)
					PlaySound("tml\\BeginGame.wav",NULL,SND_ASYNC|SND_FILENAME);
				return TRUE;
			}
		case ASS_OUT_CARD:		//用户出牌
			{
				OutCardMsg * pOutCardInfo=(OutCardMsg *)pNetData;
			
				KillAllTimer();
				if(m_pGameInfo->bEnableSound)
					PlaySound("tml\\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_iBaseCount=pOutCardInfo->iCardCount;
				::CopyMemory(m_iBaseCard,pOutCardInfo->iCardList,sizeof(BYTE)*m_iBaseCount);

				//判断是否第一个出牌者
				if (m_iLastOutPeople < 0)//pOutCardInfo->bDeskStation==m_iFirstOutPeople)
				{
					///m_iBaseCount=pOutCardInfo->iCardCount;
					//::CopyMemory(m_iBaseCard,pOutCardInfo->iCardList,sizeof(BYTE)*m_iBaseCount);
					for (int i=0;i<4;i++)	
					{
						m_PlayView.m_UserCard[i].SetCard(NULL,NULL,0);
						m_PlayView.m_PassCard[i].ShowWindow(SW_HIDE);
					}
				}
				
				m_iLastOutPeople = pOutCardInfo->bDeskStation;

				//删除自己的扑克
				if (pOutCardInfo->bDeskStation==GetMeUserInfo()->bDeskStation)
				{
					m_Logic.RemoveCard(pOutCardInfo->iCardList,pOutCardInfo->iCardCount,m_iMeCardList,m_iMeCardCount);
					m_iMeCardCount-=pOutCardInfo->iCardCount;
					m_PlayView.m_MeCard.SetCard(m_iMeCardList,NULL,m_iMeCardCount);
				}

				//显示扑克
				int iViewStation=ViewStation(pOutCardInfo->bDeskStation);
				m_PlayView.m_UserCard[iViewStation].SetCard(pOutCardInfo->iCardList,NULL,pOutCardInfo->iCardCount);

				//判断下一出牌者
				int iStation = ViewStation(pOutCardInfo->iNextDeskStation);
				m_PlayView.m_PassCard[iStation].ShowWindow(SW_HIDE);

				m_iNowOutPeople=pOutCardInfo->iNextDeskStation;
				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_GAME_POINT:	//用户分数
			{
				if (uDataSize!=sizeof(GamePointStruct)) return FALSE;
				GamePointStruct * pPoint=(GamePointStruct *)pNetData;
				if(pPoint->bAdd)
				{
					int iCardCount=0,iCardNum=0;
					BYTE iTempCard[36];
					for (int i=0;i<4;i++)
					{
						for (int j=0;j<m_iDeskCardCount[i];j++)
						{
							iCardNum=m_Logic.GetCardNum(m_DeskCard[i][j]);
							if ((iCardNum==5)||(iCardNum==10)||(iCardNum==13)) iTempCard[iCardCount++]=m_DeskCard[i][j];
						}
					}
					m_PlayView.m_StationView.AddPointCard(iTempCard,iCardCount);
				}
				if(pPoint->iPoint!=0)
					m_PlayView.SetGamePoint(pPoint->iPoint);

			//	if(m_PlayView.m_iGamePoint>=80 && m_PlayView.m_bMeSide && !m_bWatchMode)
					m_PlayView.m_btStop.EnableWindow(true);

				return TRUE;
			}*/
		case ASS_NEW_TURN:		//新一轮出牌
			{
				m_iNowOutPeople=m_iFirstOutPeople=(BYTE)pNetHead->bHandleCode;
				m_iLastOutPeople = -1;

				int iStation = ViewStation(m_iNowOutPeople);
				m_PlayView.m_PassCard[iStation].ShowWindow(SW_HIDE);

				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);
					OnHitCard(0,0);
				}
				SetClock(m_iNowOutPeople,m_iLessCount,ID_OUT_CARD);

				//保存上轮扑克
				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_bShowLast=TRUE;
				m_iLastCardCount=m_iDeskCardCount[0];
				::CopyMemory(&m_iLastOutCard,&m_DeskCard,sizeof(m_DeskCard));
				//m_PlayView.m_btLastTurn.EnableWindow(TRUE);

				//删除扑克信息
				for (int i=0;i<4;i++) m_iDeskCardCount[i]=0;

				return TRUE;
			}
		case ASS_SALE_END:	//游戏安全结束
		case ASS_CUT_END:	//用户强行离开
			{
				if (uDataSize!=sizeof(GameCutStruct)) return FALSE;
				GameCutStruct * pGameEnd=(GameCutStruct *)pNetData;
				KillClock(0);
				if(pGameEnd->bDeskStation != GetMeUserInfo()->bDeskStation)
				{


				//显示信息
				TCHAR szMessage[100];
				if (pNetHead->bAssistantID==ASS_CUT_END)
					sprintf(szMessage,TEXT("由于〖 %s 〗强行退出,游戏结束。"),m_pUserInfo[pGameEnd->bDeskStation]->GameUserInfo.szName);
				else 
					sprintf(szMessage,TEXT("由于〖 %s 〗离开,游戏结束。"),m_pUserInfo[pGameEnd->bDeskStation]->GameUserInfo.szName);
				m_PlayView.m_StationView.CleanAllInfo(TRUE);
				m_MessageHandle.InsertNormalMessage(szMessage);
				}
				if(m_pGameInfo->bEnableSound)
					PlaySound("tml\\GameOver.wav",NULL,SND_ASYNC|SND_FILENAME);
				SetStationParameter(GS_WAIT_SETGAME);
				KillAllTimer();

				//上一轮数据
				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_bShowLast=FALSE;
				m_iLastCardCount=0;
				ResetGameStation(RS_GAME_CUT);

				//设置牌局
				if ((GetMeUserInfo()->bDeskStation==0)&&(m_bWatchMode==FALSE))
					m_PlayView.m_GameSet.SetGameSetInfo(m_iCardCount);
				else m_PlayView.m_GameNoteView.SetMessage(TEXT("正在等待东家设置牌局"));
				m_bFlagNextHalf = false;
				return TRUE;
			}
		case ASS_CONTINUE_END:	//游戏结束
		case ASS_NO_CONTINUE_END:
			{
				if (uDataSize!=sizeof(GameEndStruct)) return FALSE;
				GameEndStruct * pGameEnd=(GameEndStruct *)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;

				//设置分数 
				m_PlayView.m_StationView.SetTurePoint(pGameEnd->iTurePoint[GetMeUserInfo()->bDeskStation]);
				m_PlayView.m_MeCard.SetShowCard(false);
				m_PlayView.m_MeCard.SetCard(pGameEnd->iBackList,NULL,3);
				m_PlayView.m_MeCard.SetUseMouse(FALSE);
				

				if (pNetHead->bAssistantID==ASS_NO_CONTINUE_END)	//结束游戏
				{
//					m_PlayView.m_GameEndView.SetEndGameData(pGameEnd,m_pUserInfo,m_iPalyCardCount,this);
					//在聊天框里显示成绩
					m_MessageHandle.InsertNormalMessage("本局游戏结果:");
					m_MessageHandle.InsertNormalMessage("------");
					CString str;
					for (int i=0;i<4;i++)
					{
						if (m_pUserInfo[i]!=NULL)
						{
							str.Format("%s 得分 %d",m_pUserInfo[i]->GameUserInfo.szName,pGameEnd->iTurePoint[i]);
							m_MessageHandle.InsertNormalMessage(str.GetBuffer(MAX_PATH));
						}
					}
					m_MessageHandle.InsertNormalMessage("------");
					
					m_PlayView.m_btContinue.ShowWindow(SW_HIDE);
					//设置牌局
					if ((GetMeUserInfo()->bDeskStation==0)&&(m_bWatchMode==FALSE)) m_PlayView.m_GameSet.SetGameSetInfo(m_iCardCount);
					else m_PlayView.m_GameNoteView.SetMessage(TEXT("正在等待东家设置牌局"));
				}
				else	//继续游戏
				{
					//在聊天框里显示成绩
					m_MessageHandle.InsertNormalMessage("本局游戏结果:");
					m_MessageHandle.InsertNormalMessage("------");
					CString str;
					for (int i=0;i<4;i++)
					{
						if (m_pUserInfo[i]!=NULL)
						{
							str.Format("%s 得分 %d",m_pUserInfo[i]->GameUserInfo.szName,pGameEnd->iTurePoint[i]);
							m_MessageHandle.InsertNormalMessage(str.GetBuffer(MAX_PATH));
						}
					}
					m_MessageHandle.InsertNormalMessage("------");
					if (m_bWatchMode==FALSE)
					{
						m_PlayView.m_btContinue.ShowWindow(SW_SHOW);
						m_PlayView.m_btContinue.SetFocus();
					}
					SetClock(GetMeUserInfo()->bDeskStation,20,ID_BEGIN_TIME);
				}

				//设置数据
				if(m_pGameInfo->bEnableSound)
					PlaySound("tml\\GameOver.wav",NULL,SND_ASYNC|SND_FILENAME);
				SetStationParameter((pNetHead->bAssistantID==ASS_CONTINUE_END)?GS_WAIT_NEXT:GS_WAIT_SETGAME);
				ResetGameStation(RS_GAME_END);
				m_bFlagNextHalf = false;
				return TRUE;
			}
		case ASS_HAVE_THING:	//用户请求离开
			{
				HaveThingStruct * pThing=(HaveThingStruct *)pNetData;
				if (m_PlayView.m_ThingMessage.GetSafeHwnd()==NULL) 
				{
					m_PlayView.m_ThingMessage.Create(IDD_THING_MESSAGE,this);
					m_PlayView.m_ThingMessage.m_pParent=this;
				}
				m_PlayView.m_ThingMessage.SetLeaveMessage(pThing->szMessage,m_pUserInfo[pThing->pos]->GameUserInfo.szName);
				m_PlayView.m_ThingMessage.ShowWindow(SW_SHOW);
				return TRUE;
			}
		case ASS_LEFT_RESULT:	//请求离开结果 
			{
				if (uDataSize!=sizeof(LeaveResultStruct)) return FALSE;
				LeaveResultStruct * pLeftResult=(LeaveResultStruct *)pNetData;
				CString strBuffer;
				if (!pLeftResult->bArgeeLeave) 
//					strBuffer.Format(TEXT("玩家 %s 同意游戏结束。"),m_UserInfo[pLeftResult->bDeskStation].szName);
//				else 
				{
					strBuffer.Format(TEXT("玩家 %s 不同意游戏结束。但本局结束后,申请离开者可以离开。"),m_pUserInfo[pLeftResult->bDeskStation]->GameUserInfo.szName);
					m_MessageHandle.InsertNormalMessage(strBuffer.GetBuffer(MAX_PATH));
				}
				return TRUE;
			}
		case ASS_MESSAGE:
			{
				if (uDataSize!=sizeof(MessageStruct))
				{
					AfxMessageBox("435435");
					return FALSE;
				}
				MessageStruct *pMessage=(MessageStruct*)pNetData;
				m_MessageHandle.InsertSystemMessage(pMessage->Message);
				return true;
			}
		case ASS_STOP_THING://对家请求提前结束
			{
				if (m_PlayView.m_StopMessage.GetSafeHwnd()==NULL) 
				{
					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) 

⌨️ 快捷键说明

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