Python迷宫游戏:到达终点前循环提前终止问题求助
问题描述
我开发的Python小型迷宫游戏中,终点由数值2(显示为G)标识。期望玩家抵达终点时,先显示玩家站在G位置并变为D(代表完成),再终止游戏循环,但当前循环会提前终止,无法实现该效果。尝试使用at_goal变量解决但未成功,恳请协助。
原代码
import random import time maze = [[1, 1, 1, 1, 1, 1], [1, 0, 1, 1, 1, 1], [1, 0, 1, 0, 1, 1], [1, 0, 0, 0, 1, 1], [1, 0, 1, 0, 1, 1], [1, 1, 1, 0, 1, 1], [1, 2, 1, 0, 1, 1], [1, 0, 0, 0, 1, 1], [1, 0, 1, 0, 1, 1], [1, 1, 1, 1, 1, 1]] player_x = 1 player_y = 1 at_goal = False done = False while done == False: print("\033[H\033[2J", end="") for y, row in enumerate(maze): for x, element in enumerate(row): if x == player_x and y == player_y: if at_goal: print("D", end=" ") else: print("P", end=" ") elif element == 1: print("#", end=" ") elif element == 2: print("G", end=" ") else: print(" ", end=" ") print() move = input("Enter a move (up, down, left, right): ") if move == "up": player_y -= 1 elif move == "down": player_y += 1 elif move == "left": player_x -= 1 elif move == "right": player_x += 1 else: print("Invalid move") time.sleep(0.5) continue if maze[player_y][player_x] == 2: at_goal = True elif maze[player_y][player_x] == 1: print("You have hit a wall and lost the game. Try again.") player_x = 1 player_y = 1 at_goal = False time.sleep(0.5) if at_goal: print("You have reached the goal and won the game!") done = True
问题原因
当前代码逻辑是:显示迷宫 → 接受移动输入 → 处理移动 → 判断终止。当玩家移动到终点后,会立刻设置done=True终止循环,导致循环无法再执行一次迷宫显示,因此玩家看不到D的状态。
解决方案
调整终止逻辑的位置,让程序在标记at_goal=True后,先完成一次迷宫显示(渲染D),再终止循环。修改后的代码如下:
import random import time maze = [[1, 1, 1, 1, 1, 1], [1, 0, 1, 1, 1, 1], [1, 0, 1, 0, 1, 1], [1, 0, 0, 0, 1, 1], [1, 0, 1, 0, 1, 1], [1, 1, 1, 0, 1, 1], [1, 2, 1, 0, 1, 1], [1, 0, 0, 0, 1, 1], [1, 0, 1, 0, 1, 1], [1, 1, 1, 1, 1, 1]] player_x = 1 player_y = 1 at_goal = False done = False while done == False: print("\033[H\033[2J", end="") for y, row in enumerate(maze): for x, element in enumerate(row): if x == player_x and y == player_y: if at_goal: print("D", end=" ") else: print("P", end=" ") elif element == 1: print("#", end=" ") elif element == 2: print("G", end=" ") else: print(" ", end=" ") print() # 先判断是否到达终点,若是则终止循环 if at_goal: print("You have reached the goal and won the game!") done = True break move = input("Enter a move (up, down, left, right): ") if move == "up": player_y -= 1 elif move == "down": player_y += 1 elif move == "left": player_x -= 1 elif move == "right": player_x += 1 else: print("Invalid move") time.sleep(0.5) continue if maze[player_y][player_x] == 2: at_goal = True elif maze[player_y][player_x] == 1: print("You have hit a wall and lost the game. Try again.") player_x = 1 player_y = 1 at_goal = False time.sleep(0.5)
修改说明
- 将
at_goal的终止判断移到迷宫显示之后、移动输入之前:玩家移动到终点后,下一次循环会先显示带有D的迷宫,再触发终止逻辑,确保玩家能看到完成状态。 - 添加
break语句确保循环立即终止,避免不必要的输入等待。
内容的提问来源于stack exchange,提问作者user19533273
相关产品推荐
相关产品推荐

