一尘不染

如何生成骑士的所有动作?

python

我正在用Python编写一个Chess程序,该程序需要生成骑士的所有动作。对于那些不熟悉国际象棋的人,骑士会以L形移动。

因此,考虑的位置,(2, 4)骑士可以移动到(0, 3)(0, 5)(1, 2)(3, 2)等共(最多)八个不同的移动。

我想编写一个函数knight_moves,该函数在列表中生成这些元组。在Python中最简单的方法是什么?

def knight_moves(position):
    ''' Returns a list of new positions given a knight's current position. '''
    pass

阅读 154

收藏
2021-01-20

共1个答案

一尘不染

好的,感谢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
2021-01-20