Pythonプログラミングで

チェスを作る

Stage 9 ゲーム進行を記録する

9-4 ゲームで記録機能を運用する

さて、record を実際にゲーム上で作動させましょう。playmode.py ファイルにいって playmode 関数内の while ループで パラメーターを変える前です。

                        
        # 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)

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

ここで MAINRECADDRESS に操作を記述します。やることは簡単。main_board の record メソッドを引数 MAINRECADDRESS で作動させるだけ。これで駒の動きがファイルに記入されます。

UNAVAILABLE

棋譜を引数に入れなくてええの?

main_board.s に棋譜がすでに入っていますよ。record は main_board.s をそのまま記録するので、引数に大したものを入れる必要はありません。

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

ゲームが終わったら勝敗を記入していきましょう。ループを抜けて winner で条件分岐している場所です。

まずは引き分けの場合です。

                        
    print('\nGAME SET')
    if winner == EMPTY:
        print('1/2 - 1/2\tDRAW')
        # for record
        main_board.s = '1/2-1/2 '
        main_board.record(MAINRECADDRESS)
                        
                    

record のために main_board.s を 1/2-1/2 にします。最後の空白はあった方が後々役に立つかも。

UNAVAILABLE

役に立たないやつじゃん

これも Stage 10 で。

白勝ちではこの通り。

                        
    elif winner == WHITE:
        print('1 - 0\tWHITE WINS')
        # after white's move, 1-0 is written where black's move is written
        main_board.s = '1-0 '
        main_board.record(MAINRECADDRESS)
                        
                    

黒勝ちではこうですね。

                        
    elif winner == BLACK:
        print('0 - 1\tBLACK WINS')
        # after white's move, 1-0 is written where black's move is written
        main_board.s = '0-1 '
        main_board.record(MAINRECADDRESS)
                        
                    

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

そして最後に棋譜を見せてあげます。

                        
    else:
        logger.error('UNEXPECTED VALUE of PLAYER out of the loop')
        print('SYSTEM ERROR')
        sys.exit('SYSTEM ERROR')


    # record output
    if input('\nDo you want the record (y/n)? >>> ') in ['y', 'Y', 'yes', 'YES', 'Yes']:
        record = open(MAINRECADDRESS, 'r')
        print('\n------------------------------------')
        print(record.read())
        print('------------------------------------')
        record.close()
                        
                    
UNAVAILABLE

いいかげん説明せぇやコラ

はいはい、わかりましたよ。まず「棋譜ほしい?」と聞きます。

                        
    # record output
    if input('\nDo you want the record (y/n)? >>> ') in ['y', 'Y', 'yes', 'YES', 'Yes']: 
        record = open(MAINRECADDRESS, 'r')
                        
                    
UNAVAILABLE

いらねぇよ

って人に棋譜あげなくたっていいでしょ?

Yes と言われたら MAINRECADDRESS を読み取りモードで開いて中身を表示します。

                        
        record = open(MAINRECADDRESS, 'r')
        print('\n------------------------------------')
        print(record.read())
        print('------------------------------------')
                        
                    
UNAVAILABLE

この長い横棒なんなん?

これは実際に出力を見てみましょう。

UNAVAILABLE
UNAVAILABLE

下の方にあるやつね

そうですそうです。

最後にファイルを閉じておしまいです。

                        
        record.close()
                        
                    

NEXT Stage 10 記録からゲームを進める