c语言用链表写游戏走迷宫
时间: 2023-08-10 08:16:36 浏览: 45
好的,走迷宫是一种常见的游戏,使用链表可以方便地实现迷宫地图和玩家的移动。以下是一个简单的走迷宫游戏的链表实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAZE_SIZE 10
typedef struct node {
int x;
int y;
struct node* next;
} Node;
Node* create_node(int x, int y) {
Node* node = (Node*)malloc(sizeof(Node));
node->x = x;
node->y = y;
node->next = NULL;
return node;
}
void free_list(Node* head) {
while (head != NULL) {
Node* node = head;
head = head->next;
free(node);
}
}
void print_map(Node* player, int maze[][MAZE_SIZE]) {
// 在地图上标记玩家的位置
while (player != NULL) {
maze[player->x][player->y] = 2;
player = player->next;
}
// 打印地图
for (int i = 0; i < MAZE_SIZE; i++) {
for (int j = 0; j < MAZE_SIZE; j++) {
if (maze[i][j] == 1) {
printf("# ");
} else if (maze[i][j] == 2) {
printf("P ");
} else {
printf("- ");
}
}
printf("\n");
}
}
int move(Node* player, int maze[][MAZE_SIZE], int dx, int dy) {
// 判断玩家是否能移动到目标位置
int px = player->x + dx;
int py = player->y + dy;
if (px < 0 || px >= MAZE_SIZE || py < 0 || py >= MAZE_SIZE) {
return 0;
}
if (maze[px][py] == 1) {
return 0;
}
player->x = px;
player->y = py;
return 1;
}
int main() {
int maze[MAZE_SIZE][MAZE_SIZE] = {
{0, 1, 0, 0, 0, 1, 0, 1, 0, 0},
{0, 1, 0, 1, 0, 0, 0, 1, 1, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{1, 1, 0, 0, 0, 0, 0, 1, 1, 0},
{1, 0, 0, 1, 1, 1, 0, 0, 1, 0},
{1, 0, 1, 0, 0, 0, 1, 0, 0, 0},
{1, 0, 0, 1, 1, 0, 1, 0, 1, 1},
{1, 0, 0, 0, 1, 0, 0, 0, 0, 1},
{1, 0, 1, 0, 0, 0, 1, 1, 0, 0},
{1, 0, 0, 0, 1, 0, 0, 0, 0, 0},
};
Node* player = create_node(0, 0);
while (1) {
print_map(player, maze);
printf("请输入方向(上:w,下:s,左:a,右:d):");
char ch;
scanf("%c", &ch);
getchar(); // 读取换行符
int dx = 0, dy = 0;
switch (ch) {
case 'w': dx = -1; break;
case 's': dx = 1; break;
case 'a': dy = -1; break;
case 'd': dy = 1; break;
default: printf("无效的输入!\n"); continue;
}
if (move(player, maze, dx, dy)) {
if (player->x == MAZE_SIZE - 1 && player->y == MAZE_SIZE - 1) {
printf("恭喜你获胜!\n");
break;
}
} else {
printf("无法移动!\n");
}
}
free_list(player);
return 0;
}
```
这个实现中,我们使用了一个链表存储玩家的位置。在游戏中,我们只需要不断接收玩家的输入,然后根据输入调用 `move` 函数来移动玩家。移动的过程中需要判断是否越界、是否有障碍等条件,如果满足条件则更新链表中的节点。最后判断是否到达终点,如果到达了终点,则游戏胜利。