在x y grid - python中移动“robot”

时间:2016-10-24 18:12:42

标签: python grid

我正在制作的这个程序的最终目标是使用A Star算法让机器人在网格中找到它的目标。我还没有进入A星级舞台,我正在试图弄清楚如何移动机器人,但我不确定如何将机器人从它的当前位置移动到下一个位置(北,南,东,西)。

注意:我还没有考虑到移动时的网格边界或墙壁。如果有人对如何解决这个问题有很好的了解,请随时分享您的知识。

另外,我似乎无法打印出我的网格,我不经常使用python而且我不完全确定如何打印网格。如何使用表示机器人,墙壁,陷阱或路径的某些字符打印出网格?

提前致谢。

class robot:

    def __init__ (self, name, grid, position):
        self.name = name
        self.position = position
        self.grid = grid

    def robot_position(position):
        position = (x,y)
        return robot.position

    def robot_neighbours(self, position):
        position = (x,y)
        results = [(x+1, y), (x, y-1), (x-1, y), (x, y+1)]
        return results

    def move_north():
        north = (x,y+1)
        robot.robot_position = north
        return robot.robot_position





class game_board:

    def boundary(self, point): #defines the grids boundaries
        point = (x,y)
        return 0 <= x < self.width and 0 <=y < self.height

    def node_neighbours(self, point): #defines the current nodes neighbours
        point = (x,y)
        results = [(x+1, y), (x, y-1), (x-1, y), (x, y+1)]
        results = filter(self.grid_boundary, results) #filters out the boundary results
        results = filter(self.can_pass_through, results) #filters out the coordinates that you can pass through from those you can't
        return results

    def can_pass_through(self, point):
        return point not in self.walls
        return point not in self.traps

#constructsthe2Dgrid
    def __init__(self, width, height): 
        self.width = width
        self.height = height
        self.name = " . "
        self.walls = []
        self.traps = []

    def build_grid(grid):
        for x in range(grid.width):
            for y in range (grid.height):
                print(x, y)
        return "grid created" + width + " " + height

1 个答案:

答案 0 :(得分:-1)

通常,问题是您使用()列表,而它应该是[]。现在,您正在生成元组,但如果您正在进行数学运算,最好使用列表。

代码中只有一个例子:

def robot_neighbours(self, position):
   position = [x, y]
   results = [[x+1, y], [x, y-1], [x-1, y], [x, y+1]]
   return results`

希望有所帮助, Narusan

编辑:主要区别在于使用列表,position[0]是一个有效的参数,但使用元组则不是。 对于你的运动,你会写一些类似

的东西
new_pos = [position[0]+1, position[1]]