Stage 6 ゲーム進行を実装する
6-3 ゲーム進行を実装する
さあ、最後のチャプターです。
長かった...
あともう一踏ん張りですよ。
if __name__ == "__main__":
startmenu()
main_board = board.Board(size=parameters['size'], goal=parameters['goal'])
main_board.print()
while True:
input_d = input('DIRECTION: UP-1, DOWN-2, LEFT-3, RIGHT-4 : ')
logger.debug('input_d = {}'.format(input_d))
if input_d in ['1', 'w', 'W']:
direction = UP
elif input_d in ['2', 's', 'S']:
direction = DOWN
elif input_d in ['3', 'a', 'A']:
direction = LEFT
elif input_d in ['4', 'd', 'D']:
direction = RIGHT
else:
print('INVALID INPUT')
continue
if main_board.move(direction) == FAILED:
print('INVALID DIRECTION')
continue
if main_board.insert() == FAILED or main_board.isOver():
main_board.print()
print('GAME OVER...')
break
if main_board.isGoal() == True:
main_board.print()
print('You WIN!')
break
main_board.print()
logger.info('end')
まだ長かった...
そんな、あとわずかじゃないですか。
~~~~~~~~~~~~~~~
最初に 6-2 で実装した startmenu を実行します。
if __name__ == "__main__":
startmenu()
main_board = board.Board(size=parameters['size'], goal=parameters['goal'])
main_board.print()
この関数の中で初期設定の変更も済ませられるので、サイズやゴールは parameters をそのまま使って構いません。早速盤面のインスタンスを宣言しましょう。
if __name__ == "__main__":
startmenu()
main_board = board.Board(size=parameters['size'], goal=parameters['goal'])
main_board.print()
インスタンスを宣言したらまずは盤面を表示します。どこにどんな数字があるかもわからないのに「早く動かせ」って言われてもしょうがないでしょ?
もしスタート画面で下手に設定を弄らなければ、画面全体はこの時点でこのようになっています。
~~~~~~~~~~~~~~~
さて、ここからは while ループでゴールするかゲームオーバーになるまで同じことを繰り返し続けます。
まずはプレーヤーに盤面を動かす方向を指示してもらいましょう。
while True:
input_d = input('DIRECTION: UP-1, DOWN-2, LEFT-3, RIGHT-4 : ')
logger.debug('input_d = {}'.format(input_d))
無難に 1 ~ 4 の数字で聞いていますが、裏コマンドとして W/S/D/A のキーでも扱えるようにしています。左手の矢印キー機能ですね。
各方向で場合わけして direction を決めていきます。
if input_d in ['1', 'w', 'W']:
direction = UP
elif input_d in ['2', 's', 'S']:
direction = DOWN
elif input_d in ['3', 'a', 'A']:
direction = LEFT
elif input_d in ['4', 'd', 'D']:
direction = RIGHT
else:
print('INVALID INPUT')
continue
正規外の入力があったら
無理だっつってんだろうが、アァ?
と毅然とした態度でつっぱねてください。
~~~~~~~~~~~~~~~
次いで、入力してもらった方向に move メソッドを発動します。
if main_board.move(direction) == FAILED:
print('INVALID DIRECTION')
continue
FAILED「失敗」したらその向きには盤面を動かせないわけですから、「入力がやっぱりおかしい」と言ってつっぱねてあげましょう。while ループを continue してください。
これでちゃんと move 発動しとるんか?
してますよ。if 文の条件を確認する時に move の返り値をみているわけですが、返り値を得るには必ず move を実行しなければいけませんから。
新しい数を入れられなかったり、ゲームオーバーが確定していたら、盤面を表示して「ゲームオーバーです」と言って while ループを抜けます。
if main_board.insert() == FAILED or main_board.isOver():
main_board.print()
print('GAME OVER...')
break
またゴールしていたら「ゲームクリア」ということで盤面を表示してプレーヤーをたたえてあげましょう。こちらも break してください。
if main_board.isGoal() == True:
main_board.print()
print('You WIN!')
break
最後まで残った場合には、まだ新しい盤面が見えていないので、しっかり盤面を見せてから while ループの先頭に戻してあげます。
if main_board.isGoal() == True:
main_board.print()
print('You WIN!')
break
main_board.print()
~~~~~~~~~~~~~~~
さあ、これでコーディングは全て終了しました。みなさま、長らくお疲れ様でした。
疲れた...
ぜひご自分で遊んでみて、ご友人にも遊ばせてみて、今後のコーディングのモチベーションとしていただければと思います。
この解説の中で矛盾や不明瞭な点、誤植などがございましたら、フッター(ページ最下部)からご連絡ください。