Pythonプログラミングで

チェスを作る

Stage 5 駒を動かす

5-6 パラメーター処理をする

UNAVAILABLE

駒動かしたから終わりだー!!

と思ってはいけません。まだ大事な作業が残っていますよ。今までさんざんお世話になってきたパラメーターの皆さんを放置しないでください。

ほら、ep_target とか castl_k とか、駒動かしたら値変えなきゃいけませんよね。順に見ていきましょうか。

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

まずはアンパッサンで使う ep_target を調整していきます。

                        
        if piece == PAWN and abs(toRANK - frRANK) > 1:
            self.ep_target = [toFILE, toRANK]
        else:
            self.ep_target = [OVERSIZE, OVERSIZE]
                        
                    

4-2 で確認した通り

  • ポーンが 2 マス動いたら移動先の座標
  • それ以外の動き(他の駒含む)は全て [OVERSIZE, OVERSIZE]

と分類します。

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

次はキャスリングです。キングサイドクイーンサイドをまとめていっぺんにとはいかないので、それぞれ場合分けしてあげましょう。

                        
        # for castling q-side
        if self.player in self.castl_q and (piece == KING or (piece == ROOK and frFILE == a - 1)):
            self.castl_q.remove(self.player)
        # for castling k-side
        if self.player in self.castl_k and (piece == KING or (piece == ROOK and frFILE == h - 1)):
            self.castl_k.remove(self.player)
                        
                    

リストからプレーヤーを抜く条件は

  • キングを動かした
  • or
  • そのサイドのルークを動かした

となります。当然この中にはキャスリングも含まれますよ。キングの動きですから。

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

一応ここでしっかり機能するかテストしておくといいと思います。frFILE, frRANK, ... と一つ一つ手入力して「本当にしっかり動いているかな」と検証しておきましょう。

正しい動き方はもちろん、間違った動き方を入力した際にちゃんと「動けない」とアラートなりなんなりを出すかも確認してください。ルールをまともに覚えていない人がゲームしても問題ないようにね。

NEXT Stage 6 勝敗を判定する