📄 qiju.cpp
字号:
dest_fly_point[dest_fly_num]=3; dest_fly_num++; } } if(is_area_fly_reachable(area_dest,x_dest,y_dest,10,5)){ if(map_run[10][5]==0 || (x_dest==10 && y_dest==5)){ dest_fly_point[dest_fly_num]=4; dest_fly_num++; } } break; case MAP_AREA_DOWN: if(is_area_fly_reachable(area_sour,x_sour,y_sour,6,11)){ if(map_run[6][11]==0 || (x_sour==6 && y_sour==11)){ sour_fly_point[sour_fly_num]=22; sour_fly_num++; } } if(is_area_fly_reachable(area_sour,x_sour,y_sour,8,11)){ if(map_run[8][11]==0 || (x_sour==8 && y_sour==11)){ sour_fly_point[sour_fly_num]=23; sour_fly_num++; } } if(is_area_fly_reachable(area_sour,x_sour,y_sour,10,11)){ if(map_run[10][11]==0 || (x_sour==10 && y_sour==11)){ sour_fly_point[sour_fly_num]=24; sour_fly_num++; } } if(is_area_fly_reachable(area_dest,x_dest,y_dest,6,11)){ if(map_run[6][11]==0 || (x_dest==6 && y_dest==11)){ dest_fly_point[dest_fly_num]=22; dest_fly_num++; } } if(is_area_fly_reachable(area_dest,x_dest,y_dest,8,11)){ if(map_run[8][11]==0 || (x_dest==8 && y_dest==11)){ dest_fly_point[dest_fly_num]=23; dest_fly_num++; } } if(is_area_fly_reachable(area_dest,x_dest,y_dest,10,11)){ if(map_run[10][11]==0 || (x_dest==10 && y_dest==11)){ dest_fly_point[dest_fly_num]=24; dest_fly_num++; } } break; case MAP_AREA_LEFT: if(is_area_fly_reachable(area_sour,x_sour,y_sour,5,6)){ if(map_run[5][6]==0 || (x_sour==5 && y_sour==6)){ sour_fly_point[sour_fly_num]=6; sour_fly_num++; } } if(is_area_fly_reachable(area_sour,x_sour,y_sour,5,8)){ if(map_run[5][8]==0 || (x_sour==5 && y_sour==8)){ sour_fly_point[sour_fly_num]=11; sour_fly_num++; } } if(is_area_fly_reachable(area_sour,x_sour,y_sour,5,10)){ if(map_run[5][10]==0 || (x_sour==5 && y_sour==10)){ sour_fly_point[sour_fly_num]=16; sour_fly_num++; } } if(is_area_fly_reachable(area_dest,x_dest,y_dest,5,6)){ if(map_run[5][6]==0 || (x_dest==5 && y_dest==6)){ dest_fly_point[dest_fly_num]=6; dest_fly_num++; } } if(is_area_fly_reachable(area_dest,x_dest,y_dest,5,8)){ if(map_run[5][8]==0 || (x_dest==5 && y_dest==8)){ dest_fly_point[dest_fly_num]=11; dest_fly_num++; } } if(is_area_fly_reachable(area_dest,x_dest,y_dest,5,10)){ if(map_run[5][10]==0 || (x_dest==5 && y_dest==10)){ dest_fly_point[dest_fly_num]=16; dest_fly_num++; } } break; case MAP_AREA_RIGHT: if(is_area_fly_reachable(area_sour,x_sour,y_sour,11,6)){ if(map_run[11][6]==0 || (x_sour==11 && y_sour==6)){ sour_fly_point[sour_fly_num]=10; sour_fly_num++; } } if(is_area_fly_reachable(area_sour,x_sour,y_sour,11,8)){ if(map_run[11][8]==0 || (x_sour==11 && y_sour==8)){ sour_fly_point[sour_fly_num]=15; sour_fly_num++; } } if(is_area_fly_reachable(area_sour,x_sour,y_sour,11,10)){ if(map_run[11][10]==0 || (x_sour==11 && y_sour==10)){ sour_fly_point[sour_fly_num]=20; sour_fly_num++; } } if(is_area_fly_reachable(area_dest,x_dest,y_dest,11,6)){ if(map_run[11][6]==0 || (x_dest==11 && y_dest==6)){ dest_fly_point[dest_fly_num]=10; dest_fly_num++; } } if(is_area_fly_reachable(area_dest,x_dest,y_dest,11,8)){ if(map_run[11][8]==0 || (x_dest==11 && y_dest==8)){ dest_fly_point[dest_fly_num]=15; dest_fly_num++; } } if(is_area_fly_reachable(area_dest,x_dest,y_dest,11,10)){ if(map_run[11][10]==0 || (x_dest==11 && y_dest==10)){ dest_fly_point[dest_fly_num]=20; dest_fly_num++; } } break; default: break; } } } else{ sour_fly_point[0]=map_index_to_fly_point(x_sour,y_sour); sour_fly_num=1; dest_fly_point[0]=map_index_to_fly_point(x_dest,y_dest); dest_fly_num=1; } if(!reached_flag){ //printf("the sour_fly_num=%d,the dest_fly_num=%d\n",sour_fly_num,dest_fly_num); for(int i=0,j=0;(i<sour_fly_num && dest_fly_num>0);){ //printf("loop the i=%d,j=%d\n",i,j); memset(fly_search_point,0,sizeof(fly_search_point)); fly_search_num = 0; if(is_fly_point_reachable(sour_fly_point[i],dest_fly_point[j])){ reached_flag=1; break; } j++; if(j>=dest_fly_num){ i++; j=0; } } } //printf("reached_flag =%d!!!!!!!!!!!!!!\n",reached_flag); return reached_flag;}int is_y_search(int y0,int x_sour,int x_dest,int x_search,int y_search){ int stop_point; int reached; stop_point = 0; reached = 0; if(x_sour>x_dest){ for(int i=x_sour-1;i>=x_dest;i--){ if(x_search==i && y_search==y0){ reached = 1; break; } else if(map_run[i][y0]>0){ stop_point=1; break; } } } else if(x_sour<x_dest){ for(int i=x_sour+1;i<=x_dest;i++){ if(x_search==i && y_search==y0){ reached = 1; break; } else if(map_run[i][y0]>0){ stop_point=1; break; } } } else{ if(x_search==x_dest && y_search==y0){ reached = 1; } } if(stop_point==0 && reached==0){ return 0; } else if(stop_point==0){ return 1; } else{ return -1; }}int is_x_search(int x0,int y_sour,int y_dest,int x_search,int y_search){ int break_point; int reached; int i; break_point = 0; reached = 0; if(y_sour>y_dest){ for(i=y_sour-1;i>=y_dest;i--){ if(x_search==x0 && y_search==i){ reached = 1; break; } else if(map_run[x0][i]>0){ break_point=1; break; } } } else if(y_sour<y_dest){ for(i=y_sour+1;i<=y_dest;i++){ if(x_search==x0 && y_search==i){ reached = 1; break; } else if(map_run[x0][i]>0){ break_point=1; break; } } } else{ if(x_search==x0 && y_search==y_dest){ reached = 1; } } if(break_point==0 && reached==0){ return 0; } else if(break_point==0){ return 1; } else{ return -1; }}int is_area_search(int x0,int y0,int x1,int y1,int x_sour,int y_sour,int x_dest,int y_dest){ int iret; iret = 0; if(x_sour==x0){ iret = is_x_search(x0,y_sour,y0,x_dest,y_dest); if(iret==0){ iret = is_y_search(y0,x0,x1,x_dest,y_dest); if(iret==0){ iret = is_x_search(x1,y0,y1,x_dest,y_dest); if(iret==0){ iret = is_y_search(y1,x1,x0,x_dest,y_dest); if(iret==0){ iret = is_x_search(x0,y1,y_sour-1,x_dest,y_dest); } } } } if(iret==-1){//breaked! iret = is_x_search(x0,y_sour,y1,x_dest,y_dest); if(iret==0){ iret = is_y_search(y1,x0,x1,x_dest,y_dest); if(iret==0){ iret = is_x_search(x1,y1,y0,x_dest,y_dest); if(iret==0){ iret = is_y_search(y0,x1,x0,x_dest,y_dest); if(iret==0){ iret = is_x_search(x0,y0,y_sour-1,x_dest,y_dest); } } } } } } else if(x_sour==x1){ iret = is_x_search(x1,y_sour,y1,x_dest,y_dest); if(iret==0){ iret = is_y_search(y1,x1,x0,x_dest,y_dest); if(iret==0){ iret = is_x_search(x0,y1,y0,x_dest,y_dest); if(iret==0){ iret = is_y_search(y0,x0,x1,x_dest,y_dest); if(iret==0){ iret = is_x_search(x1,y0,y_sour-1,x_dest,y_dest); } } } } if(iret ==-1){//breaked! iret = is_x_search(x1,y_sour,y0,x_dest,y_dest); if(iret==0){ iret = is_y_search(y0,x1,x0,x_dest,y_dest); if(iret==0){ iret = is_x_search(x0,y0,y1,x_dest,y_dest); if(iret==0){ iret = is_y_search(y1,x0,x1,x_dest,y_dest); if(iret==0){ iret = is_x_search(x1,y1,y_sour+1,x_dest,y_dest); } } } } } } else if(y_sour==y0){ iret = is_y_search(y0,x_sour,x1,x_dest,y_dest); if(iret==0){ iret = is_x_search(x1,y0,y1,x_dest,y_dest); if(iret==0){ iret = is_y_search(y1,x1,x0,x_dest,y_dest); if(iret==0){ iret = is_x_search(x0,y1,y0,x_dest,y_dest); if(iret == 0){ iret = is_y_search(y0,x0,x_sour-1,x_dest,y_dest); } } } } if(iret == -1){//breaked! iret = is_y_search(y0,x_sour,x0,x_dest,y_dest); if(iret==0){ iret = is_x_search(x0,y0,y1,x_dest,y_dest); if(iret==0){ iret = is_y_search(y1,x0,x1,x_dest,y_dest); if(iret==0){ iret = is_x_search(x1,y1,y0,x_dest,y_dest); if(iret==0){ iret = is_y_search(y0,x1,x_sour+1,x_dest,y_dest); } } } } } } else if(y_sour==y1){ iret = is_y_search(y1,x_sour,x0,x_dest,y_dest); if(iret==0){ iret = is_x_search(x0,y1,y0,x_dest,y_dest); if(iret==0){ iret = is_y_search(y0,x0,x1,x_dest,y_dest); if(iret==0){ iret = is_x_search(x1,y0,y1,x_dest,y_dest); if(iret==0){ iret = is_y_search(y1,x1,x_sour+1,x_dest,y_dest); } } } } if(iret == -1){//breaked! iret = is_y_search(y1,x_sour,x1,x_dest,y_dest); if(iret==0){ iret = is_x_search(x1,y1,y0,x_dest,y_dest); if(iret==0){ iret = is_y_search(y0,x1,x0,x_dest,y_dest); if(iret==0){ iret = is_x_search(x0,y0,y1,x_dest,y_dest); if(iret==0){ iret = is_y_search(y1,x0,x_sour-1,x_dest,y_dest); } } } } } } int irtn=0; if(iret==1){//searched; irtn =1; } else{ if(x_sour==x_dest && y_sour==y_dest) irtn=1; else irtn=0; } //printf("is_area_search return =%d\n",irtn); return irtn;}int is_area_fly_reachable(int area_flag,int x_sour,int y_sour,int x_dest,int y_dest){ int iret; if(which_area(x_sour,y_sour)!=which_area(x_dest,y_dest)) return 0; iret = 0; switch(area_flag){ case MAP_AREA_UP: iret=is_area_search(6,1,10,5,x_sour,y_sour,x_dest,y_dest); break; case MAP_AREA_DOWN: iret=is_area_search(6,11,10,15,x_sour,y_sour,x_dest,y_dest); break; case MAP_AREA_LEFT: iret=is_area_search(1,6,5,10,x_sour,y_sour,x_dest,y_dest); break; case MAP_AREA_RIGHT: iret=is_area_search(11,6,15,10,x_sour,y_sour,x_dest,y_dest); break; default: break; } return iret;}int which_area(int x_sour, int y_sour){ if(x_sour>=6 && x_sour<=10 && y_sour>=0 && y_sour<=5) return MAP_AREA_UP; else if(x_sour>=0 && x_sour<=5 && y_sour>=6 && y_sour<=10) return MAP_AREA_LEFT; else if(x_sour>=6 && x_sour<=10 && y_sour>=11 && y_sour<=16) return MAP_AREA_DOWN; else if(x_sour>=11 && x_sour<=16 && y_sour>=6 && y_sour<=10) return MAP_AREA_RIGHT; else if(x_sour>=6 && x_sour<=10 && y_sour>=6 && y_sour<=10) return MAP_AREA_CENTER; return -1;}int fly_point_to_map_index(int fly_point,int *x_map,int *y_map)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -