Pythonプログラミングで

リバーシを作る

Stage 7 ゲーム進行をデザインする

7-5 ゲームセット後の操作を実装する

さて、main.py で、ゲームセットして while ループを離脱した後の機能をコーディングします。とりあえずコードを見てみましょう。

                        
print('\nGAME SET')
counter = main_board.countpiece()

# in case of give up
if main_board.game_status == GAME_PRC:
    print('INTERRUPTION')
    if main_board.winner == BLACK:
        print('BLACK WINS')
    elif main_board.winner == WHITE:
        print('WHITE WINS')
    else:
        print('SYSTEM ERROR: DRAW')
# the other cases of game set
else:
    counter = main_board.countpiece()
    print('{} - {}'.format(counter[0], counter[1]))
    if counter[0] == counter[1]:
        print('DRAW')
    elif counter[0] > counter[1]:
        print('○ WINS')
    elif counter[0] < counter[1]:
        print('● WINS')
    else:
        logger.error('ILLOGICAL ATTITUDE out of the while loop')

print('\nGAME OVER\n')
                        
                    

では早速コーディングします。

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

とりあえず「ゲーム終了」ということを知らせてあげましょう。

                        
print('\nGAME SET')
                        
                    

とりあえずどっちかがギブアップした場合を考えましょう。この時

game_status は GAME_PRC

です。

PRC って確か「進行中」だろ?ゲーム終わってねーじゃん

ええ、終わってないのに while ループを抜けてるということは、順当な終わり方をしてないんですから、ギブアップしたとわかるわけです。

ではコーディングしましょう。まずは game_status が GAME_PRC であることを条件に入れておきます。

                        
# in case of give up
if main_board.game_status == GAME_PRC:
    print('INTERRUPTION')
                        
                    

「中断されましたよ」って教えてあげるといいですね。

この条件のもとで、winner が BLACK であれば、石の数によらず黒の勝ちです。

                        
    if main_board.winner == BLACK:
        print('BLACK WINS')
    elif main_board.winner == WHITE:
        print('WHITE WINS')
    else:
        print('SYSTEM ERROR: DRAW')
                        
                    

同様に winner が白なら黒の方が多くても白の勝ち。

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

さて、今度は順当にゲームセットになった場合、つまり両方とも石をおけなくなった状態を考えてあげます。この時は純粋に石の多い方が勝ちですよね。

6-2 で実装した countpiece メソッドで白黒それぞれいくつずつ石があるか数えます。

                        
# the other cases of game set
else:
    counter = main_board.countpiece()
    print('{} - {}'.format(counter[0], counter[1]))
                        
                    

ついでに黒と白が何対何だったかを今のうちに示してあげましょう。

さて、counter[0] が黒、counter[1] が白ですので、それに基づいて場合分けします。まずは引き分けから。

                        
    if counter[0] == counter[1]:
        print('DRAW')
                        
                    

ただただ「引き分け」と表示するだけです。

どっちかが勝っても同じこと。

                        
    elif counter[0] > counter[1]:
        print('○ WINS')
    elif counter[0] < counter[1]:
        print('● WINS')
    else:
        logger.error('ILLOGICAL ATTITUDE out of the while loop')
                        
                    

ラストに「ゲームおしまい」って書いて完成です。

                        
print('\nGAME OVER\n')
                        
                    

長い長いコーディングもこれで終わりです。お疲れ様でした。