1

パックマン ゲームを作成していますが、現在、右、左、上、または下の矢印キーを押すと、パックマンがマップの許可された座標内で移動しています。キーを押している間だけ動きます。矢印を押し続ける必要がないように、マップの壁にぶつかるまでキーを押すと自動的に移動するようにするにはどうすればよいか考えていました。

これは

   if (e.KeyCode == Keys.Down)
        {
            if (coordinates[(pac.xPosition + 16) / 20, (pac.yPosition + 20) / 20].CellType == 'o'
                || coordinates[(pac.xPosition + 16) / 20, (pac.yPosition + 20) / 20].CellType == 'd'
                || coordinates[(pac.xPosition + 16) / 20, (pac.yPosition + 20) / 20].CellType == 'p')
            {

               pac.setPacmanImage();
                pac.setPacmanImageDown(currentMouthPosition);
                checkBounds();

            }

セル タイプ o、p、および d は、マップ内で移動できる唯一のセルです。これらのセルは、テキスト ファイル内に描画されています。

私が尋ねていることを理解するのが難しい場合は申し訳ありませんが、それはかなり簡単な説明だと確信しています.

前もって感謝します。

4

1 に答える 1

1

キー押下中にパックマンを移動する代わりに、キー押下を使用して方向を設定し、キー押下ロジックの外でパックマンを移動します。

enum Direction {Stopped, Left, Right, Up, Down};
Direction current_dir = Direction.Stopped;

// Check keypress for direction change.
if (e.KeyCode == Keys.Down) {
    current_dir = Direction.Down;
} else if (e.KeyCode == Keys.Up) {
    current_dir = Direction.Up;
} else if (e.KeyCode == Keys.Left) {
    current_dir = Direction.Left;
} else if (e.KeyCode == Keys.Right) {
    current_dir = Direction.Right;
}

// Depending on direction, move Pac-Man.
if (current_dir == Direction.Up) {
    // Move Pac-Man up
} else if (current_dir == Direction.Down) {
    // Move Pac-Man down
} else if (current_dir == Direction.Left) {
    // Move Pac-Man left
} else if (current_dir == Direction.Right) {
    // You get the picture..
}

BartoszKP のコメントが推奨するように、Pac-Man のプライベート変数で方向を設定する必要があります。

于 2014-03-29T01:38:38.060 に答える