0

Pythonでチェスゲームを書いています。キングがチェックされたら、可能な動きを除外するか、チェックをブロックするか、キングを動かす必要があります。チェックをブロックするために、可能なブロックの動きを返す関数を書きたいと思います。関数は次のようになります。

def getBlockingCheckMoves(pieceField,kingPos)

ルークの場合、長いソリューションは次のようになります。

  1. x 座標が同じかどうかを確認し、正しい増分で y の範囲から作成されたタプルを返します。
  2. 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)]
4

0 に答える 0