Как смоделировать движение епископа на шахматной доске - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть доска, и я хочу смоделировать возможные ходы епископа на ней.Я попытался этот код:

for c1, c2 in [(1, -1), (1, 1), (-1, -1), (-1, 1)]:
    for x, y in [range(x+c1, board_size), range(y+c2, board_size)]:
        moves.append(x, y)

Но он не работает, чтобы найти все ходы.Тем не менее, я не понимаю, почему.Разве он не проверяет все четыре направления?

1 Ответ

0 голосов
/ 30 апреля 2019

Ваша логика здорова, но ваше исполнение - нет.

  1. Половина ваших расчетов должна быть от x или y до 0 (другая половина - от x или y до board_size
  2. Диапазоны не работают от больших значений к меньшим с шагом по умолчанию, поэтому вам нужно ввести шаг -1 для подсчета от x или y до 0
  3. Вы должны использовать zip() для создания итерируемой коллекции кортежей.

Это будет работать:

right_up = zip(range(x + 1, board_size), range(y - 1, -1, -1))
right_down = zip(range(x + 1, board_size), range(y + 1, board_size)) 

left_up = zip(range(x - 1, -1, -1), range(y - 1, -1, -1))
left_down = zip(range(x - 1, -1, -1), range(y + 1, board_size))

for r in (right_up, right_down, left_up, left_down):
    for new_x, new_y in r:  # add coordinates to move list
...