0

現在、私はコンソールゲーム(ローグライク)を作成していますが、衝突イベントについてアドバイスが必要でした。プレーヤー(@)の横に壁(▒)があるかどうかを確認する必要があります。壁がある場合は、プレーヤーがその方向に移動することを禁止します。C#のコンソールでこれを行う方法について誰かが何かアイデアがありますか?

必要に応じて、コードの一部を提供できます。

4

4 に答える 4

0

ふたつのやり方:

  • HashSetなどですべての壁をその位置で保持します。
  • プレイヤーが行きたい方向を確認してから、壁があるかどうかを確認します。

なぜそんなに難しいのかわかりません、多分あなたは説明することができます;)

于 2012-07-25T18:27:14.843 に答える
0

まず最初に-私はコンソールゲームの経験がありませんが、UIを更新する前に、ユーザーがいる「マップ」を含むデータモデルを用意し、データモデルでチェックする必要があるようです(コンソール)

于 2012-07-25T18:28:32.287 に答える
0

これを処理する方法は複数あります。ゲームマップを表す2次元配列があると思います。CheckMove簡単な方法の1つは、試行された移動を検証するメソッドを追加することです。無効な場合、移動は実行されません。これは一種の擬似コードの例です。

public bool CheckMove(int newY, int newX) {
    if (grid[newY][newX] == WALL)
        return false;
    if (newY < 0 || newY > Y_MAX || newX < 0 || newX > X_MAX)
        return false;
    return true;
}

public void Move(int dir) {
    // calc new x & y

    if (!CheckMove(newY, newX)) return;

    // else do the move
}
于 2012-07-25T18:29:27.023 に答える
0

コンソールアプリケーションを作成するかどうかは関係ないと思います。衝突を検出するのはViewの目的ではないからです。それはあなたのゲームモデルの目的です。ビューに表示されたばかりのモデル。内部の壁の構造は、2次元の配列としても説明できます。現在のプレイヤーの座標もモデルに保存されています。したがって、次のように見える場所に移動する可能性を検出します。

public void IsPossibleMoveTo(int x, int y)
{
    return mazeArray[x, y] == null;
}
于 2012-07-25T18:30:25.200 に答える