基础迷宫结构搭建
首先我们需要先定义一个基础的迷宫地图,用二维列表来表示,其中0代表可通行路径,1代表墙壁,同时初始化玩家的起始坐标。

# 定义迷宫地图,5行5列
maze = [
[0, 1, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 1, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0]
]
# 玩家初始坐标,行和列都从0开始
player_row = 0
player_col = 0
# 迷宫出口坐标
exit_row = 4
exit_col = 4
基础方向移动逻辑实现
接下来我们实现基础的方向移动功能,支持用户输入w(上)、s(下)、a(左)、d(右)四个指令,更新玩家坐标。
def move_player(direction):
global player_row, player_col
# 记录原始坐标,方便后续判断
original_row = player_row
original_col = player_col
if direction == "w":
player_row -= 1
elif direction == "s":
player_row += 1
elif direction == "a":
player_col -= 1
elif direction == "d":
player_col += 1
else:
print("无效指令,请输入w、s、a、d中的一个")
return False
return True
常见方向移动逻辑缺陷分析
上面实现的基础移动逻辑存在几个明显的缺陷,这也是很多开发者容易踩的坑:
- 越界问题:玩家可以移动到迷宫地图之外,比如行坐标小于0或者大于等于迷宫行数,列坐标同理
- 穿墙问题:玩家可以移动到值为1的墙壁位置,不符合游戏规则
- 无效移动回退问题:当移动非法时,没有把坐标回退到原始位置,导致坐标已经被错误更新
- 出口判断缺失:移动后没有检查是否到达出口,游戏无法结束
移动逻辑缺陷修复方案
1. 边界与墙壁判断修复
在更新坐标之后,增加边界和墙壁的判断,如果不符合规则就把坐标回退到原始位置。
def move_player_fixed(direction):
global player_row, player_col
original_row = player_row
original_col = player_col
# 处理方向输入
if direction == "w":
player_row -= 1
elif direction == "s":
player_row += 1
elif direction == "a":
player_col -= 1
elif direction == "d":
player_col += 1
else:
print("无效指令,请输入w、s、a、d中的一个")
return False
# 边界判断:行坐标范围0到4,列坐标范围0到4
if player_row < 0 or player_row >= len(maze) or player_col < 0 or player_col >= len(maze[0]):
print("移动超出迷宫边界,请重新输入方向")
player_row = original_row
player_col = original_col
return False
# 墙壁判断:如果目标位置是1,说明是墙壁
if maze[player_row][player_col] == 1:
print("前方是墙壁,无法移动")
player_row = original_row
player_col = original_col
return False
return True
2. 出口判断逻辑添加
每次移动完成后,检查玩家坐标是否和出口坐标一致,如果一致则提示游戏胜利。
def check_exit():
if player_row == exit_row and player_col == exit_col:
return True
return False
完整游戏运行逻辑
最后我们把所有逻辑组合起来,实现完整的游戏交互流程,包括地图显示、指令输入、移动处理、胜利判断。
def print_maze():
# 打印当前迷宫状态,用P表示玩家位置
for i in range(len(maze)):
for j in range(len(maze[i])):
if i == player_row and j == player_col:
print("P", end=" ")
else:
if maze[i][j] == 0:
print("0", end=" ")
else:
print("1", end=" ")
print()
# 游戏主循环
print("欢迎来到文本迷宫冒险游戏,输入w上、s下、a左、d右移动,到达右下角出口即胜利")
while True:
print_maze()
direction = input("请输入移动方向:").strip().lower()
if move_player_fixed(direction):
if check_exit():
print("恭喜你到达出口,游戏胜利!")
break
逻辑优化建议
如果需要进一步优化游戏体验,还可以做以下调整:
- 把迷宫大小、起始坐标、出口坐标做成可配置的参数,方便修改关卡
- 增加步数统计,显示玩家当前移动的总步数
- 支持更多的指令,比如输入help显示操作说明,输入restart重置游戏
- 增加随机迷宫生成逻辑,每次游戏生成不同的迷宫地图