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 つまり「解読/移動不可能」の場合であれば、当然入力したプレーヤーが悪いので、
てめーがチゲーんだよ
とつっぱねてください。もちろん当人が再入力しますから、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
おいおいおいおい、なんだよ 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
どうして白黒両方じゃないの?
棋譜を見ればわかりますが、1 ターンというのは白黒セットにして数えます。
次は player を相手に移すために -1 倍です。
# player change
main_board.player *= -1
最後に盤面をプレーヤーに見せてあげて、この手番はおしまいです。
# board output
main_board.print(turnmode=turnmode)
8-2 から続けてきた while ループはここで終了します。