前回はフロアしか作成しなかったので今回はプレイヤーを生成して移動させる処理をおこないます。

プレイヤーを描画する

まずプレイヤーの描画ですが、うまく絵が描けなかったので鍵穴のようなマークを描画してこれをプレイヤーとします。

プレイヤーの移動

次にプレイヤーを移動させる処理ですが、Form1クラスのなかにTimerをつくって座標の変更と描画の処理をおこないます。Form1クラス側の処理は以下のとおりです。

GameManagerクラスにUpdateメソッドを作成して、ここでプレイヤーの座標を変更します。

方向キーが押されているときだけその方向にプレイヤーを移動させます。

本当に移動できるかどうか調べる

GameManager.Updateメソッドが呼び出されるとどのキーが押されているかを調べてその方向にプレイヤーを移動させるのですが、その前に本当にその方向に移動することができるのかを調べる必要があります。

ハシゴのないところで上下の階に移動することはできません。ハシゴがあるかどうかはコンストラクタ内で取得したLadderPositionsで知ることができます。ちょうどその位置でなくても8ピクセル以内のズレであれば移動できるものとします。

ハシゴの上り下りをしているときに左右に移動することはできません。またフロアの左右の端よりも向こうに水平移動することもできません。Y座標がフロアのY座標から8ピクセル以内のズレであれば水平移動できるものとします。

実際に移動させる

方向キーが押されていてその方向に移動できる場合は移動させます。移動させる処理を示します。

CanMove~メソッドではX座標がハシゴの座標と完全に一致していなくても上り下りできます。そこでズレがあった場合、修正して移動させます。これで常にハシゴの中央を上り下りできるようになります。

タイマーによってMovePlayerメソッドが呼び出されると同時に再描画がおこなわれるので最初に示したDrawPlayerメソッドによって移動したプレイヤーが描画されます。

敵の生成と移動

次に敵を生成して移動させます。いまは端までくると方向を方向転換して左右に移動するだけです。

Enemyクラス

敵を移動させる

GameManager.Updateメソッド内で敵を移動させる処理をおこないます。

Form1クラス内でGameManager.DrawEnemiesメソッドをよびだして描画します。