Python.Japanの入門講座の「スイカ割りゲーム」を理解するために、自分でも参考にして、プログラミングしてみることにした。元の入門講座は以下のところにある。
https://www.python.jp/train/exercise/index.html
まず、以下のようなマス目のボードに、スイカがおいてあり、プレイヤーもそのマス目のどこかに配置する。方向は上向きが北とする。マスの座標はマスの中に書いてあるとおり。(元の例題では5マスだったが7マスに変更した)
ヒントはスイカの位置とプレーヤの位置をx軸とy軸の位置で示す。(元の問題では距離を示すことにしているが、遊びを簡単にするために変更した)
プレイヤーは、東西南北にそれぞれ一マスずつ移動できる。
スイカとプレイヤーが同じ位置に来るまで、移動を繰り返す。
ゲームの手順
1.スイカとプレイヤーの位置を決める。
2.スイカとプレイヤーの位置を示す。
3.キーボードから、移動情報の文字を受け取る。
4.受け取った文字が、nなら北、sなら南、eなら東、wなら西に一マス移動する。
5.スイカとプレイヤーの位置がおなじになるまで、2,3,4を繰り返す。
6。ゲーム終了のメッセージを表示する。
スイカとプレイヤーの初期位置の設定
スイカとプレイヤーの位置は、乱数を使用して、ランダムな位置に設定するようにする。ランダムの発生は、randomモジュールをインポートして使用する。
スイカとプレイヤーの座標は、0から6までなので、randomrange関数を使用する。
randomrange()は、
random.randomrange(開始値、終了値)
の形式で指定する。
ゲームの繰り返し処理
次にプレイヤーとスイカの位置が一致するまでの繰り返し処理を考える。この繰り返し処理は、while文を使用する。
スイカとプレイヤーの位置情報が一致するまで、処理を繰り返す。位置情報が一致するのは、スイカとプレイヤーのx座標の値と、y座標の値が両方とも一致した場合である。
スイカとプレイヤーのx座標、y座標はそれぞれ以下のように設定する。
(suika_x, suika_y)
(player_x, player_ y)
スイカとプレイヤーの距離を求める
スイカとプレイヤーの距離は、x座標の距離とy座標の距離を足したものとする。それぞれの座標はどちらが大きいのかわからないので、その距離や絶対値で示す。
abs(player_x - suika_x) + abs(player_y - suika_y)
この処理は関数として定義した。
def calc_distance(0x1, y1, x2, y2):
# 2点間の距離を求める
diff_x = abs(x1 - x2)
diff_y = abs(y1 - y2)
return diff_x + diff_y
プレイヤーの移動処理
スイカとプレイヤーの位置情報を表示した後、input() 関数を使ってキー入力を行い、入力文字に従って、プレイヤーの位置を移動する。
元の例題では、入力依頼の文がなかったが、「移動方向を入力してください」という文章を追加した。
入力した文字がnなら北へ、sなら南へ、eなら東へ、wなら西へ移動する。
例えば、北へ移動するのは、プレイヤーのy座標を一つ減らして、ボードの上方に移動する。東へ移動するには、プレイヤーのx座標を一つ増やして、ボードの右方に移動する。
この移動での処理では、プレイヤーの位置がボードの外に飛び出ることがある。
x座標やy座標が、-1になったり、7になったりすることがある。その場合にはボードの外に飛び出さないように、0や6という元の値に戻して、飛び出さないようにする。(元の例題ではこの処理はなかったが、入れておいた)
以上の処理をプログラムに表示してみると以下のようになる。
実行結果は以下のようになる。
0 件のコメント:
コメントを投稿