python迷宫地图代码_Python机器人探测迷宫代码求助

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

Python3.4,Windows系统

这个project的目的是让机器人可以走任意迷宫,在机器人走迷宫之前并不知道迷宫长什么样子,要在走过迷宫之后获取迷宫墙面信息(哪面是墙,哪面是通路),迷宫墙面信息通过机器人上的传感器传回信息决定。在传感器传信息给机器人走迷宫的class(mapping class)之后,mapping class要传回机器人下一个要走的方向给机器人的controler class。现在的问题是机器人mapping时走过的cell的坐标每次都从新生成新的,即使是已经走过的cell也会从新生成新坐标。造成visitedStack overflow。也不能顺利完成深度优先算法。代码如下:

x = 0

y = 0

transferx = 0

transfery = 0

originalDir = 'north'

dfs = []

visitedStack = []

obj = object

class Map():

'''

classdocs

'''

def __init__(self):

'''

Constructor

'''

def get_next_direction(self,bearring):

global originalDir

global transferx

global transfery

if(originalDir == 'north'):

if(bearring == 'right'):

transferx = x+1

transfery = y

elif(bearring =='forward'):

transferx = x

transfery = y+1

elif(bearring == 'left'):

transferx = x-1

transfery = y

else:

transferx = x

transfery = y-1

elif(originalDir == 'east'):

if(bearring == 'right'):

transferx = x

transfery = y-1

elif(bearring =='forward'):

transferx = x+1

transfery = y

elif(bearring == 'left'):

transferx = x

transfery = y+1

else:

transferx = x-1

transfery = y

elif(originalDir == 'west'):

if(bearring == 'right'):

transferx = x

transfery = y+1

elif(bearring == 'forward'):

transferx = x-1

transfery = y

elif(bearring == 'left'):

transferx = x

transfery = y-1

else:

transferx = x+1

transfery = y

elif(originalDir == 'south'):

if(bearring == 'right'):

transferx = x-1

transfery = y

elif(bearring == 'forward'):

transferx = x

transfery = y-1

elif(bearring == 'left'):

transferx = x+1

transfery = y

else:

transferx = x

transfery = y+1

return transferx,transfery

def go_back(self,current):

position = self.get_next_direction("forward")

position1 = self.get_next_direction("right")

position2 = self.get_next_direction("left")

position3 = self.get_next_direction("back")

nextDir = ""

if(current == position):

nextDir = 'forward'

elif(current == position1):

nextDir = 'right'

elif(current == position2):

nextDir = 'left'

elif(current == position3):

nextDir = 'back'

return nextDir

def set_coordinate(self,bearring):

global originalDir

global x

global y

if(originalDir == 'north'):

if(bearring == 'right'):

x += 1

originalDir = 'east'

elif(originalDir == 'forward'):

y += 1

originalDir = 'north'

elif(originalDir == 'left'):

x -= 1

originalDir = 'west'

else:

y -= 1

originalDir = 'south'

elif(originalDir == 'east'):

if(bearring == 'right'):

y -= 1

originalDir = 'south'

elif(bearring == 'forward'):

x += 1

originalDir = 'east'

elif(bearring == 'left'):

y += 1

originalDir = 'north'

else:

x -= 1

originalDir = 'west'

elif(originalDir == 'west'):

if(bearring == 'right'):

y += 1

originalDir = 'north'

elif(bearring == 'forward'):

x -= 1

originalDir = 'west'

elif(bearring == 'left'):

y -= 1

originalDir = 'south'

else:

x += 1

originalDir = 'east'

elif(originalDir == 'south'):

if(bearring == 'right'):

x -= 1

originalDir = 'west'

elif(bearring == 'forward'):

y -= 1

originalDir = 'south'

elif(bearring == 'left'):

x += 1

originalDir = 'east'

else:

y += 1

originalDir = 'north'

def mapping_maze(self,senf,senr,senl):

sr = senr

sf = senf

sl = senl

direction =""

global visitedStack

global x

global y

global originalDir

if len(visitedStack)== 0:

self.set_coordinate((0,0))

visitedStack.append((0,0))

dfs.append((0,0))

if len(visitedStack)== 49:

direction = "stop"

else:

if((sf == 0)and(sr == 1)and(sl==1)):

nextPosition = self.get_next_direction("forward")

if(nextPosition in visitedStack):

dfs.pop()

rover = dfs[-1]

rovercurrent = self.go_back(rover)

self.set_coordinate(rovercurrent)

direction = rovercurrent

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("forward")

direction = "forward"

elif((sf==1)and(sr==0)and(sl==1)):

nextPosition = self.get_next_direction("right")

if(nextPosition in visitedStack):

dfs.pop()

rover = dfs[-1]

rovercurrent = self.go_back(rover)

self.set_coordinate(rovercurrent)

direction = rovercurrent

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("right")

direction = "right"

elif((sf==1)and(sr==1)and(sl==0)):

nextPosition = self.get_next_direction("left")

if(nextPosition in visitedStack):

dfs.pop()

rover = dfs[-1]

rovercurrent = self.go_back(rover)

self.set_coordinate(rovercurrent)

direction = rovercurrent

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("left")

direction = "left"

elif((sf==1)and(sr==0)and(sl==0)):

nextPosition = self.get_next_direction("right")

if(nextPosition in visitedStack):

nextPosition = self.get_next_direction("left")

if(nextPosition in visitedStack):

dfs.pop()

rover = dfs[-1]

rovercurrent = self.go_back(rover)

self.set_coordinate(rovercurrent)

direction = rovercurrent

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("left")

direction = "left"

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("right")

direction = "right"

elif((sf==0)and(sr==0)and(sl==1)):

nextPosition =self.get_next_direction("forward")

if(nextPosition in visitedStack):

nextPosition = self.get_next_direction("right")

if(nextPosition in visitedStack):

dfs.pop()

rover = dfs[-1]

rovercurrent = self.go_back(rover)

self.set_coordinate(rovercurrent)

direction = rovercurrent

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("right")

direction = "right"

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("forward")

direction = "forward"

elif((sf==0)and(sr==1)and(sl==0)):

nextPosition = self.get_next_direction("forward")

if(nextPosition in visitedStack):

nextPosition = self.get_next_direction("left")

if(nextPosition in visitedStack):

dfs.pop()

rover = dfs[-1]

rovercurrent = self.go_back(rover)

self.set_coordinate(rovercurrent)

direction = rovercurrent

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("left")

direction = "left"

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("forward")

direction = "forward"

elif((sf==0)and(sr==0)and(sl==0)):

nextPosition = self.get_next_direction("forward")

if(nextPosition in visitedStack):

nextPosition = self.get_next_direction("right")

if(nextPosition in visitedStack):

nextPosition = self.get_next_direction("left")

if(nextPosition in visitedStack):

dfs.pop()

rover = dfs[-1]

rovercurrent = self.go_back(rover)

self.set_coordinate(rovercurrent)

direction = rovercurrent

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("left")

direction = "left"

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("right")

direction = "right"

else:

visitedStack.append(nextPosition)

dfs.append(nextPosition)

self.set_coordinate("forward")

direction = "forward"

elif((sf==1)and(sr==1)and(sl==1)):

dfs.pop()

rover = dfs[-1]

rovercurrent = self.go_back(rover)

self.set_coordinate(rovercurrent)

direction = rovercurrent

return direction

求大神指教,真的很着急,这个是期末作业,考试前一定要完成,否则将不能考试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值