C++初歩7 迷路脱出ゲーム
C++初歩7 迷路脱出ゲーム
これからどの様な迷路脱出ゲームを作るかと、クラス図の概要を説明しています。
今回は、前章で作成したタイルマップ作成ツールのプログラムを迷路脱出ゲームに仕立て直すに当たり、不要なクラスを削除し、エラーの無い状態にし、ウィンドウサイズを計算するのに必要な定数を定義します。
迷路表示するためのタイル番号からなる配列をvector型の二次元配列にします。マップファイルのデータを読み込み、迷路の基礎となる4つの部屋を表示します。
前章で作成したツールを使って、3種類のマップファイルを用意しているので、0~2の数字キーを押すと、それぞれのマップファイルを元に作成した迷路の部屋が表示されるようにします。
タイルを使って画像を表示するプログラムでは、ドット単位のピクセル位置よりもタイル単位の位置の方が扱いやすいため、int型のXY位置を扱うTileCoord型を作成します。ドット位置を扱うVector2型と同じようにオペレータ演算子のオーバーロードを行うため、元々Vector2型用に作ったクラスをテンプレートにして、float型を指定したものをVector2型、int型を指定したものをTileCoord型にします。
マップファイルのデータは4部屋分しかありませんでしたが、これを縦横に展開して、横が8部屋、タテが6部屋の、合計24部屋を表示するようにします。
「C言語復習15 迷路の自動生成」で説明した棒倒し法のプログラムを流用して、各部屋をつなぐ通路を作成し、迷路にします。
アニメーション用の画像ファイルを使ってプレイヤーを表示します。また、上下左右の方向キーを押すと、その方向に歩くように、アニメーションする様にします。アニメーションは、AnimSpriteComponentで行うようにします。
プレイヤーが、タイルとタイルの間や、壁のある位置には止まらないようにします。
FriendsMakerクラスと、Friendクラスを作って、迷路の中に仲間を散らばるように配置します。
プレイヤーが、迷路の中にいる仲間に出会うと、プレイヤーの後ろをついてくるようにします。
プレイヤーの動きを更に変化させるにあたり、Playerクラスの更新処理にStateパターンを適用します。Stateクラスの派生クラスで、Playerクラスの提供するメソッドを呼び出せるようにするため、Stateクラスの親クラスであるStateComponetの親であるActorクラスのオブジェクトへのポインタを、dynamic_castを使って、Playerクラスのオブジェクトへのポインタにします。
Stairsクラスを作成して、プレイヤーが連れている仲間を逃がす階段を表示します。
プレイやが仲間を連れている状態で階段に到達すると、後ろに連れている仲間が、階段から脱出するようにします。
仲間が全員脱出すると、フロアが自動的に切り替わり、新しい迷路が表示されるようにします。また、プレイヤーが歩く音や、仲間がプレイヤーの後ろについた音などの、効果音も追加します。
得点表示を追加して、仲間が階段から脱出すると得点がアップするようにします。得点は、一人一人逃がすより、一度の多くの仲間を逃がした方が高得点を得られるようにします。
プレイヤーは、後ろについてくる仲間の場所には移動できないようにします。そうすることで、多くの仲間を連れている場合、壁と仲間に囲まれ身動きができない状態に陥る危険が出てきます。身動きできなくなるとゲーム―オーバーにします。また、一定のフロアまで進み、そのフロアの仲間を全員脱出させたならばゲームクリアとします。
高得点を狙う場合は、ゲームオーバーにならない様に、出来るだけ多くの仲間を後ろに従える必要があります。どの仲間から、後に従えるようにするかを考えるゲームになります。