本文实例为大家分享了python实现推箱子游戏的具体代码,供大家参考,具体内容如下
题目描述:
最短路径为:
uurrdddduuuulldrurdddrddllrruluuulldrurdddrdl
u表示向上,d表示向下,l表示向左,r表示向右。
大写表示人推着箱子一起动,小写表示人自己走。
代码用bfs实现。状态要分推着箱子一起走和人单独走,这两种状态转移是不同的。
由于代码中注释较详细,这里不过多解释。
代码:
# -*- coding: utf-8 -*-
# @time : 2017/8/10 上午9:42
# @author : qi mo
# @file : bfs.py
# @software: pycharm community edition
level_file_path = '../数据/level_file.txt'
class gameshortest:
def __init__(self,line, col=10):
"""
给一个图,长度为100的字符串表示。
0空地 1墙 2箱子起始位置 3箱子终点位置 4人的起始位置
:param line: 地图,用字符串表示。如代码最后的每一行表示每一关的地图。
:param col: 地图的长宽,由于设定为10*10,默认为10
"""
self.line = line
# sta和en 表示开始的状态,结束的状态
# sta只有2,4,0 2表示箱子开始位置,4表示人的位置,0表示其他。
# en只有1,3,0 1表示墙,3表示箱子结束位置,0表示其他。
# 现在只需要把sta状态中的2位置移动到en的3的位置即满足条件
self.sta = ''
self.en = ''
self.col = col
# px, py表示4的位置
self.px,self.py = -1,-1
# paths记录最短路径(可能有多条)
self.paths = []
# len记录最短路径长度 如
self.len = -1
self.pre()
self.bfs()
print(self.paths)
def pre(self):
"""
1.获得sta开始状态和en结束状态
2.获得人的起始位置px,py
代码最后的第一关的地图可视化为
1111111111
1111111111
1110001111
1110221111
<