Stage 5 駒を動かす
5-3 アンパッサンの例外処理をする
アンパッサンも例外処理が必要です。というのも、取ろうとしている相手のポーンが移動先ではないところにありますから、移動先と移動元をいじっただけでは対処できません。相手の駒を取るコーディングが要ります。
~~~~~~~~~~~~~~~
実際にやることは簡単です。
# en passant; pawn moves diagonal and TO is EMPTY
if piece == PAWN and frFILE != toFILE and self.board[toFILE][toRANK] == EMPTY:
# capturing opponent's pawn
self.board[self.ep_target[FILE]][self.ep_target[RANK]] = EMPTY
まず入力された移動がアンパッサンをやろうとしていることを判別します。条件は
- ポーンが
- file を変えて
- EMPTY のマスに移動している
ですね。
# en passant; pawn moves diagonal and TO is EMPTY
if piece == PAWN and frFILE != toFILE and self.board[toFILE][toRANK] == EMPTY:
# capturing opponent's pawn
self.board[self.ep_target[FILE]][self.ep_target[RANK]] = EMPTY
相手のポーンの座標が ep_target に格納されていますから、board[ep_target[FILE]][ep_target[RANK]] = EMPTY でそのポーンを取ることができます。
# en passant; pawn moves diagonal and TO is EMPTY
if piece == PAWN and frFILE != toFILE and self.board[toFILE][toRANK] == EMPTY:
# capturing opponent's pawn
self.board[self.ep_target[FILE]][self.ep_target[RANK]] = EMPTY
自分のポーンは他の場合と合わせてあとで動かしますから、今は手をつけないでください。