Pythonでチェスゲームを書いています。キングがチェックされたら、可能な動きを除外するか、チェックをブロックするか、キングを動かす必要があります。チェックをブロックするために、可能なブロックの動きを返す関数を書きたいと思います。関数は次のようになります。
def getBlockingCheckMoves(pieceField,kingPos)
ルークの場合、長いソリューションは次のようになります。
- x 座標が同じかどうかを確認し、正しい増分で y の範囲から作成されたタプルを返します。
- y 座標が同じ場合、x の範囲から作成されたタプルを返します。
itertools を使用してこれを達成するためのより Pythonic な方法はありますか?
編集:私の長いバージョン
if pieceField[0] == kingPos[0]:
if pieceField[1] < kingPos[1]:
return [(pieceField[0],x) for x in range(pieceField[1],kingPos[1])]
else:
return [(pieceField[0],x) for x in range(pieceField[1],kingPos[1],-1)]
if pieceField[1] == kingPos[1]:
if pieceField[0] < kingPos[0]:
return [(x,pieceField[1]) for x in range(pieceField[0],kingPos[0])]
else:
return [(x,pieceField[1]) for x in range(pieceField[0],kingPos[0],-1)]