通路はできたのですが、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; }