通路はできたのですが、Xの移動がどうしてもできません。#がないところにXを表示
させようとすると、#がないところすべてにXが表示されてしまいます。しかも、Xを
表示させると#がずれてしまいます。
どこが悪いのでしょうか??
条件:
1.#の通路は二次元配列を使う
2.Xは配列を参照して移動させる。



#include <stdio.h>
#define SIZE 5
void print_map(char map[/url][SIZE], int p[/url])
{
int i;
for(i = 0; i < SIZE; ++ i){
int j;
for(j = 0; j < SIZE; ++ j){
if(i == p[0] && j == p[1]) putchar('@');
else putchar(map[j]);
}
putchar('\n');
}
}
int main(void)
{
char map[SIZE][SIZE] = {".....", ".....", ".....", ".....", "....."};
int p[/url][2] = {{0, 0}, {0, 1}, {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {4, 3}, {4, 4}};
int x, n = sizeof p / sizeof p[0];
for(x = 0; x < n; ++ x){
print_map(map, p[x]);
getchar();
}
return 0;
}

#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;
}