#!/usr/local/bin/tcc -run #include #define HEIGHT 6 #define WIDTH 6 void init_board(int board[][WIDTH + 2]); void print_board(int board[][WIDTH + 2]); int is_vertical(int car); void change_board(int car, int op, int board[][WIDTH + 2]); int check_op(int car, int op, int board[][WIDTH + 2]); int check_board(int board[][WIDTH + 2]); int main(void) { int board[HEIGHT + 2][WIDTH + 2]; int car = 0; int op = 0; printf(" TOKYO PARKING\n"); printf(" ☆の車を脱出させてください\n"); init_board(board); print_board(board); while (1) { printf("どの車を動かしますか?(☆:1,■:2,▲:3,△:4):"); scanf("%d", &car); if (car == 1 || car == 3) { printf("どの方向に動かしますか?(←:1,→:2,キャンセル:0):"); scanf("%d", &op); } if (car == 2 || car == 4) { printf("どの方向に動かしますか?(↑:1,↓:2,キャンセル:0):"); scanf("%d", &op); } if (check_op(car, op, board) == 0) { printf("移動できません.もう一度やり直してください.\n"); } else { change_board(car, op, board); print_board(board); if (check_board(board) == 1) { printf("\n Clear!!\n"); break; } } } return 0; } void init_board(int board[][WIDTH + 2]) { int i, j; for (i = 0; i < HEIGHT + 2; i++) { for (j = 0; j < WIDTH + 2; j++) { if (i == 0 || j == 0 || i == 7 || j == 7) board[i][j] = -1; else board[i][j] = 0; board[3][7] = 0; board[3][3] = 1; board[3][4] = 1; board[1][5] = 2; board[2][5] = 2; board[3][5] = 2; board[5][5] = 3; board[5][6] = 3; board[4][4] = 4; board[5][4] = 4; } } } void print_board(int board[][WIDTH + 2]) { int i, j; for (i = 0; i < HEIGHT + 2; i++) { for (j = 0; j < WIDTH + 2; j++) { if (board[i][j] == 0) { if (j == 7) printf("EXIT", board[i][j]); else printf("・", board[i][j]); } if (board[i][j] == 1) printf("☆", board[i][j]); if (board[i][j] == 2) printf("■", board[i][j]); if (board[i][j] == 3) printf("▲", board[i][j]); if (board[i][j] == 4) printf("△", board[i][j]); if (board[i][j] == -1) printf("+ ", board[i][j]); if (j == WIDTH + 1) printf("\n", board[i][j]); } } } int is_vertical(int car) { int i; int is_vert[5]; for (i = 1; i < 5; i++) { if (i == 1 || i == 3) return 1; else return 0; } } void change_board(int car, int op, int board[][WIDTH + 2]) { int i, j; if (check_op(car, op, board) == 1) { for (i = 0; i < HEIGHT; i++) { for (j = 0; j < WIDTH; j++) { if (board[i][j] == 1) { if (car == 1) { if (op == 1) { board[i][j - 1] = 1; board[i][j + 1] = 0; break; } if (op == 2) { board[i][j + 2] = 1; board[i][j] = 0; break; } } } if (board[i][j] == 3) { if (car == 3) { if (op == 1) { board[i][j - 1] = 3; board[i][j + 1] = 0; break; } if (op == 2) { board[i][j + 2] = 3; board[i][j] = 0; break; } } } } } } for (j = 0; j < WIDTH; j++) { for (i = 0; i < HEIGHT; i++) { if (board[i][j] == 2) { if (car == 2) { if (op == 1) { board[i - 1][j] = 2; board[i + 2][j] = 0; break; } if (op == 2) { board[i + 3][j] = 2; board[i][j] = 0; break; } } } if (board[i][j] == 4) { if (car == 4) { if (op == 1) { board[i - 1][j] = 4; board[i + 1][j] = 0; break; } if (op == 2) { board[i + 2][j] = 4; board[i][j] = 0; break; } } } } } } int check_op(int car, int op, int board[][WIDTH + 2]) { int i, j; if (car != 1 && car != 2 && car != 3 && car != 4) return 0; if (op != 1 && op != 2) return 0; for (i = 1; i < HEIGHT; i++) { for (j = 1; j < WIDTH; j++) { if (car == 1) { if (board[i][j] == 1) { if (op == 1) { if (board[i][j - 1] == 0) return 1; else return 0; } if (op == 2) { if (board[i][j + 2] == 0) return 1; else return 0; } } } if (car == 3) { if (board[i][j]==3) { if (op == 1) { if (board[i][j - 1] != 0) return 0; else return 1; } if (op == 2) { if (board[i][j + 2] != 0) return 0; else return 1; } } } if (car == 2) { if (board[i][j] == 2) { if (op == 1) { if (board[i - 1][j] != 0) return 0; else return 1; } if (op == 2) { if (board[i + 3][j] != 0) return 0; else return 1; } } } if (car == 4) { if (board[i][j] == 4) { if (op == 1) { if (board[i - 1][j] != 0) return 0; else return 1; } if (op == 2) { if (board[i + 1][j] != 0) return 0; else return 1; } } } } } } int check_board(int board[][WIDTH + 2]) { if (board[3][7] == 1) return 1; }