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