C语言课本上编程实现:设计3个级别难度的迷宫地图并编程实现电子老鼠走迷宫游戏。 (1)通过键盘交互的方式模拟电子老鼠走出迷宫。 (2)设计程序让电子老鼠自动走出迷宫。 要求: 1)3个级别难度的迷宫地图,规模分别大于1212、2020、40*40. 2)迷宫地图保存到文本文件中,程序根据用户选择的难度级别读取文件获取迷宫地图数据。
时间: 2024-02-12 11:07:53 浏览: 150
以下是一个简单的 C 语言代码,实现了一个电子老鼠走迷宫游戏。游戏中包括三个难度级别的迷宫地图,可以通过键盘交互或者自动走出迷宫。
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 40
int map[MAX_SIZE][MAX_SIZE];
int start_row, start_col, end_row, end_col;
int rows, cols;
void initMap(int level) {
char filename[20];
sprintf(filename, "level%d.txt", level);
FILE* fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s.\n", filename);
exit(1);
}
fscanf(fp, "%d%d", &rows, &cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
fscanf(fp, "%d", &map[i][j]);
if (map[i][j] == 2) {
start_row = i;
start_col = j;
}
if (map[i][j] == 3) {
end_row = i;
end_col = j;
}
}
}
fclose(fp);
}
void printMap() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (i == start_row && j == start_col) {
printf("S ");
} else if (i == end_row && j == end_col) {
printf("E ");
} else if (map[i][j] == 1) {
printf("# ");
} else {
printf(" ");
}
}
printf("\n");
}
}
bool valid(int row, int col) {
return row >= 0 && row < rows && col >= 0 && col < cols && map[row][col] != 1;
}
bool solve(int row, int col) {
if (row == end_row && col == end_col) {
return true;
}
map[row][col] = 1;
if (valid(row - 1, col) && solve(row - 1, col)) {
return true;
}
if (valid(row + 1, col) && solve(row + 1, col)) {
return true;
}
if (valid(row, col - 1) && solve(row, col - 1)) {
return true;
}
if (valid(row, col + 1) && solve(row, col + 1)) {
return true;
}
map[row][col] = 0;
return false;
}
void playGame() {
int choice;
printf("Choose a level:\n");
printf("1. Easy\n");
printf("2. Medium\n");
printf("3. Hard\n");
printf("Your choice: ");
scanf("%d", &choice);
initMap(choice);
printf("Press ENTER to start the game.\n");
getchar();
getchar();
system("clear");
printMap();
printf("Use arrow keys to move the mouse. Press Q to quit.\n");
int row = start_row, col = start_col;
while (true) {
char c = getchar();
system("clear");
if (c == 'q' || c == 'Q') {
printf("Game over.\n");
break;
} else if (c == '\033') {
getchar();
c = getchar();
if (c == 'A' && valid(row - 1, col)) {
row--;
} else if (c == 'B' && valid(row + 1, col)) {
row++;
} else if (c == 'C' && valid(row, col + 1)) {
col++;
} else if (c == 'D' && valid(row, col - 1)) {
col--;
}
}
if (row == end_row && col == end_col) {
printf("Congratulations! You win!\n");
break;
}
printMap();
}
}
int main() {
playGame();
return 0;
}
```
在这个代码中,我们首先定义了一个 `map` 数组来存储迷宫地图,其中0表示通路,1表示墙壁,2表示起点,3表示终点。然后定义了一个 `initMap` 函数来从文件中读取迷宫地图数据,根据用户选择的难度级别读取不同的文件。`printMap` 函数用于打印当前的迷宫地图。
在 `solve` 函数中,使用深度优先搜索算法来寻找从起点到终点的路径。在 `playGame` 函数中,首先让用户选择难度级别,然后根据用户选择调用 `initMap` 函数来初始化迷宫地图,然后打印迷宫地图并提示用户按下 Enter 键开始游戏。在游戏过程中,用户可以使用方向键来移动电子老鼠,如果到达终点则游戏胜利,如果按下 Q 键则游戏结束。
在上述代码中,我们使用了 ANSI 转义序列来实现在终端中移动光标和清屏的功能。在 Windows 系统中,可以使用 `system("cls")` 来清屏。
阅读全文