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

📄 m_gameserver.cc

📁 多人走路RPG服务器 c++ socket
💻 CC
📖 第 1 页 / 共 2 页
字号:
#include <map>#include <string>#include <stdio.h>#include <stdarg.h>#include <unistd.h>#include <time.h>#include <listener.h>#include <socket.h>#include "m_GameServer.h"void send_cmd_msg(char *buf,char p_level,char p_msg1,char p_msg2,char *p_data) {	sprintf(buf,"%c%c%c%c%c%c%s",p_level,1,p_msg1,p_msg2,1,1,p_data);}BaseGamePlayer::BaseGamePlayer(void) {	m_pos_x=0;	m_pos_y=0;	x1=0;x2=0;y1=0;y2=0;}void BaseGamePlayer::AddSocketBuf(char *data) {		if( m_status!=GamePlayerStatus::Empty || m_fd>0 ) {		if( !m_SocketBuf.empty() ) {			m_SocketBuf.append("\r\n");		}		m_SocketBuf.append(data);	}}int	BaseGamePlayer::SetXY(int u_x,int u_y) {	if(u_x>0 && u_y>0) {		int max_width,max_height,s_width,s_height;		m_pos_x=u_x;		m_pos_y=u_y;		max_width=1050;		max_height=1050;		s_width=380+120;		s_height=300+120;		x2=u_x+s_width/2;		x1=u_x-s_width/2;		y2=u_y+s_height/2;		y1=u_y-s_height/2;		if(x1<0) {			x2+=-x1;			x1=0;		}		if(x2>max_width) {			x1-=s_width/2-(max_width-u_x);			x2=max_width;		}		if(y1<0) {			y2+=-y1;			y1=0;		}		if(y2>max_height) {			y1-=s_height/2-(max_height-u_y);			y2=max_height;		}		return 1;	} else {		return 0;	}}int BaseGamePlayer::test_XY( int d_x,int d_y) {	if( d_x>=x1 && d_x<=x2 && d_y>=y1 && d_y<=y2 ) {		return 1;	} else {		return 0;	}}GamePlayer::GamePlayer(void) {	m_status=GamePlayerStatus::Empty;	m_ReadyFlag=false;}void GamePlayer::init(unsigned int id,char *p_name) {	m_user_id=id;	m_status=GamePlayerStatus::Free;	m_ReadyFlag=false;	m_SocketBuf.clear();	strncpy(m_name,p_name,19);}void GamePlayer::clear() {	m_user_id=NONE;	m_status=GamePlayerStatus::Empty;	m_name[0]=0;	m_fd=0;	m_ReadyFlag=false;	m_SocketBuf.clear();}void GamePlayer::GetPlayerStatus(char *buf) {	sprintf(buf,"%s|%d|%d|%d|%d|%d|%d",m_name,m_pos_x,m_pos_y,m_sex,m_face_id,m_body_id,m_player_status);}void GamePlayer::SetData(unsigned int fd,char *ext) {	m_fd=fd;	sscanf(ext,"%d|%d|%d|%d|",&m_pos_x,&m_pos_y,&m_sex,&m_face_id);}//--------------------------------------------------------------------------//GameServer 程序段GameServer::GameServer(void) {	m_status=GameServerStatus::Empty;	m_TimeFlag=false;}void GameServer::GetStatus(char *buf) {	buf[0]=0;	if( m_status!=GameServerStatus::Empty ) {		int m_s;				if(m_status==GameServerStatus::Waiting) { m_s=1; }		else { m_s=2; }		sprintf(buf,"%d|%d|%s|%s|%d|%d|%s",m_room_id,m_s,room_name,m_GamePlayer[Players[0]]->m_name,max_player,cur_player,room_passwd);	}}void GameServer::PlayerReady(int player_id) {		int i,count;	if( m_status==GameServerStatus::Waiting ) {		count=0;		for(i=0;i<max_player;i++) {			if( Players[i]!=NONE ) {				if( Players[i]==player_id ) {					m_GamePlayer[player_id]->m_ReadyFlag=true;				}				if( m_GamePlayer[ Players[i] ]->m_ReadyFlag==true ) count++;			}		}		if( count==max_player ) m_CanPlayFlag=true;	}}int GameServer::GetPlayerSlot(int player_id) {		int i;		for(i=0;i<max_player;i++) {			if( Players[i]!=NONE ) {				if( Players[i]==player_id ) {					return i;				}			}		}		return NONE;}void GameServer::time_process(void) {}void GameServer::Game_init(int room_id,int max) {	char subject[128],passwd[128];	int i,m;	m_room_id=room_id;	min_player=0;	max_player=max;	m_status=GameServerStatus::Waiting;	m_CanPlayFlag=false;	for(i=0;i<max_player;i++) {		Players[i]=NONE;	}//	strncpy(room_name,subject,30);//	strncpy(room_passwd,passwd,30);}void GameServer::Game_exit(void) {	m_room_id=NONE;	m_status=GameServerStatus::Empty;	for(int i=0;i<max_player;i++) {		if(Players[i]!=NONE) {			m_GamePlayer[Players[i]]->m_room_id=NONE;			m_GamePlayer[Players[i]]->m_status=GamePlayerStatus::Free;			m_GamePlayer[Players[i]]->m_ReadyFlag=false;			Players[i]=NONE;		}	}	cur_player=0;}int GameServer::join(int player_id) {	int i;	if(cur_player<max_player) {		for(i=0;i<max_player;i++) {			if(Players[i]==NONE) {				Players[i]=player_id;				m_GamePlayer[player_id]->m_room_id=m_room_id;				m_GamePlayer[player_id]->m_status=GamePlayerStatus::Room;				cur_player++;				break;			}		}		return i;	} else {		return -1;	}}int GameServer::leave(int player_id) {	char buf[1024],buf1[128];	int i;	for(i=0;i<max_player;i++) {		if(Players[i]==player_id) {		//	m_GamePlayer[i]->clear();			Players[i]=NONE;			cur_player--;			sprintf(buf1,"%s",m_GamePlayer[player_id]->m_name);			printf("-------玩家  --%s--  离开了\n", m_GamePlayer[player_id]->m_name);			send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_USERLOG,SUB_MSG_USER_QUIT,buf1);			send_all(buf,player_id);			break;		}	}	return 0;}void GameServer::send_all(char *data,int filter_id) {	int i,c;	for(i=0,c=0;c<cur_player && i<max_player;i++) {		if(Players[i]!=NONE) {			c++;			if( Players[i]!=filter_id ) {				m_GamePlayer[Players[i]]->AddSocketBuf(data);			}		}	}}void GameServer::send_all2(char *data,int player_id) {	int i,c;	for(i=0,c=0;c<cur_player && i<max_player;i++) {		if(Players[i]!=NONE) {			c++;			if( m_GamePlayer[player_id]->test_XY(m_GamePlayer[Players[i]]->m_pos_x,m_GamePlayer[Players[i]]->m_pos_y) ) {				m_GamePlayer[Players[i]]->AddSocketBuf(data);			}		}	}}void GameServer::send_playerlist(void) {	char buf[1024],buf1[1024];	buf1[0]=0;	for(int i=0;i<max_player;i++) {		if(Players[i]!=NONE) {			strcat(buf1,m_GamePlayer[Players[i]]->m_name);			if(m_GamePlayer[Players[i]]->m_ReadyFlag==true) {				strcat(buf1,",1");			} else {				strcat(buf1,",0");			}		}		strcat(buf1,"|");	}	buf1[strlen(buf1)-1]=0;	send_cmd_msg(buf,V_MSG_USERLEVEL,MSG_ROOM,MSG_ROOM_USER_CHANGE,buf1);//	send_all(buf);}void GameServer::Round_init(void) {	for(int i=0;i<max_player;i++) {		if(Players[i]!=NONE) {			m_GamePlayer[Players[i]]->m_status = GamePlayerStatus::Playing;		}	}	m_status=GameServerStatus::Playing;}void GameServer::Round_exit(void) {	for(int i=0;i<max_player;i++) {		if(Players[i]!=NONE) {			m_GamePlayer[Players[i]]->m_status = GamePlayerStatus::Free;		}	}}void GameServer::play_change_slot(int player_id,int new_slot) {	int old_slot;	old_slot=GetPlayerSlot(player_id);	if( old_slot!=NONE && old_slot!=new_slot && new_slot!=0 ) {		if( Players[new_slot]==NONE ) {			Players[new_slot]=player_id;			Players[old_slot]=NONE;			send_playerlist();		}	}}void GameServer::GetAllPlayer(char *buf) {	int i,c;	char buf1[256];	for(i=0,c=0;c<cur_player && i<max_player;i++) {		if(Players[i]!=NONE) {			c++;			m_GamePlayer[Players[i]]->GetPlayerStatus(buf1);			strcat(buf1,",");			strcat(buf,buf1);		}	}	if(c) {		buf[strlen(buf)-1]=0;	}}void GameServer::process(int player_id,char p_msg2,char p_msg3,char *data) {	//printf("nothing\n");}//GameRoomServer 程序段GameRoomServer::GameRoomServer(void) {	OnlinePlayer=0;	time(&up_time);	My_version[0]=0;/*	int Max_GameServer=100;	int Max_GamePlayer=400;	for(i=0;i<Max_GameServer;i++) {		m_GameServer[i]=new GameServer;	}	for(i=0;i<Max_GamePlayer;i++) {//		m_GamePlayer[i]=new GamePlayer;	}*/}int GameRoomServer::CreateGameServer(int player_id,char *param) {	int room_id;	room_id=FindGameServer(GameServerStatus::Empty);	if(room_id!=NONE) {//		m_GameServer[room_id]->Game_init(room_id,player_id,param);	}	return room_id;}int GameRoomServer::JoinGameServer(int room_id,int player_id) {	if(room_id>=0 && room_id<Max_GameServer) {		if( m_GameServer[room_id]->m_status==GameServerStatus::Waiting) {			return m_GameServer[room_id]->join(player_id);		}	}	return ERROR;}int GameRoomServer::LeaveGameServer(int room_id,int player_id) {	if( room_id>=0 && room_id<Max_GameServer && m_GameServer[room_id]->leave(player_id)!=NONE) {		return 0;	}	return NONE;}int GameRoomServer::DeleteGameServer(int id) {	if(id>=0 && id<Max_GameServer && m_GameServer[id]->m_status!=GameServerStatus::Empty) {		m_GameServer[id]->m_status=GameServerStatus::Empty;		return 0;	} else {		return NONE;	}}int GameRoomServer::FindGameServer(GameServerStatus::Status status) {	int i;	for(i=0;i<Max_GameServer;i++) {		if(m_GameServer[i]->m_status==status ) {			break;		}	}	if(i==Max_GameServer) i=NONE;	return i;}int GameRoomServer::GetNewGamePlayer(void) {	int i;	for(i=0;i<Max_GamePlayer;i++) {			if(m_GamePlayer[i]->m_status==GamePlayerStatus::Empty) break;	}	if( i==Max_GamePlayer ) i=NONE;	return i;}int GameRoomServer::PlayerJoin(char *name,char *passwd) {	int n;	n=CheckPlayerExist(name);	if(n==NONE) {		n=GetNewGamePlayer();		if(n!=NONE) {			m_GamePlayer[n]->init(0,name);			OnlinePlayer++;		}	}	return n;}int GameRoomServer::PlayerExit(char *name) {	int n;	n=CheckPlayerExist(name);	if(n!=NONE) {

⌨️ 快捷键说明

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