Pythonプログラミングで

チェスを作る

Stage 5 駒を動かす

5-1 駒を動かせない場合を除外する

駒を実際に動かすのは board.py ファイル Board クラスの move メソッドです。

                        
    def move(self, frFILE, frRANK, toFILE, toRANK, promote=EMPTY, logger=None):
        ...
                        
                    

引数は motionjudge とまったく同じで移動元の座標、移動先の座標、プロモーションする駒番号、logger です。promotion はデフォルトでは「何にも成り上がらない」EMPTY となっています。

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

ではコードの中身を見ていきましょう。ロガーを設定した後、まずは入力した動きができるかを確かめます。

                        
    def move(self, frFILE, frRANK, toFILE, toRANK, promote=EMPTY, logger=None):
        ### LOGGER SETTING
        logger = logger or self.logger
        
        ### INVALID MOTON
        if self.motionjudge(frFILE, frRANK, toFILE, toRANK, promote) == False:
            return False
                        
                    

万が一変な動きをされたら盤面がグッチャグチャになりますから、クラスの秩序を保つためになんとしてもやっておかなければなりません。

具体的には、もらった引数をそのまま motionjudge に通します。この値が False「移動不可能」であれば move も「実行不可能」False を返すという仕組みです。

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

ここまでで motionjudge にそぐわないものは全て排除できました。

UNAVAILABLE

これでもう動かせない動きはないな

いえいえ、「動かしているのが自分の駒か」も確認します。motionjudge は相手の駒を動かそうとしても True を返してしまいます。動かそうとしてるのが自分の駒でなければ当然 False「動かせない」をリターン。

                        
        ### NOT OWN PIECE
        if fundam.PosNeg(self.board[frFILE][frRANK]) != self.player:
            logger.debug('MOVING OPPONENT PIECE OR EMPTY')
            return False
                        
                    

ここまでの関門を全て突破したものは移動できますから、なんのためらいもなく駒を動かせます。

NEXT 5-2 キャスリングの例外処理をする