import time def print_maze(maze,x,y): for i in range(len(maze)): s = '' for j in range(len(maze)): if i == x and j == y: s += 'X' elif maze[i][j] == 1: s += '1' else: s += '.' print s print ' ' class MazeRunner(object): def __init__(self, maze, start, finish): self.__maze = maze self.__rotation = (1,0) self.__x = start[0] self.__y = start[1] self.__finish = finish def go(self): x = self.__x + self.__rotation[0] y = self.__y + self.__rotation[1] if x > len(self.__maze)-1 \ or y > len(self.__maze)-1 \ or x < 0 or y < 0 \ or self.__maze[x][y] == 1: return False self.__x = x self.__y = y print_maze(self.__maze, self.__x, self.__y) time.sleep(0.5) print(chr(27) + "[2J") return True def turn_left(self): left_rotation = { (0,1): (1,0), (1,0): (0,-1), (0,-1): (-1,0), (-1,0): (0,1), } self.__rotation = left_rotation[self.__rotation] return self def turn_right(self): right_rotation = { (1,0): (0,1), (0,-1): (1,0), (-1,0): (0,-1), (0,1): (-1,0), } self.__rotation = right_rotation[self.__rotation] return self def found(self): return self.__x == self.__finish[0] and self.__y == self.__finish[1] def maze_controller(mr): while not(mr.found()): if mr.go(): mr.found() else: mr.turn_left() if mr.go(): mr.found() else: mr.turn_right() maze_example1 = { 'm': [ [0,1,0,0,0], [0,1,1,1,1], [0,0,0,0,0], [1,1,1,1,0], [0,0,0,1,0], ], 's': (0,0), 'f': (4,4) } maze_runner = MazeRunner(maze_example1['m'], maze_example1['s'], maze_example1['f']) maze_controller(maze_runner) print maze_runner.found()
outstripфункция maze_controller должна быть вне класса!
Моя ошибка состоит в том, что я каким то образом организовал “прямой доступ к изображению лабиринта”
import time def print_maze(maze,x,y): for i in range(len(maze)): s = '' for j in range(len(maze)): if i == x and j == y: s += 'X' elif maze[i][j] == 1: s += '1' else: s += '.' print s print ' ' class MazeRunner(object): def __init__(self, maze, start, finish): self.__maze = maze self.__rotation = (1,0) self.__x = start[0] self.__y = start[1] self.__finish = finish def go(self): x = self.__x + self.__rotation[0] y = self.__y + self.__rotation[1] if x > len(self.__maze)-1 \ or y > len(self.__maze)-1 \ or x < 0 or y < 0 \ or self.__maze[x][y] == 1: return False self.__x = x self.__y = y print_maze(self.__maze, self.__x, self.__y) time.sleep(0.5) print(chr(27) + "[2J") return True def turn_left(self): left_rotation = { (0,1): (1,0), (1,0): (0,-1), (0,-1): (-1,0), (-1,0): (0,1), } self.__rotation = left_rotation[self.__rotation] return self def turn_right(self): right_rotation = { (1,0): (0,1), (0,-1): (1,0), (-1,0): (0,-1), (0,1): (-1,0), } self.__rotation = right_rotation[self.__rotation] return self def found(self): return self.__x == self.__finish[0] and self.__y == self.__finish[1] def maze_controller(mr): while not(mr.found()): if mr.go(): mr.found() else: mr.turn_left() if mr.go(): mr.found() else: mr.turn_right() maze_example1 = { 'm': [ [0,1,0,0,0], [0,1,1,1,1], [0,0,0,0,0], [1,1,1,1,0], [0,0,0,1,0], ], 's': (0,0), 'f': (4,4) } maze_runner = MazeRunner(maze_example1['m'], maze_example1['s'], maze_example1['f']) maze_controller(maze_runner) print maze_runner.found()
import time def print_maze(maze,x,y): for i in range(len(maze)): s = '' for j in range(len(maze)): if i == x and j == y: s += 'X' elif maze[i][j] == 1: s += '1' else: s += '.' print s print ' ' class MazeRunner(object): def __init__(self, maze, start, finish): self.__maze = maze self.__rotation = (1,0) self.__x = start[0] self.__y = start[1] self.__finish = finish def go(self): x = self.__x + self.__rotation[0] y = self.__y + self.__rotation[1] if x > len(self.__maze)-1 \ or y > len(self.__maze)-1 \ or x < 0 or y < 0 \ or self.__maze[x][y] == 1: return False self.__x = x self.__y = y print_maze(self.__maze, self.__x, self.__y) time.sleep(0.5) print(chr(27) + "[2J") return True def turn_left(self): left_rotation = { (0,1): (1,0), (1,0): (0,-1), (0,-1): (-1,0), (-1,0): (0,1), } self.__rotation = left_rotation[self.__rotation] return self def turn_right(self): right_rotation = { (1,0): (0,1), (0,-1): (1,0), (-1,0): (0,-1), (0,1): (-1,0), } self.__rotation = right_rotation[self.__rotation] return self def found(self): return self.__x == self.__finish[0] and self.__y == self.__finish[1] maze_example1 = { 'm': [ [0,1,0,0,0], [0,1,1,1,1], [0,0,0,0,0], [1,1,1,1,0], [0,0,0,1,0], ], 's': (0,0), 'f': (4,4) } def maze_controller(mr): while not(mr.found()): if mr.go(): mr.found() else: mr.turn_left() if mr.go(): mr.found() else: mr.turn_right() maze_runner = MazeRunner(maze_example1['m'], maze_example1['s'], maze_example1['f']) maze_controller(maze_runner) print maze_runner.found()
outstripвы то влево то вправо идете
если можно ткните носом в мои ошибки
outstripесли хорошо поработать то поможет
но вряд ли мне это поможет исправить код.
outstripя не буду писать то что в интернете полно
Можно более детализированный ответ?
import time def print_maze(maze,x,y): for i in range(len(maze)): s = '' for j in range(len(maze)): if i == x and j == y: s += 'X' elif maze[i][j] == 1: s += '1' else: s += '.' print s print ' ' class MazeRunner(object): def __init__(self, maze, start, finish): self.__maze = maze self.__rotation = (1,0) self.__x = start[0] self.__y = start[1] self.__finish = finish def go(self): x = self.__x + self.__rotation[0] y = self.__y + self.__rotation[1] if x > len(self.__maze)-1 \ or y > len(self.__maze)-1 \ or x < 0 or y < 0 \ or self.__maze[x][y] == 1: return False self.__x = x self.__y = y print_maze(self.__maze, self.__x, self.__y) time.sleep(0.2) print(chr(27) + "[2J") return True def turn_left(self): left_rotation = { (0,1): (1,0), (1,0): (0,-1), (0,-1): (-1,0), (-1,0): (0,1), } self.__rotation = left_rotation[self.__rotation] return self def turn_right(self): right_rotation = { (1,0): (0,1), (0,-1): (1,0), (-1,0): (0,-1), (0,1): (-1,0), } self.__rotation = right_rotation[self.__rotation] return self def found(self): return self.__x == self.__finish[0] and self.__y == self.__finish[1] maze_example1 = { 'm': [ [0,0,0,1,1,0,1,1,0,0,0], [0,1,0,0,0,0,0,0,0,1,0], [0,1,0,1,1,1,1,1,0,1,0], [0,0,0,1,0,0,0,1,0,0,0], [0,0,1,1,0,0,0,1,1,0,0], [0,0,1,0,0,0,0,0,1,0,0], [0,0,1,0,1,0,1,0,1,0,0], [0,0,1,0,0,0,0,0,1,0,0], [0,0,1,1,1,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,0], [0,0,1,0,1,0,1,0,1,0,0], ], 's': (0,5), 'f': (4,5) } def maze_controller(mr): while not(mr.found()): if mr.go(): if mr.found()==False: mr.turn_right() if mr.go(): if mr.found()==False: mr.go() mr.go() else: mr.turn_left() mr.turn_left() if mr.go(): mr.found() else: mr.turn_right() else: mr.turn_left() if mr.go(): mr.found() else: mr.turn_right() mr.turn_right() maze_runner = MazeRunner(maze_example1['m'], maze_example1['s'], maze_example1['f']) maze_controller(maze_runner) print maze_runner.found()