#include #include #define SIZE 32 #define WIDTH 3 #define HEIGHT 3 #define MAX 5 typedef struct player { char name[SIZE]; int x; int y; } PLAYER; void move(PLAYER *p, int dx, int dy){ printf("その方向には逃げることができません\n"); } void approach(PLAYER *p_you, PLAYER *p_hunter){ int dx, dy, dxa, dya; dx = p_you->x - p_hunter->x; dy = p_you->y - p_hunter->y; if ( dx != 0 || dy != 0 ){ dxa = dx; dya = dy; if ( dx < 0 ){ dxa *= -1; } if ( dy < 0 ){ dya *= -1; } if ( dxa > dya ){ if ( dx > 0 ){ (p_hunter->x)++; } else{ (p_hunter->x)--; } } else { if ( dy > 0 ){ (p_hunter->y)++; } else{ (p_hunter->y)--; } } } } void print_position(PLAYER p){ printf(" %s : (%d,%d) \n", p.name, p.x, p.y); } void print_map(PLAYER you, PLAYER hunter){ int x, y, i, k; print_position(you); print_position(hunter); for ( y = HEIGHT-1; y >= 0; y-- ){ if ( y < HEIGHT-1 ){ for ( k = 0; k < 2; k++ ){ for ( i = 0; i < WIDTH; i++ ){ printf(" | "); } printf("\n"); } } for ( x = 0; x < WIDTH; x ++ ){ if ( x > 0 ){ printf("---"); } if ( you.x == x && you.y == y && hunter.x == x && hunter.y == y ){ printf("(X)"); } else if ( you.x == x && you.y == y ){ printf("[Y]"); } else if ( hunter.x == x && hunter.y == y ){ printf("[H]"); } else{ printf(" + "); } } printf("\n"); } printf("\n"); } int main(void){ int i, n, dx, dy; PLAYER you, hunter; printf("あなたの名前を入力してください:"); scanf("%s", you.name); you.x = you.y = 0; strcpy(hunter.name, "hunter"); hunter.x = WIDTH-1; hunter.y = HEIGHT-1; print_map(you, hunter); for ( i = 1; i <= MAX; i++ ){ do{ printf("[%d 回目]", i); printf("\nどの方向に逃げますか?(1:上,2:右,3:下,4:左)\n> "); scanf("%d", &n); dx = dy = 0; if ( n == 1 ){ dy = 1; } else if ( n == 2 ){ dx = 1; } else if ( n == 3 ){ dy = -1; } else if ( n == 4 ){ dx = -1;; } } while( n < 1 || n > 4 ); move(&you, dx, dy); approach(&you, &hunter); print_map(you, hunter); if ( you.x == hunter.x && you.y == hunter.y ){ printf("%s は捕まってしまいました... GAME OVER\n", you.name); return 0; } } printf("%s は無事に逃げ切りました. CLEAR!\n", you.name); return 0; }