壁に沿って自動で移動するプログラムを作ってしまったのですがせっかくなので貼っておきます。
#include <stdio.h>
int main(void)
{
char nk[20][20] = {
{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#','#','#','#'},
{'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#','#','#','#','#',' ','#','#','#','#','#','#','#','#','#'}
};
int x, y, i;
enum DIR { /* 進行方向を表す */
DIR_UP,
DIR_RIGHT,
DIR_DOWN,
DIR_LEFT,
DIR_NUM
} dir;
x = 10; y = 18; /* スタート地点 */
dir = DIR_UP; /* 最初の進行方向 */
for (;;) {
int col, row;
for (row=0;row<20;++row) {
for (col=0;col<20;++col) {
if (col == x && row == y)
putchar('x');
else
putchar(nk[row][co[/url]);
}
putchar('\n');
}
if (x <= 0 || x >= 19 || y <= 0 || y >= 19) {
puts("Congratulations on the escape!!!");
break;
}
puts("Press enter key to next step...");
getchar();
{ /* 左回りに移動可能な方向を探索 */
enum DIR d;
for (i=0;i<DIR_NUM;++i) {
int vx, vy;
d = (dir + i - 1 + DIR_NUM) % DIR_NUM;
vy = (d == DIR_DOWN) - (d == DIR_UP);
vx = (d == DIR_RIGHT) - (d == DIR_LEFT);
if (nk[y+vy][x+vx] == ' ') {
x += vx;
y += vy;
dir = d;
break;
}
}
}
}
return 0;
}