Pythonプログラミングで

チェスを作る

Stage 8 ゲームを進行する

8-2 ゲームセットを判定する

それでは while ループに入りましょう。

                        
    while True:
                        
                    

基本的に決着がつくまでずっとループしますので、条件は True でいいかと。

まず最初にゲームが終了しているか確認します。

UNAVAILABLE

えー、まだ始めたばっかでしょ

じゃないんですよ。ここ while ループの中ですよ。何度も何度もこの場所には訪れるんです。ゲームが進んでいって何回もここを訪ねたあと、

UNAVAILABLE

これまだ while の中にいていいのかな。決着ついてたら次のターンとかねーじゃん

とシラフになって考え直すには、この位置がちょうどいいんじゃないですかね。

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

2-3 をはじめ、何度も確認していますが、チェスにおいてゲームセットの条件は 4 つ、キングを取られる・チェックメイト(詰み)・ステイルメイトリザイン(投了)です。リザインはあとでやるとして、他の 3 つはここで済ませましょう。

まずはキングが取られた場合。

                        
        ### GAME SET JUDGE
        # king captured
        if main_board.king_place(main_board.player) == False:
            winner = -main_board.player
            break
                        
                    

キングが盤上になければ 6-1 で作った king_place は False を返します。winner はループを抜けた後に勝者を判別するために、キングをとったプレーヤーを入れます。

UNAVAILABLE

なんで main_board.player のキングがいない場合しかみてないの?

簡単なことです。ここに来る前のターンが -main_board.player だったからです。「自分の駒を動かした時点で自分のキングが取られた」って、何言ってるかわかりませんよ。

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

次いでチェックメイト。

                        
        # checkmate
        if main_board.checkmatejudge(main_board.player):
            print('CHECKMATE')
            winner = -main_board.player
            break
                        
                    

先ほどと違って自分からチェックメイトになるように駒を動かすことはできますが、それって結局相手がキングを取ればいいだけの話じゃないですか。なのでこちらも片方しかみていません。

加えて、必ず「チェックメイトですよ」ということを教えてあげてください。

                        
        if main_board.checkmatejudge(main_board.player):
            print('CHECKMATE')
            winner = -main_board.player
            break
                        
                    

これがないと

UNAVAILABLE

は?なんで勝手に負けになってんの?訳わかんねーわクソゲーだわ

って言われてしまいますよ。

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

最後にステイルメイト。

                        
        # stalemate
        if main_board.stalematejudge(main_board.player):
            print('STALEMATE')
            winner = EMPTY  # stalemate is draw
            break
                        
                    

片方しか見ない理屈は同じです。ただしステイルメイトだと一般に引き分けになることに注意してください。

こちらも同じように「ステイルメイトですよ」ということを一言言っておくこと。

UNAVAILABLE

は?なんで勝手に引き分けになってんの?訳わかんねーわクソゲーだわ

とならないように。

NEXT 8-3 駒の動きを入力させる