📄 junqi_server.cpp
字号:
Send_join_qiju_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].tcpFD,user_index,qiju_id,player_id); } }*/ //send join qiju to qiju players; 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_join_qiju_to_player(glb_user_list[i].tcpFD,user_index,qiju_id,player_id); } } glb_user_list[user_index].qi_ju_index = qiju_id; glb_user_list[user_index].user_state=USER_INFO_STATE_INIT_QI_MAP; glb_qi_ju_list[qiju_id].user_flag[player_id]=1; glb_qi_ju_list[qiju_id].user_index[player_id]=1; glb_qi_ju_list[qiju_id].user_num++; } } else{ int i; /* //send join qiju to qiju players for(i=0;i<4;i++){ if(glb_qi_ju_list[qiju_id].user_flag[i]==1){ Send_join_qiju_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].tcpFD,user_index,qiju_id,player_id); } }*/ //send join qiju to qiju players 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_join_qiju_to_player(glb_user_list[i].tcpFD,user_index,qiju_id,player_id); } } strcpy(result,"OK"); glb_user_list[user_index].qi_ju_index=qiju_id; glb_user_list[user_index].user_state=USER_INFO_STATE_INIT_QI_MAP; glb_qi_ju_list[qiju_id].user_flag[player_id]=1; glb_qi_ju_list[qiju_id].user_index[player_id]=user_index; glb_qi_ju_list[qiju_id].user_num++; } } else{ strcpy(result,"FAIL"); } } else{ strcpy(result,"FAIL"); } memset(sbuff,0,sizeof(sbuff)); strcpy(sbuff,"Ack "); strcat(sbuff,para); strcat(sbuff," C_JoinQiJu "); strcat(sbuff,result); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",user_index); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",qiju_id); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",player_id); strcat(sbuff,para); strcat(sbuff," "); for(int i=0;i<4;i++){ if(glb_qi_ju_list[qiju_id].user_flag[i]==1){ memset(para,0,sizeof(para)); sprintf(para,"%d",glb_qi_ju_list[qiju_id].user_index[i]); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].user_state); strcat(sbuff,para); strcat(sbuff," "); } else{ memset(para,0,sizeof(para)); sprintf(para,"%d",0); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",0); strcat(sbuff,para); strcat(sbuff," "); } } writenTCP(glb_user_list[user_index].tcpFD,sbuff,strlen(sbuff)); return 0;}int deal_cli_start_game(char *rbuff,int user_index){ char para[128]; char sbuff[1024]; int player_id; int qiju_id; int user_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; } char result[8]; memset(result,0,sizeof(result)); if(user_id==user_index){ if(glb_user_list[user_index].qi_ju_index==qiju_id && glb_user_list[user_index].used_flag==1 && glb_user_list[user_index].user_connect_flag==USER_CONNECT_FLAG_LOGINED && glb_user_list[user_index].user_state==USER_INFO_STATE_INIT_QI_MAP){ for(int ii=0;ii<4;ii++){ if(glb_qi_ju_list[qiju_id].user_flag[ii]==1 && glb_qi_ju_list[qiju_id].user_index[ii]!=user_index){ //send S_PlayerStart to player ii; Send_playerstart_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[ii]].tcpFD,user_id,qiju_id,player_id); } } strcpy(result,"OK"); //save the qi map; Save_the_qi_map(qiju_id,player_id,rbuff); glb_user_list[user_index].user_state=USER_INFO_STATE_START_PLAY; if(glb_qi_ju_list[qiju_id].user_num==4){ int inot_ready; inot_ready=-1; for(int i=0;i<4;i++){ if(glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].user_state!=USER_INFO_STATE_START_PLAY){ inot_ready=i; break; } } if(inot_ready==-1){ glb_qi_ju_list[qiju_id].state=QI_JU_STATE_START_PLAY; //send run_qi Ring to player 0; Send_run_qi_ring_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[0]].tcpFD,glb_qi_ju_list[qiju_id].user_index[0],qiju_id,0); glb_qi_ju_list[qiju_id].cur_run_user = 0; } } } else{ strcpy(result,"FAIL"); } } else{ strcpy(result,"FAIL"); } memset(sbuff,0,sizeof(sbuff)); strcpy(sbuff,"Ack "); strcat(sbuff,para); strcat(sbuff," C_StartGame "); strcat(sbuff,result); strcat(sbuff," "); writenTCP(glb_user_list[user_index].tcpFD,sbuff,strlen(sbuff)); return 0;}int deal_cli_move_qi(char *rbuff,int user_index){ char para[128]; char sbuff[1024]; int player_id; int qiju_id; int user_id; int tid; int s_xindex, s_yindex, d_xindex, d_yindex; int qi_s_xindex, qi_s_yindex, qi_d_xindex, qi_d_yindex; int sn_s_xindex, sn_s_yindex, sn_d_xindex, sn_d_yindex; int iret; int igame_over_flag; memset(para,0,sizeof(para)); iret = data_para(rbuff,9,para); if(iret == 0){ sscanf(para,"%d",&d_yindex); } else{ return -1; } memset(para,0,sizeof(para)); iret = data_para(rbuff,8,para); if(iret == 0){ sscanf(para,"%d",&d_xindex); } else{ return -1; } memset(para,0,sizeof(para)); iret = data_para(rbuff,7,para); if(iret == 0){ sscanf(para,"%d",&s_yindex); } else{ return -1; } memset(para,0,sizeof(para)); iret = data_para(rbuff,6,para); if(iret == 0){ sscanf(para,"%d",&s_xindex); } else{ return -1; } 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,128); 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,128); iret = data_para(rbuff,2,para); if(iret == 0){ sscanf(para,"%d",&tid); } else{ return -1; } char result[8]; memset(result,0,sizeof(result)); int whose_qi; if(user_id==user_index && player_id<4 && player_id>=0){ if(glb_user_list[user_index].qi_ju_index==qiju_id && glb_user_list[user_index].user_state==USER_INFO_STATE_START_PLAY){ if(glb_qi_ju_list[qiju_id].state==QI_JU_STATE_START_PLAY && glb_qi_ju_list[qiju_id].user_flag[player_id]==1 && glb_qi_ju_list[qiju_id].user_index[player_id]==user_index && glb_qi_ju_list[qiju_id].cur_run_user==player_id){ strcpy(result,"OK"); switch(player_id){ case 0: qi_s_xindex = s_xindex; qi_s_yindex = s_yindex; qi_d_xindex = d_xindex; qi_d_yindex = d_yindex; break; case 1: Exchange_x_y_backword_90(s_xindex,s_yindex,qi_s_xindex,qi_s_yindex); Exchange_x_y_backword_90(d_xindex,d_yindex,qi_d_xindex,qi_d_yindex); break; case 2: Exchange_x_y_forword_180(s_xindex,s_yindex,qi_s_xindex,qi_s_yindex); Exchange_x_y_forword_180(d_xindex,d_yindex,qi_d_xindex,qi_d_yindex); break; case 3: Exchange_x_y_forword_90(s_xindex,s_yindex,qi_s_xindex,qi_s_yindex); Exchange_x_y_forword_90(d_xindex,d_yindex,qi_d_xindex,qi_d_yindex); break; } //Judge the eat qi; igame_over_flag = 0; int ieat_qi; ieat_qi=Judge_eat_qi(glb_qi_ju_list[qiju_id].map_run[qi_s_xindex][qi_s_yindex],glb_qi_ju_list[qiju_id].map_run[qi_d_xindex][qi_d_yindex]); if(ieat_qi==1){ for(int 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){ switch(i){ case 0: sn_s_xindex = qi_s_xindex; sn_s_yindex = qi_s_yindex; sn_d_xindex = qi_d_xindex; sn_d_yindex = qi_d_yindex; break; case 1: Exchange_x_y_forword_90(qi_s_xindex,qi_s_yindex,sn_s_xindex,sn_s_yindex); Exchange_x_y_forword_90(qi_d_xindex,qi_d_yindex,sn_d_xindex,sn_d_yindex); break; case 2: Exchange_x_y_forword_180(qi_s_xindex,qi_s_yindex,sn_s_xindex,sn_s_yindex); Exchange_x_y_forword_180(qi_d_xindex,qi_d_yindex,sn_d_xindex,sn_d_yindex); break; case 3: Exchange_x_y_backword_90(qi_s_xindex,qi_s_yindex,sn_s_xindex,sn_s_yindex); Exchange_x_y_backword_90(qi_d_xindex,qi_d_yindex,sn_d_xindex,sn_d_yindex); break; } //Send move qi to the all other players. Send_move_qi_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].tcpFD,sn_s_xindex,sn_s_yindex,sn_d_xindex,sn_d_yindex); } } whose_qi=1; memset(sbuff,0,sizeof(sbuff)); strcpy(sbuff,"Ack "); strcat(sbuff,para); strcat(sbuff," C_MoveQi "); strcat(sbuff,result); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",s_xindex); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",s_yindex); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",d_xindex); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",d_yindex); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",whose_qi); strcat(sbuff,para); strcat(sbuff," "); writenTCP(glb_user_list[user_index].tcpFD,sbuff,strlen(sbuff)); //move qi from s to d; glb_qi_ju_list[qiju_id].map_run[qi_d_xindex][qi_d_yindex]=glb_qi_ju_list[qiju_id].map_run[qi_s_xindex][qi_s_yindex]; glb_qi_ju_list[qiju_id].map_run[qi_s_xindex][qi_s_yindex]=0; //eat OK; if(glb_qi_ju_list[qiju_id].map_run[qi_d_xindex][qi_d_yindex]%100==QI_JUNQI_SYMBOL){ //user was killed. //remove player map_run data; for(int kk=0;kk<17;kk++){ for(int jj=0;jj<17;jj++){ if(glb_qi_ju_list[qiju_id].map_run[kk][jj]/100==glb_qi_ju_list[qiju_id].map_run[qi_d_xindex][qi_d_yindex]/100){ glb_qi_ju_list[qiju_id].map_run[kk][jj]=0; } } } //send S_KillPlayer to other client; int i; for(i=0;i<4;i++){ if(glb_qi_ju_list[qiju_id].user_flag[i]==1){ Send_kill_player_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].tcpFD,user_index,qiju_id,player_id); } } int itmp; switch(player_id%2){ case 0: itmp=2-player_id; break; case 1: itmp=4-player_id; break; default: break; } if(glb_qi_ju_list[qiju_id].user_flag[itmp]==0 ){ //send S_GameOver to all player; for(i=0;i<4;i++){ if(glb_qi_ju_list[qiju_id].user_flag[i]==1){ 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)); if(glb_qi_ju_list[qiju_id].user_num<4){ glb_qi_ju_list[qiju_id].state=QI_JU_STATE_WAIT_PLAYER; } else{ glb_qi_ju_list[qiju_id].state=QI_JU_STATE_PLAYER_INIT; } } else if(glb_user_list[glb_qi_ju_list[qiju_id].user_index[itmp]].user_state==USER_INFO_STATE_DIED){ //send S_GameOver to other player; for(i=0;i<4;i++){ if(glb_qi_ju_list[qiju_id].user_flag[i]==1){ 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)); if(glb_qi_ju_list[qiju_id].user_num<4){ glb_qi_ju_list[qiju_id].state=QI_JU_STATE_WAIT_PLAYER; } else{ glb_qi_ju_list[qiju_id].state=QI_JU_STATE_PLAYER_INIT; } } } } else if(ieat_qi==0){ for(int 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){ switch(i){ case 0: sn_s_xindex = qi_s_xindex; sn_s_yindex = qi_s_yindex; sn_d_xindex = qi_d_xindex; sn_d_yindex = qi_d_yindex; break; case 1: Exchange_x_y_forword_90(qi_s_xindex,qi_s_yindex,sn_s_xindex,sn_s_yindex); Exchange_x_y_forword_90(qi_d_xindex,qi_d_yindex,sn_d_xindex,sn_d_yindex); break; case 2: Exchange_x_y_forword_180(qi_s_xindex,qi_s_yindex,sn_s_xindex,sn_s_yindex); Exchange_x_y_forword_180(qi_d_xindex,qi_d_yindex,sn_d_xindex,sn_d_yindex); break; case 3: Exchange_x_y_backword_90(qi_s_xindex,qi_s_yindex,sn_s_xindex,sn_s_yindex); Exchange_x_y_backword_90(qi_d_xindex,qi_d_yindex,sn_d_xindex,sn_d_yindex); break; } //Send del qi_s qi_d to all other players. Send_del_qi_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].tcpFD,sn_s_xindex,sn_s_yindex); Send_del_qi_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].tcpFD,sn_d_xindex,sn_d_yindex); } } whose_qi=0; memset(sbuff,0,sizeof(sbuff)); strcpy(sbuff,"Ack "); strcat(sbuff,para); strcat(sbuff," C_MoveQi "); strcat(sbuff,result); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",s_xindex); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",s_yindex); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",d_xindex); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",d_yindex); strcat(sbuff,para); strcat(sbuff," "); memset(para,0,sizeof(para)); sprintf(para,"%d",whose_qi); strcat(sbuff,para); strcat(sbuff," "); writenTCP(glb_user_list[user_index].tcpFD,sbuff,strlen(sbuff)); //eat died all. if(glb_qi_ju_list[qiju_id].map_run[qi_d_xindex][qi_d_yindex]%100==QI_JUNQI_SYMBOL){ //user was killed. //remove player map_run data; for(int kk=0;kk<17;kk++){ for(int jj=0;jj<17;jj++){ if(glb_qi_ju_list[qiju_id].map_run[kk][jj]/100==glb_qi_ju_list[qiju_id].map_run[qi_d_xindex][qi_d_yindex]/100){ glb_qi_ju_list[qiju_id].map_run[kk][jj]=0; } } } //send S_KillPlayer to other client; int i; for(i=0;i<4;i++){ if(glb_qi_ju_list[qiju_id].user_flag[i]==1){ Send_kill_player_to_player(glb_user_list[glb_qi_ju_list[qiju_id].user_index[i]].tcpFD,user_index,qiju_id,player_id); } } int itmp; switch(player_id%2){ case 0: itmp=2-player_id; break; case 1: itmp=4-player_id; break; default: break; } if(glb_qi_ju_list[qiju_id].user_flag[itmp]==0 ){ //send S_GameOver to all player; for(i=0;i<4;i++){ if(glb_qi_ju_list[qiju_id].user_flag[i]==1){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -