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

📄 junqi_client.cpp

📁 linux下开发的四国军旗源代码,包括客户端和服务器端
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		break;	case XK_Insert:		break;	case XK_Home:		break;	case XK_End:		break;	case XK_Page_Up:		break;	case XK_Page_Down:		break;	case XK_Pause:		break;	case XK_Scroll_Lock:		break;	case XK_space:		join_qiju_init_draw();		break;	default:		break;	}	return 0;}int connect_svr_init_draw(){	int x,y;	XChar2b	tmp_char2b[16];	XSetForeground(dis,global_gc,gray_col.pixel);	XFillRectangle(dis,win,global_gc,0,0,789,589);	XSetForeground(dis,global_gc,red_col.pixel);	XDrawRectangle(dis,win,global_gc,0,0,789,589);	x=300;	y=150;	XSetForeground(dis,global_gc,black_col.pixel);	XFillRectangle(dis,win,global_gc,x,y,200,160);	XSetForeground(dis,global_gc,gray_col.pixel);	XDrawRectangle(dis,win,global_gc,x+4,y+4,192,152);	XSetForeground(dis,global_gc,orange_col.pixel);	XFillRectangle(dis,win,global_gc,x+5,y+5,190,150);	char show_str[32];	memset(show_str,0,sizeof(show_str));	//strcpy(show_str,"Login SVR");	strcpy(show_str,"登录服务器");	memset(tmp_char2b,0,sizeof(tmp_char2b));	tmp_char2b[0].byte1=show_str[0];	tmp_char2b[0].byte2=show_str[1];	tmp_char2b[1].byte1=show_str[2];	tmp_char2b[1].byte2=show_str[3];	tmp_char2b[2].byte1=show_str[4];	tmp_char2b[2].byte2=show_str[5];	tmp_char2b[3].byte1=show_str[6];	tmp_char2b[3].byte2=show_str[7];	tmp_char2b[4].byte1=show_str[8];	tmp_char2b[4].byte2=show_str[9];	x=320;	y=230;	XSetForeground(dis,global_gc,blue_col.pixel);	XFillRectangle(dis,win,global_gc,x,y,160,30);	XSetForeground(dis,global_gc,WhitePixel(dis,0));	//XDrawString(dis,win,global_gc,x+25,y+20,show_str,strlen(show_str));	Draw_gb2312font16(dis,win,global_gc,x+50,y+10,tmp_char2b,5);		memset(show_str,0,sizeof(show_str));	//strcpy(show_str,"Exit");	strcpy(show_str,"退出");	memset(tmp_char2b,0,sizeof(tmp_char2b));	tmp_char2b[0].byte1=show_str[0];	tmp_char2b[0].byte2=show_str[1];	tmp_char2b[1].byte1=show_str[2];	tmp_char2b[1].byte2=show_str[3];	x=320;	y=270;	XSetForeground(dis,global_gc,blue_col.pixel);	XFillRectangle(dis,win,global_gc,x,y,160,30);	XSetForeground(dis,global_gc,WhitePixel(dis,0));	//XDrawString(dis,win,global_gc,x+50,y+20,show_str,strlen(show_str));	Draw_gb2312font16(dis,win,global_gc,x+70,y+10,tmp_char2b,2);/*	XChar2b tmp_str[10];	memset(tmp_str,0,sizeof(tmp_str));	tmp_str[0].byte1=0xB9;	tmp_str[0].byte2=0xA4;	tmp_str[1].byte1=0xB1;	tmp_str[1].byte2=0xF8;	//XDrawString16(dis,win,global_gc,x+3,y+15,tmp_str,2);	//Draw_gb2312font16(dis,win,global_gc,x+3,y+15,tmp_str,2);*/	return 0;}int InitTCPSocket(){	struct sockaddr_in  svrAddr;	struct linger           linger;	int iret;	iret = -1;	TCP_sockFD=-1;	if((TCP_sockFD = socket(AF_INET, SOCK_STREAM, 6)) <= 0){		perror("Socket error:\n");		TCP_sockFD=0;		return -1;	}	bzero((char *)&svrAddr, sizeof(svrAddr));	svrAddr.sin_family = AF_INET;	svrAddr.sin_port = htons(glb_svr_port);	svrAddr.sin_addr.s_addr = inet_addr(glb_svr_ip);	int setFlag = 1;	if (setsockopt(TCP_sockFD, SOL_SOCKET, SO_KEEPALIVE, &setFlag,sizeof(setFlag)) < 0) {		perror("Set socket SO_KEEPALIVE error:\n");		close(TCP_sockFD);		TCP_sockFD = 0;		return -1;	}	linger.l_onoff = 1;	linger.l_linger = 0;	if (setsockopt(TCP_sockFD, SOL_SOCKET, SO_LINGER, (char *) &linger,sizeof(linger)) < 0) {		perror("Set socket SO_LINGER error:\n");		close(TCP_sockFD);		TCP_sockFD = 0;	}	if (connect(TCP_sockFD, (struct sockaddr *)&svrAddr, sizeof(svrAddr)) < 0) {		perror("Connect error:\n");		close(TCP_sockFD);		TCP_sockFD = 0;	}	return 0;}void* TCPThread(void *TCPThreadpara){	fd_set			fds;	char			rbuff[1024];	timeval			timeout;	int			msgLen;	int			package_len;	while(!glb_prg_Exit){		timeout.tv_sec = 0;		timeout.tv_usec = 100*1000;		FD_ZERO(&fds);		if(TCP_sockFD>0){			FD_SET(TCP_sockFD,&fds);		}		if (select(FD_SETSIZE, &fds, 0, 0, &timeout) < 0)  {			if (errno != EINTR && errno!=EAGAIN) {				perror("Socket Select error:\n");			}			continue;		}		if(FD_ISSET(TCP_sockFD,&fds)){			printf("@@@@@@@@@@@@The sock is selected\n");			msgLen = 0;			package_len = 0;			if (( msgLen = read(TCP_sockFD, (char *)(&package_len), sizeof(int)) ) < sizeof(int)) {				if(errno != EAGAIN && errno != EINTR){					perror("TCP sock read error:\n");				}			}			package_len = ntohl(package_len);			memset(rbuff, 0, sizeof(rbuff));			msgLen = 0;			while ( msgLen < package_len ) {				int tmpReadLen;				tmpReadLen = 0;				tmpReadLen = read(TCP_sockFD, rbuff+msgLen, package_len-msgLen);				if ( tmpReadLen < 0 ){					perror("TCP sock read error:\n");					close(TCP_sockFD);					TCP_sockFD = 0;				}				msgLen += tmpReadLen;			}			printf("The TCP sockFD read =[%s]\n",rbuff);			deal_sock_cmd(msgLen,rbuff);		}	}		     	return NULL;}int deal_sock_cmd(int msgLen,char *rbuff){        char    para[128];	int	itmp_rtn;	int iret;	int cmd_name;	memset(para,0,128);	iret = data_para(rbuff,1,para);	if(iret == 0){		cmd_name=decode_cmd_name(para);		switch(cmd_name){		case CMD_SVR_MOVE_RING:			deal_svr_move_ring(rbuff);			break;		case CMD_SVR_DEL_QI:			itmp_rtn=deal_svr_del_qi(rbuff);			if(itmp_rtn<0)				printf("deal_svr_del_qi return -1\n");			break;		case CMD_SVR_EAT_QI:			deal_svr_eat_qi(rbuff);			break;		case CMD_SVR_KILL_PLAYER:			deal_svr_kill_player(rbuff);			break;		case CMD_SVR_GAME_OVER:			deal_svr_game_over(rbuff);			break;		case CMD_SVR_LEAVE_QIJU:			deal_svr_leave_qiju(rbuff);			break;		case CMD_SVR_JOIN_QIJU:			deal_svr_join_qiju(rbuff);			break;		case CMD_SVR_MOVE_QI:			deal_svr_move_qi(rbuff);			break;		case CMD_SVR_START_GAME:			deal_svr_start_game(rbuff);			break;		case CMD_SVR_PLAYER_START:			deal_svr_player_start(rbuff);			break;		case CMD_SVR_SHOW_QI:			deal_svr_show_qi(rbuff);			break;		case CMD_ACK:			deal_svr_ack(rbuff);			break;		default:			break;		}	}	return 0;}int deal_svr_move_ring(char *rbuff){	run_flag = RUN_FLAG_RUN_QI;	qiju_draw_run_qi_cmd_button(BUTTON_SHOW_FLAG_SHOWED);	XFlush(dis);	return 0;}int deal_svr_del_qi(char *rbuff){        char    para[128];	char    sbuff[1024];	int     xindex;	int     yindex;	int     tid;	int iret;	memset(para,0,sizeof(para));	iret = data_para(rbuff,4,para);	if(iret == 0){		sscanf(para,"%d",&yindex);	}	else{		return -1;	}	memset(para,0,sizeof(para));	iret = data_para(rbuff,3,para);	if(iret == 0){		sscanf(para,"%d",&xindex);	}	else{		return -1;	}	memset(para,0,sizeof(para));	iret = data_para(rbuff,2,para);	if(iret == 0){		sscanf(para,"%d",&tid);	}	else{		return -1;	}	if(xindex>=0 && xindex<17 && yindex>=0 && yindex<17){		map_run[xindex][yindex]=0;	}	memset(sbuff,0,sizeof(sbuff));	strcpy(sbuff,"Ack ");	strcat(sbuff,para);	strcat(sbuff," S_DelQi ");	strcat(sbuff,"OK");	strcat(sbuff," ");							 	if(TCP_sockFD>0){        	writenTCP(TCP_sockFD,sbuff,strlen(sbuff));	}	XFlush(dis);	return 0;}int deal_svr_eat_qi(char *rbuff){	XFlush(dis);	return 0;}int deal_svr_kill_player(char *rbuff){        char    para[128];	char    sbuff[1024];	int	user_id;	int	qiju_id;	int	player_id;	int     tid;	int iret;	memset(para,0,sizeof(para));	iret = data_para(rbuff,5,para);	if(iret == 0){		sscanf(para,"%d",&player_id);	}	else{		return -1;	}	memset(para,0,sizeof(para));	iret = data_para(rbuff,4,para);	if(iret == 0){		sscanf(para,"%d",&qiju_id);	}	else{		return -1;	}	memset(para,0,sizeof(para));	iret = data_para(rbuff,3,para);	if(iret == 0){		sscanf(para,"%d",&user_id);	}	else{		return -1;	}	memset(para,0,sizeof(para));	iret = data_para(rbuff,2,para);	if(iret == 0){		sscanf(para,"%d",&tid);	}	else{		return -1;	}	if(qiju_id<=0 || qiju_id>MAX_QI_JU_NUM || user_id<=0 || user_id>MAX_USER_INFO_NUM || player_id<0 || player_id>=4){		return -1;	}	if(qiju_id==self_qiju_id){		for(int i=0;i<17;i++){			for(int j=0;j<17;j++){				if(map_run[i][j]/100==player_id+1){					map_run[i][j]=0;					if(map_flag[i][j]=='#'){						qiju_draw_bingzhan(18-15+35*i,18-10+35*j);					}					else if(map_flag[i][j]=='@'){						qiju_draw_xingying(18-20+35*i,18-15+35*j);					}					else if(map_flag[i][j]=='&'){						qiju_draw_dabenying(35*i,35*j);					}				}			}		}		glb_user_list[user_id].user_state=USER_INFO_STATE_DIED;	}	else{		;//other qiju	}	XFlush(dis);	return 0;}int deal_svr_game_over(char *rbuff){        char    para[128];	char    sbuff[1024];	int	qiju_id;	int     tid;	int iret;	memset(para,0,sizeof(para));	iret = data_para(rbuff,3,para);	if(iret == 0){		sscanf(para,"%d",&qiju_id);	}	else{		return -1;	}	memset(para,0,sizeof(para));	iret = data_para(rbuff,2,para);	if(iret == 0){		sscanf(para,"%d",&tid);	}	else{		return -1;	}	if(qiju_id<=0 || qiju_id>MAX_QI_JU_NUM){		return -1;	}	if(qiju_id==self_qiju_id){		glb_qiju_list[qiju_id].state=QI_JU_STATE_PLAYER_INIT;		//redraw screen;		qiju_init_draw();		for(int i= 0;i<4;i++){			if(glb_qiju_list[qiju_id].user_flag[i]==1){				glb_user_list[glb_qiju_list[qiju_id].user_index[i]].user_state=USER_INFO_STATE_INIT_QI_MAP;			}		}	}	else{		glb_qiju_list[qiju_id].state=QI_JU_STATE_PLAYER_INIT;		if(run_flag==RUN_FLAG_SELECT_QIJU){			join_qiju_re_drawall();		}		;//other qiju;	}	XFlush(dis);	return 0;}int deal_svr_leave_qiju(char *rbuff){        char    para[128];	char    sbuff[1024];	int	user_id;	int	qiju_id;	int	player_id;	int     tid;	int iret;	memset(para,0,sizeof(para));	iret = data_para(rbuff,5,para);	if(iret == 0){		sscanf(para,"%d",&player_id);	}	else{		return -1;	}	memset(para,0,sizeof(para));	iret = data_para(rbuff,4,para);	if(iret == 0){		sscanf(para,"%d",&qiju_id);	}	else{		return -1;	}	memset(para,0,sizeof(para));	iret = data_para(rbuff,3,para);	if(iret == 0){		sscanf(para,"%d",&user_id);	}	else{		return -1;	}	memset(para,0,sizeof(para));	iret = data_para(rbuff,2,para);	if(iret == 0){		sscanf(para,"%d",&tid);	}	else{		return -1;	}	if(qiju_id<=0 || qiju_id>MAX_QI_JU_NUM || user_id<=0 || user_id>MAX_USER_INFO_NUM || player_id<0 || player_id>=4){		return -1;	}	if(qiju_id==self_qiju_id){		glb_user_list[user_id].qi_ju_index=0;		glb_user_list[user_id].user_state=USER_INFO_STATE_NO_QI_JU;		if(glb_qiju_list[qiju_id].user_flag[player_id]==1){			glb_qiju_list[qiju_id].user_flag[player_id]=0;			glb_qiju_list[qiju_id].user_index[player_id]=0;			glb_qiju_list[qiju_id].user_num--;		}		for(int i=0;i<17;i++){			for(int j=0;j<17;j++){				if(map_run[i][j]/100==player_id+1){					map_run[i][j]=0;					if(map_flag[i][j]=='#'){						qiju_draw_bingzhan(18-15+35*i,18-10+35*j);					}					else if(map_flag[i][j]=='@'){						qiju_draw_xingying(18-20+35*i,18-15+35*j);					}					else if(map_flag[i][j]=='&'){						qiju_draw_dabenying(35*i,35*j);

⌨️ 快捷键说明

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