我正在用Python编写一个Chess程序,该程序需要生成骑士的所有动作。对于那些不熟悉国际象棋的人,骑士会以L形移动。
因此,考虑的位置,(2, 4)骑士可以移动到(0, 3),(0, 5),(1, 2),(3, 2)等共(最多)八个不同的移动。
(2, 4)
(0, 3)
(0, 5)
(1, 2)
(3, 2
我想编写一个函数knight_moves,该函数在列表中生成这些元组。在Python中最简单的方法是什么?
knight_moves
def knight_moves(position): ''' Returns a list of new positions given a knight's current position. ''' pass
好的,感谢Niall Byrne,我想到了这个:
from itertools import product def knight_moves(position): x, y = position moves = list(product([x-1, x+1],[y-2, y+2])) + list(product([x-2,x+2],[y-1,y+1])) moves = [(x,y) for x,y in moves if x >= 0 and y >= 0 and x < 8 and y < 8] return moves