#include #include #include #include //今回は使用しない int main(void) { int n[7][7][2]; //[][][][0]=表示用 [][][1]はゴールへの道順探り用 int i,j,k; int x,y; // x=縦 y=横 int a[3],b[3]; //見えない壁設定 int c=0; int way=0; //同じ方向になるべく行かないようにするための制御 //↑(way)今回は使用しないことにする(気分的に) //1=右 2=左 3=上 4=下 //初期化 ※プロトタイプ宣言する気力ないからメイン関数で。 for(i=0;i<7;i++){ for(j=0;j<7;j++){ if(i==0||j==0||i==6||j==6){ n[i][j][0]=1; //[][][0]=1 =壁判定 n[i][j][1]=2; //ゴール探索中の壁貫通防止 } else { n[i][j][0]=0; n[i][j][1]=0; } } } n[5][5][0]=5; printf("見えない壁の位置を(x,y)座標で3こ入力してください。\n"); while(c<3){ printf("\n%d個目:",c+1); scanf("%d%d",&a[c],&b[c]); if( (a[c]==1&&b[c]==1)||(a[c]==5&&b[c]==5)){ printf("スタート地点 または ゴール地点 には置けません。\n"); c--; } if(c>=0&&a[c]>=0&&a[c]<7&&b[c]>=0&&b[c]<7) n[b[c]][a[c]][1]=2; c++; } x=1,y=1,c=0; //初期化 for(i=0;i<7;i++){ for(j=0;j<7;j++){ if(i==1&&j==1)printf("S"); else if(i==x&&j==y)printf("・"); else if(n[i][j][0]==1)printf("■"); else if(n[i][j][0]==5)printf("G"); else if( (j==a[0]&&i==b[0])||(j==a[1]&&i==b[1])||(j==a[2]&&i==b[2]) ) printf("★"); else printf(" "); } printf("\n"); } Sleep(1000); while(1){ c++; Sleep(1000); system("cls"); while(1){ //壁ではないか、行き止まり判定を受けていない道かなど確認して進む if( (n[x][y+1][0]==0||n[x][y+1][0]==5)&&n[x][y+1][1]!=2){ n[x][y][1]++; y++; break; } else if( (n[x+1][y][0]==0||n[x+1][y][0]==5)&&n[x+1][y][1]!=2){ n[x][y][1]++; x++; break; } else if( (n[x][y-1][0]==0||n[x-1][y][0]==5)&&n[x][y-1][1]!=2){ n[x][y][1]++; y--; break; } else if( (n[x-1][y][0]==0||n[x-1][y][0]==5)&&n[x-1][y][1]!=2){ n[x][y][1]++; x--; break; } else if( (n[1][2][1]==2&&n[2][1][1]==2)||(n[4][5][1]==2&&n[5][4][1]==2) ){ printf("ゴールできません。\n"); return 0; } else{ printf("スタート地点に戻りました。\n"); x=1,y=1; } } printf("%d\n",c); for(i=0;i<7;i++){ for(j=0;j<7;j++){ if(i==1&&j==1)printf("S"); else if(i==x&&j==y)printf("・"); else if(n[i][j][0]==1)printf("■"); else if(n[i][j][0]==5)printf("G"); else if( (j==a[0]&&i==b[0])||(j==a[1]&&i==b[1])||(j==a[2]&&i==b[2]) ) printf("★"); else printf(" "); } printf("\n"); } if(n[x][y][0]==5){ printf("論理上ゴール...%d歩目\n",c); break; } } return 0; }