Pythonプログラミングで

チェスを作る

Stage 5 駒を動かす

5-3 アンパッサンの例外処理をする

アンパッサンも例外処理が必要です。というのも、取ろうとしている相手のポーンが移動先ではないところにありますから、移動先と移動元をいじっただけでは対処できません。相手の駒を取るコーディングが要ります。

UNAVAILABLE

~~~~~~~~~~~~~~~

実際にやることは簡単です。

                        
        # 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 
                   
                        
                    

自分のポーンは他の場合と合わせてあとで動かしますから、今は手をつけないでください。

NEXT 5-4 プロモーションの例外処理をする