Pythonプログラミングで

チェスを作る

Stage 8 ゲームを進行する

8-6 盤上で駒を動かす

ようやく盤上の駒を実際に動かします。

                        
        # invalid input (here, valid motion is conducted)
        if motion == False or main_board.move(*motion) == False:
            print('INVALID INPUT/MOTION')
            continue

        # recording the move
        main_board.record(MAINRECADDRESS)

        ### PARAMETERS MANIPULATION
        # turn count
        if main_board.player == BLACK:
            main_board.turn += 1

        # player change
        main_board.player *= -1
        
        # board output
        main_board.print(turnmode=turnmode)
                        
                    

まず s_analyze の結果を格納している motion が False つまり「解読/移動不可能」の場合であれば、当然入力したプレーヤーが悪いので、

UNAVAILABLE

てめーがチゲーんだよ

とつっぱねてください。もちろん当人が再入力しますから、continue によってループ先頭に戻るようにします。

                        
        # invalid input (here, valid motion is conducted)
        if motion == False or main_board.move(*motion) == False:
            print('INVALID INPUT/MOTION')
            continue
                        
                    

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

同時に if 文の中で move を実行することによって、盤上の駒を実際に動かしています。もし False「移動失敗」がリターンされたら、やはりプレーヤーには 8-2 から動かしている while の頭からやり直してもらいます。

                        
        # invalid input (here, valid motion is conducted)
        if motion == False or main_board.move(*motion) == False:
            print('INVALID INPUT/MOTION')
            continue
                        
                    
UNAVAILABLE

おいおいおいおい、なんだよ move(*motion) って

関数やメソッドなどの引数に *list を入れると、リストの中身を引数に代入してくれるというものです。つまり move(*motion) は

move(motion[0], motion[1], motion[2], motion[3], motion[4])

と同じ。

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

さて、while ループもいよいよ終盤です。if 文内で move を発動した時点で駒は動いていますので、パラメーターを調節してあげます。

                        
        # recording the move
        main_board.record(MAINRECADDRESS)

        ### PARAMETERS MANIPULATION
        # turn count
        if main_board.player == BLACK:
            main_board.turn += 1

        # player change
        main_board.player *= -1
        
        # board output
        main_board.print(turnmode=turnmode)
                        
                    

ただし record の部分は Stage 10 で扱いますので今は無視してください。いや、今は考えません。だから、そんなにしつこいと

モテないよ、君。

まず turn のカウントを増やしてあげます。白 → 黒 → ... の順なので、player が黒のときに turn を増やしてあげてください。

                        
        ### PARAMETERS MANIPULATION
        # turn count
        if main_board.player == BLACK:
            main_board.turn += 1
                        
                    
UNAVAILABLE

どうして白黒両方じゃないの?

棋譜を見ればわかりますが、1 ターンというのは白黒セットにして数えます。

UNAVAILABLE

次は player を相手に移すために -1 倍です。

                        
        # player change
        main_board.player *= -1
                        
                    

最後に盤面をプレーヤーに見せてあげて、この手番はおしまいです。

                        
        # board output
        main_board.print(turnmode=turnmode)
                        
                    

8-2 から続けてきた while ループはここで終了します。

NEXT 8-7 ゲームセット後を処理する