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

📄 junqi_server.cpp

📁 linux下开发的四国军旗源代码,包括客户端和服务器端
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				memset(glb_qi_ju_list[qiju_id].map_run,0,sizeof(glb_qi_ju_list[qiju_id].map_run));			}			else if(glb_user_list[glb_qi_ju_list[qiju_id].user_index[itmp]].user_state==USER_INFO_STATE_DIED){				glb_qi_ju_list[qiju_id].state=QI_JU_STATE_WAIT_PLAYER;				//send S_GameOver to other player;				for(i=0;i<4;i++){					if(glb_qi_ju_list[qiju_id].user_flag[i]==1 && glb_qi_ju_list[qiju_id].user_index[i] != user_index){						Send_gameover_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].tcpFD,qiju_id);						glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].user_state = USER_INFO_STATE_INIT_QI_MAP;					}				}				//game over;				memset(glb_qi_ju_list[qiju_id].map_run,0,sizeof(glb_qi_ju_list[qiju_id].map_run));			}		}		else{			/*			for(i=0;i<4;i++){				if(glb_qi_ju_list[qiju_id].user_flag[i]==1){					//send leave qiju to qiju players;					Send_leave_qiju_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].tcpFD,user_index,qiju_id,player_id);				}			}*/			for(i=1;i<=MAX_USER_INFO_NUM;i++){				if(glb_user_list[i].used_flag==1 && glb_user_list[i].user_connect_flag==USER_CONNECT_FLAG_LOGINED && i!=user_index){					//send leave qiju to qiju players;					Send_leave_qiju_to_player(glb_user_list[i].tcpFD,user_index,qiju_id,player_id);				}			}		}		break;	default:		break;	}	close(glb_user_list[user_index].tcpFD);	memset(&(glb_user_list[user_index]),0,sizeof(glb_user_list[user_index]));	glb_user_list[user_index].tcpFD=-1;	printf("Delete user =%d\n",user_index);	return 0;}int Send_leave_qiju_to_player(int sock,int leaved_user_id,int leaved_qiju_id,int leaved_player_id){        char sbuff[1024];	char tmp[32];        memset(sbuff,0,sizeof(sbuff));        strcpy(sbuff,"S_LeaveQiJu ");        strcat(sbuff,"0 ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",leaved_user_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",leaved_qiju_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",leaved_player_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        int iret=writenTCP(sock,sbuff,strlen(sbuff));        return iret;}int Send_join_qiju_to_player(int sock,int joined_user_id,int joined_qiju_id,int joined_player_id){        char sbuff[1024];	char tmp[32];        memset(sbuff,0,sizeof(sbuff));        strcpy(sbuff,"S_JoinQiJu ");        strcat(sbuff,"0 ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",joined_user_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",joined_qiju_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",joined_player_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        int iret=writenTCP(sock,sbuff,strlen(sbuff));        return iret;}int Send_playerstart_to_player(int sock,int started_user_id,int started_qiju_id,int started_player_id){        char sbuff[1024];	char tmp[32];        memset(sbuff,0,sizeof(sbuff));        strcpy(sbuff,"S_PlayerStart ");        strcat(sbuff,"0 ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",started_user_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",started_qiju_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",started_player_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        int iret=writenTCP(sock,sbuff,strlen(sbuff));        return iret;}int Send_run_qi_ring_to_player(int sock,int user_id,int qiju_id,int player_id){        char sbuff[1024];	char tmp[32];        memset(sbuff,0,sizeof(sbuff));        strcpy(sbuff,"S_MoveRing ");        strcat(sbuff,"0 ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",user_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",qiju_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",player_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        int iret=writenTCP(sock,sbuff,strlen(sbuff));        return iret;}int Send_kill_player_to_player(int sock,int killed_user_id,int killed_qiju_id,int killed_player_id){        char sbuff[1024];	char tmp[32];        memset(sbuff,0,sizeof(sbuff));        strcpy(sbuff,"S_KillPlayer ");        strcat(sbuff,"0 ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",killed_user_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",killed_qiju_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",killed_player_id);        strcat(sbuff,tmp);        strcat(sbuff," ");        int iret=writenTCP(sock,sbuff,strlen(sbuff));        return iret;}int Send_gameover_to_player(int sock,int qiju_id){        char sbuff[1024];	char tmp[32];        memset(sbuff,0,sizeof(sbuff));        strcpy(sbuff,"S_GameOver ");        strcat(sbuff,"0 ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",qiju_id);        strcat(sbuff,tmp);        strcat(sbuff," ");	for(int i=0;i<4;i++){		if(glb_qi_ju_list[qiju_id].user_flag[i]==1){        		memset(tmp,0,sizeof(tmp));		        sprintf(tmp,"%d",glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].user_state);		        strcat(sbuff,tmp);		        strcat(sbuff," ");		}		else{			strcat(sbuff,"0");			strcat(sbuff," ");		}	}        int iret=writenTCP(sock,sbuff,strlen(sbuff));        return iret;}int Send_move_qi_to_player(int sock,int sn_s_xindex,int sn_s_yindex,int sn_d_xindex,int sn_d_yindex){        char sbuff[1024];	char tmp[32];        memset(sbuff,0,sizeof(sbuff));        strcpy(sbuff,"S_MoveQi ");        strcat(sbuff,"0 ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",sn_s_xindex);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",sn_s_yindex);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",sn_d_xindex);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",sn_d_yindex);        strcat(sbuff,tmp);        strcat(sbuff," ");        int iret=writenTCP(sock,sbuff,strlen(sbuff));        return iret;}int Send_del_qi_to_player(int sock,int sn_s_xindex,int sn_s_yindex){        char sbuff[1024];	char tmp[32];        memset(sbuff,0,sizeof(sbuff));        strcpy(sbuff,"S_DelQi ");        strcat(sbuff,"0 ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",sn_s_xindex);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",sn_s_yindex);        strcat(sbuff,tmp);        strcat(sbuff," ");        int iret=writenTCP(sock,sbuff,strlen(sbuff));        return iret;}int Send_show_junqi_to_player(int sn_player,int qiju_id,int player_id){        char sbuff[1024];	char tmp[32];	int xindex,yindex;	int sn_xindex,sn_yindex;	for(int i=0;i<17;i++){		for(int j=0;j<17;j++){			if(glb_qi_ju_list[qiju_id].map_run[i][j]%100==QI_JUNQI_SYMBOL && glb_qi_ju_list[qiju_id].map_run[i][j]/100==player_id+1){				xindex=i;				yindex=j;				goto SEND_TO_PLAYER_LABLE;			}		}	}SEND_TO_PLAYER_LABLE:	printf("The show_qi sn_player=%d: sn_xindex=%d,sn_yindex=%d,xindex=%d,yindex=%d\n",sn_player,sn_xindex,sn_yindex,xindex,yindex);	switch(sn_player){	case 0:		sn_xindex=xindex;		sn_yindex=yindex;		break;	case 1:		Exchange_x_y_forword_90(xindex,yindex,sn_xindex,sn_yindex);		break;	case 2:		Exchange_x_y_forword_180(xindex,yindex,sn_xindex,sn_yindex);		break;	case 3:		Exchange_x_y_backword_90(xindex,yindex,sn_xindex,sn_yindex);		break;	}	printf("The show_qi: sn_xindex=%d,sn_yindex=%d,xindex=%d,yindex=%d\n",sn_xindex,sn_yindex,xindex,yindex);        memset(sbuff,0,sizeof(sbuff));        strcpy(sbuff,"S_ShowQi ");        strcat(sbuff,"0 ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",glb_qi_ju_list[qiju_id].map_run[xindex][yindex]);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",sn_xindex);        strcat(sbuff,tmp);        strcat(sbuff," ");        memset(tmp,0,sizeof(tmp));        sprintf(tmp,"%d",sn_yindex);        strcat(sbuff,tmp);        strcat(sbuff," ");        int iret=writenTCP(glb_user_list[glb_qi_ju_list[qiju_id].user_index[sn_player]].tcpFD,sbuff,strlen(sbuff));        return iret;}int Save_the_qi_map(int qiju_id,int player_id,char *rbuff){	char    para[128];	int	qi_value;	int iret;	if(player_id!=0 && player_id!=1 && player_id!=2 && player_id!=3)		return -1;	for(int i=0;i<=4;i++){		for(int j=0;j<=5;j++){			memset(para,0,sizeof(para));			iret = data_para(rbuff,5+j+i*6+1,para);			if(iret == 0){				sscanf(para,"%d",&qi_value);			}			else{				return -1;			}			switch(player_id){			case 0:				glb_qi_ju_list[qiju_id].map_run[i+6][j+11] = qi_value;				break;			case 1:				glb_qi_ju_list[qiju_id].map_run[11+j][10-i] = qi_value;				break;			case 2:				glb_qi_ju_list[qiju_id].map_run[10-i][5-j] = qi_value;				break;			case 3:				glb_qi_ju_list[qiju_id].map_run[5-j][6+i] = qi_value;				break;			}		}	}	//printf("the map data of player=%d\n",player_id);	/*for(int row=0;row<17;row++){		for(int col=0;col<17;col++){			printf("%4d",glb_qi_ju_list[qiju_id].map_run[col][row]);		}		printf("\n");	}*/	return 0;}int Judge_eat_qi(int s_qi_value,int d_qi_value){	int iret;	if(d_qi_value==0){		iret = 1;	}	else if(s_qi_value%100==QI_ZHADAN_SYMBOL || d_qi_value%100==QI_ZHADAN_SYMBOL || (s_qi_value%100)==(d_qi_value%100)){		iret = 0;	}	else if(d_qi_value%100==QI_JUNQI_SYMBOL){		iret = 1;	}	else if(d_qi_value%100==QI_DILEI_SYMBOL && s_qi_value%100==QI_GONGBING_SYMBOL){		iret = 1;	}	else{		if(s_qi_value%100>d_qi_value%100){			iret = 1;		}		else{			iret = -1;		}	}	return iret;//1;0;-1;}int Exchange_x_y_forword_90(int s_x_value,int s_y_value,int &d_x_value,int &d_y_value){	d_x_value = 16-s_y_value;	d_y_value = s_x_value;	return 0;}int Exchange_x_y_backword_90(int s_x_value,int s_y_value,int &d_x_value,int &d_y_value){	d_x_value = s_y_value;	d_y_value = 16-s_x_value;	return 0;}int Exchange_x_y_forword_180(int s_x_value,int s_y_value,int &d_x_value,int &d_y_value){	d_x_value = 16-s_x_value;	d_y_value = 16-s_y_value;	return 0;}int writenTCP(int fd, void *vptr, int n){	size_t  nleft;	ssize_t  nwritten;	char  *ptr;	int   ntimes;   //for EINTR(SIGPIPE) and EPIPE        /* Add package head for context len, package head is 4 byte*/	int package_len;	package_len = htonl(n);	ntimes = 0;	ptr = (char*)(&package_len);	nleft = sizeof(int);	while ( nleft > 0) {		if ( (nwritten = write(fd, ptr, nleft)) <= 0) {			printf("write sock for head_len error: errno=%d\n",errno);			if ( errno == EINTR) {				nwritten = 0;  /* and call write() again */				ntimes++;				if ( ntimes > 10 ) return 0;			}			else{				return 0;   /* error */			}		}		nleft -= nwritten;		ptr += nwritten;	}	/* end head pack */	ntimes = 0;	ptr = (char*)vptr;	nleft = (size_t) n;	while (nleft > 0) {		if ( (nwritten = write(fd, ptr, nleft)) <= 0) {			printf("write sock error: errno=%d\n",errno);			if ( errno == EINTR ){				nwritten = 0;  /* and call write() again */				ntimes++;				if ( ntimes > 10 ) return 0;			}			else{				return 0;   /* error */			}		}		nleft -= nwritten;		ptr += nwritten;	}	printf("\n writenTCP n=%d msg=[%s]\n",n,vptr);	return n;}int data_para(char *buff,int index,char *para){	char *tmp1,*tmp2;	char    para_tmp[64];	int     iret;	tmp1=NULL;	tmp2=NULL;	memset(para_tmp,0,64);	tmp1 = buff;	for(int i=0;i<index;i++){		tmp2=strchr(tmp1,' ');		if(i<index-1 && tmp2!=NULL){			tmp1=tmp2+1;		}	}	if(tmp1!=NULL && tmp2!=NULL){		for(int j=0;j<tmp2-tmp1;j++){			para_tmp[j]=tmp1[j];		}		strcpy(para,para_tmp);		iret = 0;	}	else{		iret = -1;	}	return iret;}/*CMD:client->server:	C_Login:	tid	username	passwd 		Ack tid	C_Login result userID	C_Logout:		userID		passwd	C_JoinQiJu:	tid	userID		QiJuID	playerID		Ack tid	C_JoinQiju	result	userID	QiJuID	playerID	userID0	user_state0	userID1	user_state1	userID2	user_state2	userID3 user_state3			C_StartGame:	tid	userID		QiJuID	playerID		Ack tid	C_StartGame	result	C_MoveQi:	tid	userID		QiJuID	playerID	s_xindex s_yindex d_xindex d_yindex		Ack tid	C_MoveQi	result	s_xindex s_yindex d_xindex d_yindex	whoseQi(playerID)			if whoseQi==0 then died all! whoseQi==1 (source) whoseQi==-1 (dest)	C_AskPeace:	tid	userID		QiJuID	playerID		Ack tid	C_AskPeace	result	C_GiveUp:	tid	userID		QiJuID	playerID		Ack tid	C_GiveUp	result	C_LeaveQiJu:	tid	userID		QiJuID	playerID		Ack tid	C_LeaveQiJu	result	C_SyncData:	tid	userID		QiJuID	playerID		Ack tid	C_SyncData	datatype	......		    datatype=0: //start sync.		    datatype=1:	//CliQI_Ju_s		    	qiju_id		        user_index[0] user_index[1] user_index[2] user_index[3]			user_flag[0] user_flag[1] user_flag[2] user_flag[3]			user_num state;		    datatype=2: //CliUserInfo_s		        user_id			username user_state used_flag qi_ju_index		    datatype=3: //end sync.server->client:	S_MoveRing:	tid	userID		QiJuID	playerID		Ack tid	S_MoveRing	result	S_DelQi:	tid	xindex yindex		Ack tid	S_DelQi	result	S_EatQi:	tid	whoseQi(playerID)	s_xindex s_yindex d_xindex d_yindex		Ack tid	S_EatQi	result	S_KillPlayer:	tid	userID		QiJuID	playerID		Ack tid	S_KillPlayer	result	S_GameOver:	tid	QiJuID	playerA_statue	playerB_statue	playerC_statue	playerD_statue		Ack tid	S_GameOver	reault	S_LeaveQiJu:	tid	userID	QiJuID	playerID		Ack tid	S_LeaveQiJu	reault	S_JoinQiJu:	tid	userID	QiJuID	playerID		Ack tid	S_JoinQiJu	reault	S_MoveQi:	tid	s_xindex s_yindex d_xindex d_yindex		Ack tid	S_MoveQi	result	S_StartGame:	tid	userID		QiJuID	playerID		Ack tid	S_StartGame	result	S_PlayerStart:	tid	userID		QiJuID	playerID		Ack tid	S_PlayerStart	result	S_ShowQi:	tid	qi_value	xindex	yindex		Ack tid	S_ShowQi	result*/ 

⌨️ 快捷键说明

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