2016-10-24 4 views
0

Моя конечная цель с этой программой, которую я делаю, - использовать алгоритм A Star, чтобы робот нашел свою цель в сетке. Я еще не на сцене A star, и я пытаюсь понять, как переместить робота, но я не уверен, как переместить робота из его текущего положения в его следующую позицию (север, юг, восток , запад).Перемещение «робота» в сетке x y - python

Примечание: Я не принимал во внимание границы сетки или стены при движении еще. Если у кого-то есть хорошая идея о том, как я могу это решить, не стесняйтесь делиться своими знаниями.

Кроме того, я не могу распечатать свою сетку, я не часто использую 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

Там есть несколько вопросов, с вашими классами и функциями, и это довольно трудно решить ваш вопрос, не также решения других проблем в вашем коде. Возможно, вам стоит подумать о том, чтобы разбить эту проблему на мельчайшие части, затем выполнить и проверить функциональность каждой части, прежде чем переходить к следующему. Это также поможет вам задать более узкие и точные вопросы, которые позволят людям помочь вам лучше. – sytech

ответ

-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

EDIT: Основное отличие состоит в том, что использование списков, position[0] является веским аргументом, но с помощью кортежей оно не. Для вашего движения, можно было бы написать что-то вроде

new_pos = [position[0]+1, position[1]] 
+0

Ах ладно. Я полагаю, что кортежи считаются одним элементом, поэтому x, y не будут разделены? если это имеет смысл. Где в качестве списков, конечно, есть отдельные элементы. –

+0

См. Этот вопрос [ссылка] (http://stackoverflow.com/questions/626759/whats-the-difference-between-list-and-tuples) – Narusan

+0

Кортежи здесь совершенно приемлемы. Верно, что кортежи неизменяемы, но OP не нуждается в изменении каких-либо значений в этой функции. Я считаю, что цель 'robot_neighbors' - вернуть позиции, которые окружают этот робот в сетке. Вы, безусловно, можете сделать 'new_pos' таким же, даже если' position' является кортежем. Аналогично, OP может сделать «результаты» кортежем без проблем, даже если «позиция» также является кортежем. – sytech

Смежные вопросы