迷路ゲームを作ろう
今回は2次元リストを使った迷路ゲームを作ります。
迷路は8x8のマスを持ち、Sのマスからスタートして、Gのマスがゴールです。
白いマスが移動できるマスで、黒いマスが移動できないマスとなります。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
0 | S | |||||||
1 | ||||||||
2 | ||||||||
3 | ||||||||
4 | ||||||||
5 | ||||||||
6 | ||||||||
7 | G |
ゲームの仕様は、以下のようになります。
仕様
- 2次元リストを使って迷路のイメージを定義する
- 配列の要素の種類は0、1、2として、0は通行不可、1は通行可能、2はゴールとする
- 移動キーは、wは上移動、sは下移動、aは左移動、dは右移動とする
- qキーでスクリプトを終了する
- ゴールに到達したらスクリプトを終了する
実行イメージ
実行イメージは、以下のようになります。
現在地は、2次元リストのインデックスで、[縦/横]という意味です。
qを入力するとゲームは終了します。
実行例
> python maze1.py
+++ 操作方法 [上:w][下:s][左:a][右:d][終了:q] +++
+++ 現在地 [0/0] +++
>>> s
+++ 現在地 [1/0] +++
>>> s
+++ 現在地 [2/0] +++
>>> d
:
:
+++ 現在地 [6/6] +++
>>> d
+++ 現在地 [6/7] +++
>>> s
+++ ゴール!! +++
Pythonスクリプト
ゲームのPythonスクリプトは、以下のようになります。
スクリプト解説
2行目
UP、DOWN、LEFT、RIGHTに、それぞれ0、1、2、3の値を定義します。
3行目
キー辞書を定義します。
wがUP、sがDOWN、aがLEFT、dがRIGHTになります。
7~14行目
マップの2次元リストを定義します。
0が移動不可、1が移動可能、2がゴールとなります。
17~21行目
各種メッセージを定義します。
24~83行目
迷路クラスを定義します。
34、35行目
現在地表示メソッドを定義します。
[縦/横]でマップリストのインデックスを表しています。
38~83行目
移動メソッドを定義します。
w、s、a、dキーの操作でマスを移動します。
入力したキーに対応するマスに移動できるかどうか判断します。
リストのインデックスがマイナス、インデックスの最大値以上、マスの値が0だった場合は、移動ができない旨のメッセージを表示します。
移動したマスの値が2だった場合は、ゴールとなりゲームは終了します。
90、91行目
スタート地点を定義します。
ここでは、マップリストの[0][0]をスタート地点にしています。
94行目
迷路クラスを生成します。
100~125行目
while文を使ってループ処理に入ります。条件にTrueを使っているので、無限ループとなります。
ゴールに到達するか、qを入力するとループが終了します。
103行目
迷路の現在地(インデックス)を表示します。
106行目
input()関数を使って、迷路の中を移動します。
109、110行目
qが入力された場合は、break文によりループを抜けてスクリプトが終了します。
113~118行目
入力したキーの値がキー辞書にあるかどうかを判定します。
定義されていないキーが入力された場合は、ループの先頭に戻ります。
121~125行目
移動メソッドを呼び出します。
戻り値がTrueの場合は、break文によりwhileループを抜けて、スクリプトが終了します。