我正在制作的这个程序的最终目标是使用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
答案 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]]