イントロダクション
昔、ピクミンのパズルゲームがあったことをご存じだろうか(1990年代生まれなら世代かもしれない)。
ざっくり説明すると、同じ方向に動く複数のピクミンをすべてゴールに連れて行くゲームである。
プレイ動画はこちら
今となっては、スマホのアプリレベルのミニゲームであるが、当時このミニゲームをプレイするためには、GBA本体、カードe+、GC本体、ピクミン2、問題カード、その他接続機器と色々揃えなければいけなかったので結構敷居は高かった。
社会人3年目になり、ふと中学生時代にハマっていたのを思い出し、押入れから引っ張り出してプレイしてみたが結構難しくて、パズルゲームとしてシンプルに面白かった。
問題カードも揃っているし、せっかくの良作を後生に残そうかと思い、エクセルマクロを駆使して「てくてくピクミン」を再現した。
完成品
ダウンロードはこちら
[wpdm_package id=’2083′]
大まかな仕様
コードの中身は見るに堪えない内容であるため説明を省略する。
大まかな構想のみ説明する。
ゲーム開始前の準備:フィールド情報の入力
・エクセルのセルを地形に見立てて、フィールド情報を打ち込む。
・縦マス数、横マス数を入力する。
※例えば、ピクミンは漢字、ポンガシグサはカタカナの頭文字とする・・等
問題シートの「copy」をクリックすると自動で入力されるようになっている
例
↓
岩 | 岩 | 岩 | 岩 | 岩 | 岩 |
岩 | 穴 | 穴 | 宝 | 空 | 岩 |
岩 | 空 | 空 | 穴 | 空 | 岩 |
岩 | 黄 | 黄 | 空 | ホ | 岩 |
岩 | 岩 | 岩 | 岩 | 岩 | 岩 |
縦 | 5 | マス |
横 | 6 | マス |
ゲーム開始時:マップ情報を読み込んでコード化
情報を整理しやすくするため、打ち込んだフィールド情報を1列のコードに変換する。(情報が1次元的になる)
イメージ図は下記のとおり
例のマップで生成した1次元コードはこうなる
0506PPPPPPPNNO0PP00N0PP220DPPPPPPP
コードの先頭の数字は、縦マス数、横マス数であり、以降は順番に1マスの状態を示す。
※例えば、Pは岩、2は無地に黄色ピクミンがいる状態を示す
ゲーム中:矢印キーによりフィールドを変化させる
フィールドが持つ情報について
各フィールドは、2つの要素を持っていることとする
地面:穴、炎、水、毒、花、宝等
物体:赤ピクミン、岩、敵等
どのマスが変化する?
矢印キーを押すことで、フィールドの情報は変化する。
矢印キーで動くのはピクミンのみである。
つまり、変化があるのはピクミンがいる座標と、移動先の座標のみである。
先ほどのイメージ図で例えると、↑キーを押して変化があるのは、ピクミンがいる20、21番と、その上の14、15番のみと考えれば良い。
地形情報は1次元的となっているので、↑キーの場合は、ピクミンがいる座標から横マス分(6)をマイナスすることで、移動先の座標を算出できる。
どのように変化する?
移動元の変化はピクミンが消える、別のピクミンが来るの2択である。
移動先の変化はピクミンが動く、変身する、衝突する(動かない)、死ぬ、ゴール(消える)の5種類である
移動先に物体要素がある場合は、移動先の物体要素によって動く、衝突する(動かない)、死ぬのいずれかに分岐する。
移動先に物体要素が無い場合は、移動先の地形要素によって衝突する(動かない)以外に分岐する。
衝突の判定について
移動先が岩である場合は、「衝突する」とわかりやすいが、移動先にも別のピクミンがいる場合は少しややこしい。その別のピクミンが衝突するかによって、結果が変わるためである。
例
←キーを押した場合、右のピクミンの動きを判定するには、1マス左の情報(黄色ピクミン)だけではなく、もう一つ左のマス(岩)も参照する必要がある。これはピクミン以外のマスになるまで連続で繰り返す必要がある。
各セルにフィールド情報を入力
↑キーを押した場合のコードは以下のように変化する
変更前:0506PPPPPPPNNO0PP00N0PP220DPPPPPPP
変更後:0506PPPPPPPNNO0PP22N0PP000DPPPPPPP
あとは変化後の1次元コードを元に、各セルにフィールド情報を反映させるだけである
まとめ
パズルゲームはゲームプログラミングの入門としては、作りやすい方だと思うので、ぜひ挑戦してみると良い。
コメント