現在、私はコンソールゲーム(ローグライク)を作成していますが、衝突イベントについてアドバイスが必要でした。プレーヤー(@)の横に壁(▒)があるかどうかを確認する必要があります。壁がある場合は、プレーヤーがその方向に移動することを禁止します。C#のコンソールでこれを行う方法について誰かが何かアイデアがありますか?
必要に応じて、コードの一部を提供できます。
現在、私はコンソールゲーム(ローグライク)を作成していますが、衝突イベントについてアドバイスが必要でした。プレーヤー(@)の横に壁(▒)があるかどうかを確認する必要があります。壁がある場合は、プレーヤーがその方向に移動することを禁止します。C#のコンソールでこれを行う方法について誰かが何かアイデアがありますか?
必要に応じて、コードの一部を提供できます。
ふたつのやり方:
なぜそんなに難しいのかわかりません、多分あなたは説明することができます;)
まず最初に-私はコンソールゲームの経験がありませんが、UIを更新する前に、ユーザーがいる「マップ」を含むデータモデルを用意し、データモデルでチェックする必要があるようです(コンソール)
これを処理する方法は複数あります。ゲームマップを表す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
}
コンソールアプリケーションを作成するかどうかは関係ないと思います。衝突を検出するのはViewの目的ではないからです。それはあなたのゲームモデルの目的です。ビューに表示されたばかりのモデル。内部の壁の構造は、2次元の配列としても説明できます。現在のプレイヤーの座標もモデルに保存されています。したがって、次のように見える場所に移動する可能性を検出します。
public void IsPossibleMoveTo(int x, int y)
{
return mazeArray[x, y] == null;
}