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

📄 net_face.cpp

📁 网页游戏赤壁
💻 CPP
📖 第 1 页 / 共 4 页
字号:
#include <dplay.h>
#include "cbmap.h"
#include "Assert.h"
#include "Net_Face.h"
#include "cbrun.h"
#include "cbdraw.h"
#include "ddcompo.h"
#include "cbgame.h"
#include "cbshadow.h"
#include "cbmouse.h"
#include "cbother.h"
#include "cbprompt.h"
#include "cbdata.h"
#include "cbmini.h"
#include "L_SCAN.h"
#include "ddmenu.h"
#include "cbeyes.h"	// getrandom


/////////////////////Liugang///////////////////////
extern	void GAME_SetAlly( int nPlayer1, int nPlayer2, BOOL bSet);
extern	int CTRL_nTaskHeader[GAME_PLAYER_MAX];
extern	BOOL	GAME_bNetPlayerOK[GAME_PLAYER_MAX];// 确认连接完成
extern	int	CTRL_nTaskTail[GAME_PLAYER_MAX];
extern	int CTRL_nTaskHead[GAME_PLAYER_MAX];
/////////////////////Liugang///////////////////////

///////////////////////初始化游戏时用///////////////////////////
extern	void MAP_InitGUR();
extern	void SHADOW_Clear();
extern	void MOUSE_SetState( int nState, BOOL bForce  );
extern	void OTHER_InitOther();
extern	void TY_EmprerorAIPosClear();
extern	void	FACE_ShowCommandUnit(int UnitID, DWORD Flag);
extern	struct CTRL_TASK_SAVE_CMDUNIT CTRL_TASK_saveCmdUnit;
extern	void CTRL_TASK_ClearAssembleSrc( BOOL bForce  );
extern	void CTRL_TASK_ClearAssembleDest();
extern	BOOL DATA_ReloadDATAFile( HWND hwnd );
extern	BOOL MINI_Load();
extern	void MINI_DrawAll(BOOL bDraw);
extern	BOOL GAME_bBegin;
extern	struct GAME_TIME_STRUCT	GAME_Time;
extern	CDDMenu		Menu_NetWork_SetNet;
extern	CDDMenu		* CurrentMenu;
extern	void	FACE_DeleteAllBitmap() ;
extern	void	FACE_DeleteAllCheckBox(void);
extern	void FACE_InitAllStrings() ;
extern	void	FACE_DeleteAllText() ;
///////////////////////初始化游戏时用///////////////////////////
//---------LHJ----------
#include "marco.h"
#include "interfac.h"
#include "interfa2.h"
//---------LHJ----------

#ifdef	_DEBUG
#define	OUTTIME			20000
#else	
#define	OUTTIME			10000
#endif

extern	int	                    DP_IsHost;//用于标示本进程在游戏中是否为主机,留着可能扩充使用
extern  BOOL	GAME_bNetwork;
extern	int		DP_NetworkInterface(int	Action, HWND   MainWndHandle);
extern	int		DP_ReceiveGameMessages( void );
extern	int		DP_SendGameMessages(/*DWORD to*/);
extern	BOOL CTRL_TASK_LIST_SendEx( int nPlayer, CONST struct CTRL_TASK_STRUCT *pTask, int nIndex ,int	nTail);
extern	int		DH_ComputerTaskNum[CTRL_TASK_LIST_MAX+CTRL_TASK_LIST_MAX];

extern	int		CB_Counter;//在进入战场之前,应该只置0。
int		Games_Status[MAX_PLAYERS+1];//初始化时,应该置为-1。
extern	BYTE                    DP_SendMessageBuff[BUFFER_MAX_BYTE];//用于存储玩家要发送的消息
extern	BYTE					DP_ReadMessage[BUFFER_MAX_BYTE];//用于将消息队列中的消息读出并传给调用者
extern	int						DP_ProviderNO;//用于返回玩家对网络服务的选择
extern	int						DP_SessionNO;//用于返回玩家对已经创建的游戏Session的选择
extern	LPSTR					DP_FullName;//玩家给Session起的名字
extern	LPSTR					DP_NickName;//玩家给本人起的在游戏中的名字
extern	PlayerInfo				DP_PlayerInformation[MAX_PLAYERS];
struct CTRL_TASK_STRUCT			Bak_Game_Message;
extern	struct CTRL_TASK_STRUCT	CTRL_TaskList[GAME_PLAYER_MAX][CTRL_TASK_LIST_MAX+CTRL_TASK_LIST_MAX];
short							DH_TaskAnswer[GAME_PLAYER_MAX][CTRL_TASK_LIST_MAX+CTRL_TASK_LIST_MAX];
int								DH_AnswerStatus;
int								DH_ReceiveAnswer=-1;
extern	struct	DP_NetworkInfor		DP_NetPlayerInfor[5];
int								DH_JoinPlayer[5];
int								Game_Return_Status[5];
int								Game_Ctrl_Status;
int								DH_GoNextLevel;
int								DH_CurrentCtrlPlayer;
int								NW_BeginTime;
int								IF_GoBackMain;

#define							ALREADY_GO_BAK			0
#define							NO_GO_BAK			-1


void DH_WriteLogFile();
int	DH_ReceiveMessage();
BOOL GAME_ReadNetworkBTLFile( HWND hwnd, LPCTSTR filename, LPCTSTR path );


int	Send_Destroy_Other(int	PlayerNum);
int	Send_Destroy_Me(void);


int	DH_ReceiveMessage()
{

	int								MessageType=0;
	int								Game_Boy_Num=0;
	int								Game_Boy_Syn_Num=0;
	struct CTRL_TASK_STRUCT			Game_Boy_Message;
//	static							i=0;
//	int								j;
	int								Other_Counter;


	DP_ReceiveGameMessages();
	if(DP_ReadMessage[0]!='\0')
		{
//			char	test32[255];
//			wsprintf(test32,"%s\n",(char *)DP_ReadMessage);
//			WriteLogFile("Test_message.log",(char *)test32);
		}
	else{return(-1);}
	sscanf((char *)DP_ReadMessage,"%d %d ",&MessageType,&Game_Boy_Num);
	switch(MessageType)
		{
			case	DP_MESSAGE:
					{
						{	//char	test32[255];
							//wsprintf(test32,"%s\n",(char *)DP_ReadMessage);
							//WriteLogFile("Test_message.log",(char *)test32);
						}
						if(Bak_Game_Message.nID!=0)
						{
							Game_Boy_Message.bDone     =Bak_Game_Message.bDone;
							Game_Boy_Message.nID       =Bak_Game_Message.nID;
							Game_Boy_Message.nLevel    =Bak_Game_Message.nLevel;
							Game_Boy_Message.bIRQ      =Bak_Game_Message.bIRQ;
							Game_Boy_Message.nTaskID   =Bak_Game_Message.nTaskID;
							Game_Boy_Message.nTaskIDEx =Bak_Game_Message.nTaskIDEx;
							Game_Boy_Message.nTaskIDEx2=Bak_Game_Message.nTaskIDEx2;
							Game_Boy_Message.nParam1   =Bak_Game_Message.nParam1;
							Game_Boy_Message.nParam2   =Bak_Game_Message.nParam2;
							Game_Boy_Message.nParam3   =Bak_Game_Message.nParam3;
							Game_Boy_Message.nParam4   =Bak_Game_Message.nParam4;

							//////////////////////////////////////////

							Bak_Game_Message.bDone     =0;
							Bak_Game_Message.nID       =0;
							Bak_Game_Message.nLevel    =0;
							Bak_Game_Message.bIRQ      =0;
							Bak_Game_Message.nTaskID   =QUXIAO;
							Bak_Game_Message.nTaskIDEx =0;
							Bak_Game_Message.nTaskIDEx2=0;
							Bak_Game_Message.nParam1   =0;
							Bak_Game_Message.nParam2   =0;
							Bak_Game_Message.nParam3   =0;
							Bak_Game_Message.nParam4   =0;

							//////////////////////////////////////////

/*							if(CTRL_TASK_LIST_SendExEx(Game_Boy_Num,(CONST struct CTRL_TASK_STRUCT *)&Game_Boy_Message)!=TRUE)
								{
									#ifdef	NETWORK
									MessageBox(NULL,"Send Message to the task queue error!!!"," Error",MB_OK);
									#endif
								}*/

							Game_Boy_Message.bDone     =0;
							Game_Boy_Message.nID       =0;
							Game_Boy_Message.nLevel    =0;
							Game_Boy_Message.bIRQ      =0;
							Game_Boy_Message.nTaskID   =QUXIAO;
							Game_Boy_Message.nTaskIDEx =0;
							Game_Boy_Message.nTaskIDEx2=0;
							Game_Boy_Message.nParam1   =0;
							Game_Boy_Message.nParam2   =0;
							Game_Boy_Message.nParam3   =0;
							Game_Boy_Message.nParam4   =0;
						}
					int		TaskSerialNum,TaskTail;
					sscanf((char *)DP_ReadMessage,"%d %d %d %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %d",&MessageType,&Game_Boy_Num,&Other_Counter,&TaskSerialNum,&Game_Boy_Message.bDone,&Game_Boy_Message.nID,&Game_Boy_Message.nLevel,&Game_Boy_Message.bIRQ,&Game_Boy_Message.nTaskID,&Game_Boy_Message.nTaskIDEx,&Game_Boy_Message.nTaskIDEx2,&Game_Boy_Message.nParam1,&Game_Boy_Message.nParam2,&Game_Boy_Message.nParam3,&Game_Boy_Message.nParam4,&TaskTail);
					if(Other_Counter==CB_Counter+1)
						{
							if(Bak_Game_Message.nID!=0)
								{MessageBox(NULL,"Receive the message is error!!!"," Error",MB_OK);}
							else{
									Bak_Game_Message.bDone     =Game_Boy_Message.bDone;
									Bak_Game_Message.nID       =Game_Boy_Message.nID;
									Bak_Game_Message.nLevel    =Game_Boy_Message.nLevel;
									Bak_Game_Message.bIRQ      =Game_Boy_Message.bIRQ;
									Bak_Game_Message.nTaskID   =Game_Boy_Message.nTaskID;
									Bak_Game_Message.nTaskIDEx =Game_Boy_Message.nTaskIDEx;
									Bak_Game_Message.nTaskIDEx2=Game_Boy_Message.nTaskIDEx2;
									Bak_Game_Message.nParam1   =Game_Boy_Message.nParam1;
									Bak_Game_Message.nParam2   =Game_Boy_Message.nParam2;
									Bak_Game_Message.nParam3   =Game_Boy_Message.nParam3;
									Bak_Game_Message.nParam4   =Game_Boy_Message.nParam4;

									//////////////////////

									Game_Boy_Message.bDone     =0;
									Game_Boy_Message.nID       =0;
									Game_Boy_Message.nLevel    =0;
									Game_Boy_Message.bIRQ      =0;
									Game_Boy_Message.nTaskID   =QUXIAO;
									Game_Boy_Message.nTaskIDEx =0;
									Game_Boy_Message.nTaskIDEx2=0;
									Game_Boy_Message.nParam1   =0;
									Game_Boy_Message.nParam2   =0;
									Game_Boy_Message.nParam3   =0;
									Game_Boy_Message.nParam4   =0;
									
									////////////////////////////

									Games_Status[Game_Boy_Num]=0;
									return(OK);

								}
						}
////////////////////应答的信号的格式为(应答信号的标志,发出应答信号的玩家的号,发出消息的玩家的号,此消息的序号)
					memset(DP_SendMessageBuff,0,sizeof(DP_SendMessageBuff));
					wsprintf((char *)DP_SendMessageBuff,"%d %d %d %d",DP_MESSAGE_ANSWER,GAME.nMe,Game_Boy_Num,TaskSerialNum);
					if(DP_NetworkInterface(DP_SEND_MESSAGE,NULL)!=OK)
						{
							#ifdef	NETWORK
							MessageBox(NULL,"Send Counter message error!!!","Error",MB_OK);
							#endif
						}

					if(CTRL_TASK_LIST_SendEx(Game_Boy_Num,(CONST struct CTRL_TASK_STRUCT *)&Game_Boy_Message,TaskSerialNum,TaskTail)!=TRUE)
						{
							#ifdef	NETWORK
							MessageBox(NULL,"Send Message to the task queue error!!!"," Error",MB_OK);
							#endif
						}}
					break;
			case	DP_MESSAGE_SYN:
					sscanf((char *)DP_ReadMessage,"%d %d %d",&MessageType,&Game_Boy_Num,&Game_Boy_Syn_Num);
//					memset(DP_SendMessageBuff,0,BUFFER_MAX_BYTE-1);
/*					wsprintf((char *)DP_SendMessageBuff,"%d %d %d ",DP_SYN_ANSWER,GAME.nMe,Game_Boy_Syn_Num);
					if(DP_NetworkInterface(DP_SEND_MESSAGE,NULL)!=OK)
						{
							#ifdef	NETWORK
							MessageBox(NULL,"Send Counter message error!!!","Error",MB_OK);
							#endif
						}*/
					if(Game_Boy_Syn_Num==CB_Counter)
						{
		//////////////////////////////////
							if(Bak_Game_Message.nID!=0)
								{
									Game_Boy_Message.bDone     =Bak_Game_Message.bDone;
									Game_Boy_Message.nID       =Bak_Game_Message.nID;
									Game_Boy_Message.nLevel    =Bak_Game_Message.nLevel;
									Game_Boy_Message.bIRQ      =Bak_Game_Message.bIRQ;
									Game_Boy_Message.nTaskID   =Bak_Game_Message.nTaskID;
									Game_Boy_Message.nTaskIDEx =Bak_Game_Message.nTaskIDEx;
									Game_Boy_Message.nTaskIDEx2=Bak_Game_Message.nTaskIDEx2;
									Game_Boy_Message.nParam1   =Bak_Game_Message.nParam1;
									Game_Boy_Message.nParam2   =Bak_Game_Message.nParam2;
									Game_Boy_Message.nParam3   =Bak_Game_Message.nParam3;
									Game_Boy_Message.nParam4   =Bak_Game_Message.nParam4;

									//////////////////////////////////////////

									Bak_Game_Message.bDone     =0;
									Bak_Game_Message.nID       =0;
									Bak_Game_Message.nLevel    =0;
									Bak_Game_Message.bIRQ      =0;
									Bak_Game_Message.nTaskID   =QUXIAO;
									Bak_Game_Message.nTaskIDEx =0;
									Bak_Game_Message.nTaskIDEx2=0;
									Bak_Game_Message.nParam1   =0;
									Bak_Game_Message.nParam2   =0;
									Bak_Game_Message.nParam3   =0;
									Bak_Game_Message.nParam4   =0;

									//////////////////////////////////////////

/*									if(CTRL_TASK_LIST_SendEx(Game_Boy_Num,(CONST struct CTRL_TASK_STRUCT *)&Game_Boy_Message)!=TRUE)
										{
											#ifdef	NETWORK
											MessageBox(NULL,"Send Message to the task queue error!!!"," Error",MB_OK);
											#endif
										}*/

									Game_Boy_Message.bDone     =0;
									Game_Boy_Message.nID       =0;
									Game_Boy_Message.nLevel    =0;
									Game_Boy_Message.bIRQ      =0;
									Game_Boy_Message.nTaskID   =QUXIAO;
									Game_Boy_Message.nTaskIDEx =0;
									Game_Boy_Message.nTaskIDEx2=0;
									Game_Boy_Message.nParam1   =0;
									Game_Boy_Message.nParam2   =0;
									Game_Boy_Message.nParam3   =0;
									Game_Boy_Message.nParam4   =0;
								}
//////////////////////////////////
							Games_Status[Game_Boy_Num]=0;
						}
					else{
							if((Game_Boy_Syn_Num==CB_Counter+1)&&(Bak_Game_Message.nID==0))
								{
									Games_Status[Game_Boy_Num]=0;
//									DH_WriteLogFile();
										{
											::RUN_RunUnits();
											::DRAW_DrawMaps();
											DDC_DisplayFrameRate();
										}
									CB_Counter++;
									DH_SendCounterMessage(CB_Counter);
									//应该强制的执行一轮::RUN_RunUnits();::DRAW_DrawMaps();DDC_DisplayFrameRate();
//									char	test2[255];
									#ifdef	NETWORK
									MessageBox(NULL,"Have a Counter > My Counter!!!"," Error",MB_OK);
									#endif
								}
						}
					break;
			case	DP_MESSAGE_ANSWER:
					{int		SendTaskBoyNum,TaskSerialNum;
					sscanf((char *)DP_ReadMessage,"%d %d %d %d",&MessageType,&Game_Boy_Num,&SendTaskBoyNum,&TaskSerialNum);
					if(SendTaskBoyNum==GAME.nMe)
						{
							DH_TaskAnswer[Game_Boy_Num][TaskSerialNum]=0;
							DH_ReceiveAnswer=0;
						}}
					break;
			case	DP_TALK:
					{
					char	PlayerName[100],TalkMessage[100];
					memset(PlayerName,0x00,sizeof(PlayerName)-1);
					memset(TalkMessage,0x00,sizeof(TalkMessage)-1);
					sscanf((char *)DP_ReadMessage,"%d %s %s",&MessageType,PlayerName,TalkMessage);
					int		Long=0;
					Long=3+1+strlen(PlayerName)+1;
					BYTE	* pp=DP_ReadMessage;
					pp+=Long;
					strcpy(TalkMessage,(char *)pp);
					FACE_SetNetworkMessage(PlayerName,TalkMessage);
					}
					break;
			case	DP_INIT_GAME:
					//君主号忘记赋值到GAME结构中
					{sscanf((char *)DP_ReadMessage,"%d %d",&MessageType,&Game_Boy_Num);
					int	j;
					j=Game_Boy_Num;
					char	Temp_Name[100];
					int		Temp_Ally[5],Temp_Master;
					int		Diff_Ally_NO;
					int		Diff_Ally_Status;
					int		Ally_Use;
					Diff_Ally_NO=0;
					Diff_Ally_Status=0;
					sscanf((char *)DP_ReadMessage,"%d %d %s %d %d %d %d %d %d",&MessageType,&Game_Boy_Num,Temp_Name,
													   &Temp_Master,&Temp_Ally[0],
													   &Temp_Ally[1],&Temp_Ally[2],
													   &Temp_Ally[3],&Temp_Ally[4]);

					for(Ally_Use=0;Ally_Use<GAME_PLAYER_MAX;Ally_Use++)
						{
							GAME_SetAlly(Game_Boy_Num,Ally_Use,Temp_Ally[Ally_Use]);
/*							if(DP_NetPlayerInfor[j].Ally_Infor[Ally_Use]!=Temp_Ally[Ally_Use])
								{
									Diff_Ally_NO=Ally_Use;

⌨️ 快捷键说明

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