Python利用栈的思想实现迷宫小游戏

本文详细介绍了一种基于递归的迷宫寻路算法。通过定义迷宫地图为二维数组,利用递归函数find_path进行路径查找,最终通过不同颜色表示墙、通路和路径,清晰展示寻路过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迷宫地图为一个二维数组,其中元素1代表墙,表示路不通;0代表通路

maze = [
    [1,1,1,1,1,1,1,1,1,1,1,1],
    [1,0,0,0,1,1,1,1,1,1,1,1],
    [1,1,1,0,0,0,1,1,1,1,1,1],
    [1,1,1,1,1,0,1,1,1,1,1,1],
    [1,1,1,1,1,0,1,1,1,1,1,1],
    [1,1,0,0,0,0,0,1,1,1,1,1],
    [1,1,1,0,1,1,0,1,1,1,1,1],
    [1,1,1,1,1,1,0,0,1,1,1,1],
    [1,1,1,1,1,1,1,0,1,1,1,1],
    [1,1,1,1,1,1,1,0,1,1,1,1],
    [1,1,1,1,1,0,0,0,0,0,0,1],
    [1,1,1,1,1,1,1,1,1,1,1,1],
]

#判断当前位置是否为通路
def ispass(maze,pos):
    return maze[pos[0]][pos[1]]==0

#探测过的路标记为2
def mark(maze,pos):
    maze[pos[0]][pos[1]]=2


path=[]  #保存通路的节点的坐标

#向上探测 y=y-1  左:x=x-1  下  y=y+1   右 x=x+1
dirs=[(0,-1),(1,0),(0,1),(-1,0)]  #探测顺序  上右下左
def find_path(maze,pos,end):  #三个参数:地图;入口;出口
    mark(maze,pos)
    if pos == end:  #判断是否只有一个节点,即入口就是出口
        path.append(pos)
        return True
    for i in range(4):  #循环探测四个方向
        next = (pos[0]+dirs[i][0],pos[1]+dirs[i][1])
        if ispass(maze,next):  #如果当前元素为0,递归调用find_path
            if find_path(maze,next,end):
                path.append(pos)
                return True
    return False

find_path(maze,(1,1),(10,10)) 


for item in path:
    maze[item[0]][item[1]] = 3


#循环输出元素,不同的元素用不同的颜色表示
for y in maze:
    for x in y:
        if x==1:
            print("\033[0;41;m"+str(x)+"\033[0m",end=" ")
        elif x==2:
            print("\033[0;42;m" + str(x) + "\033[0m", end=" ")
        elif x == 3:
            print("\033[0;43;m*\033[0m", end=" ")
        else:
            print("\033[0;;m"+str(x)+"\033[0m",end=" ")
    print()
    

运行结果
其中褐色的表示通路
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值