Stage 5 駒を動かす
5-4 プロモーションの例外処理をする
プロモーションも例外処理必要ですよ。動かす駒をただ動かすだけじゃ、駒の種類は変わりませんから。このあと他の場合と合わせてしっかり駒を動かすので、ここでは駒の種類だけを変えます。実際に動かすのは後におあずけ。
じゃあ駒を player * promotion にすりゃええんやな
そう単純でもありません。
~~~~~~~~~~~~~~~
ただただ「引数の promotion が EMPTY じゃない」ってだけで判断するとルールに合致しない場合が出てきてしまいます。
例えば piece がルークで promotion がクイーンであったとしても、motionjudge 自体は True を返しますけれども、当然ルールとしてはアウトですよね。ポーンならいいということでもなく、盤面のど真ん中でプロモーションされたら無法地帯になってしまいます。
ですからここで例外処理を発動する条件を
- piece == PAWN
- toRANK == 8 - 1 or 1 - 1
としておきましょう。
この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
これでおしまいです。ほら、簡単でしょ?
ここまでくればもう例外処理はいらないでしょう。次はようやっと自分の駒を動かします。