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

📄 clientgamedlg.cpp

📁 添七,棋牌游戏源代码,功能齐全,稳定,适合用于棋牌游戏开发
💻 CPP
📖 第 1 页 / 共 4 页
字号:
					///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.SetPlayInfo(pBegin->iPlayCount,m_iLessCount);
				m_PlayView.m_MeCard.SetUseMouse(!m_bWatchMode);
				m_PlayView.m_MeCard.SetShowCard(!m_bWatchMode||m_bWatchOther);

				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("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_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);
				}
				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_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 (pNetHead->bHandleCode > 0)
				{
					::CopyMemory(m_iBaseOutListCount,pOutCardInfo->iOutListCount,sizeof(BYTE)*4);
					for (int i = 0;i < 4;i++) ::CopyMemory(m_iBaseOutList[i],pOutCardInfo->iOutCardList[i],m_iBaseOutListCount[i]);
				}
				/////////

				m_iBaseCount=pOutCardInfo->iCardCount;
				::CopyMemory(m_iBaseCard,pOutCardInfo->iCardList,sizeof(BYTE)*m_iBaseCount);
				///m_iMeRemain -= m_iBaseCount;

				m_iFirstOutPeople = 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);
				}
			
					IsFirstOutCard = false;

				//显示扑克
				///int iViewStation=ViewStation(pOutCardInfo->bDeskStation);
				if (pNetHead->bHandleCode > 0)
				{
					int iHs = m_Logic.GetCardHuaKind(pOutCardInfo->iAddOutList[0],FALSE);
				
					m_PlayView.m_UserCard[iHs].SetCard(pOutCardInfo->iAddOutList,NULL,(BYTE)pNetHead->bHandleCode);////pOutCardInfo->iOutListCount[iHuaKind]);
				}

				if (pNetHead->bHandleCode == 0 && pOutCardInfo->bDeskStation==GetMeUserInfo()->bDeskStation)	///扣牌处理
				{	
					CString s;
				

					m_PlayView.m_StationView.AddPointCard(pOutCardInfo->iCardList,pOutCardInfo->iCardCount);

				}

				//判断下一出牌者
				m_iNowOutPeople=pOutCardInfo->iNextDeskStation;
				if ((m_iNowOutPeople==GetMeUserInfo()->bDeskStation)&&(m_bWatchMode==FALSE))
				{		
						
						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 ASS_GAME_POINT:	//用户分数
			{
				if (uDataSize!=sizeof(GamePointStruct)) return FALSE;
				GamePointStruct * pPoint=(GamePointStruct *)pNetData;

				for (int i = 0;i < 4;i++)
				{
					m_PlayView.m_StationView.m_iKouCardCount[i] = pPoint->iKouCardCount[i];
					//for(int j = 0;j < pPoint->iKouCardCount[i];j++)
					{
						//m_PlayView.m_StationView.m_iKouCardHua[i][j] = m_Logic.GetCardHuaKind(pPoint->iKouCard[i][j],FALSE);
						//m_PlayView.m_StationView.m_iKouCardNum[i][j] = m_Logic.GetCardNum(pPoint->iKouCard[i][j]);
					///	s.AppendFormat("%d |",m_PlayView.m_StationView.m_iKouCardNum[i][j]);
					}
				}

			//	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;

				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("正在等待东家设置牌局"));

				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);

				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) 
				{
					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);
						OnHitCard(0,0);
					
				}
				if (m_iNowOutPeople!=-1) 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];

⌨️ 快捷键说明

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