動作確認はこちらからどうぞ。

前回は迷路をつくる部分だけをやりましたが、今回はパックマンを動かすためのclassを作成します。

が、そのまえにやっておくことがあります。

まず、パックマンやモンスターを表示するときに必要なイメージファイルの準備です。これは素材が公開されていたのでこれをそのまま使います。

それからパックマンやモンスターの移動方向や座標を管理する手段が必要です。そのためのクラスを示します。

ではPacmanクラスを示します。

クラス内でやっていることはパックマンの移動と描画に関することと、ゲーム開始時にパックマンを初期位置に戻す処理です。パックマンが移動して餌を食べたり、モンスターと接触したときの処理はここでは書いていません。パックマンだけで自己完結することのみを書き、他のオブジェクトと関係することはクラスの外部でおこないます。

パックマンの進行方向は変数Directに代入しておき、Move関数が呼ばれるたびにパックマンの座標を変更します。XY座標はパックマンの中心部分の座標です。ところで進行方向を管理する変数がDirect、NextDirect、PrevDirectと3種類もあるのですが、これには理由があります。

移動中にキー操作でパックマンの進行方向を変えるのですが、現在パックマンが存在する場所では方向転換できない場合があります。そこでとりあえずNextDirectに代入しておき、パックマンが交差点やT字路(正しい日本語では丁字路(ていじろ)と呼ぶらしい)に到達して進路変更できるようになってからDirectに代入します。

また壁にぶつかった場合、パックマンはそれ以上、その方向に移動することはできません。このようなときはDirect.Noneを代入しています。

パックマンのイメージの描画は進行方向によって変わります。GetImageFromDirect関数でこれを求めているのですが、Direct == Direct.NoneのときはGetImageFromDirect関数にDirect.Noneを渡すと見当外れなイメージが返されるので、そのときのために前回移動に成功した方向をPrevDirectに保存しています。Direct == Direct.NoneのときはGetImageFromDirect関数にPrevDirectを渡して、パックマンを描画するときのイメージを求めています。

移動できるかどうかはパックマンの現在の座標から調べることができます。モンスターについても同じことがいえるので、それを判断する関数はクラスの外に書いています(後述)。パックマンもモンスターも移動するキャラクタなのでベースになるクラスを作成して、これを継承してPacmanクラスとMonsterクラスをつくるという方法のほうがよかったのかもしれませんが・・・。

次に指定された進行方向に本当に移動できるのかを調べる関数を示します。

長いですが、迷路上の座標から東西南北に移動できるかどうかを調べているだけです。