Pythonプログラミングで

チェスを作る

Stage 5 駒を動かす

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

プロモーションも例外処理必要ですよ。動かす駒をただ動かすだけじゃ、駒の種類は変わりませんから。このあと他の場合と合わせてしっかり駒を動かすので、ここでは駒の種類だけを変えます。実際に動かすのは後におあずけ。

UNAVAILABLE

じゃあ駒を player * promotion にすりゃええんやな

そう単純でもありません。

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

ただただ「引数の promotion が EMPTY じゃない」ってだけで判断するとルールに合致しない場合が出てきてしまいます。

例えば piece がルークで promotion がクイーンであったとしても、motionjudge 自体は True を返しますけれども、当然ルールとしてはアウトですよね。ポーンならいいということでもなく、盤面のど真ん中でプロモーションされたら無法地帯になってしまいます。

UNAVAILABLE

ですからここで例外処理を発動する条件を

  • piece == PAWN
  • toRANK == 8 - 1 or 1 - 1

としておきましょう。

UNAVAILABLE

この2つはプロモーションしないと motionjudge ではねられるな

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

今度は実際に駒の種類を変えます。まったく難しいことはありません。

                        
        # promotion; changing the moving piece into promote
        if piece == PAWN and (toRANK == 8 - 1 or toRANK == 1 - 1):
            self.board[frFILE][frRANK] = self.player * promote
                        
                    

これでおしまいです。ほら、簡単でしょ?

ここまでくればもう例外処理はいらないでしょう。次はようやっと自分の駒を動かします。

NEXT 5-5 駒を動かす