📄 junqi_client.cpp
字号:
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 + -