C#控制台碰撞

时间:2012-07-25 18:24:07

标签: c# console-application collision-detection

目前我正在制作一个控制台游戏(类似胭脂),我需要一些关于碰撞事件的建议。我需要告诉玩家(@)旁边是否有一个墙(▒),如果是这样,则不允许玩家朝那个方向移动。 有没有人对我如何用C#中的控制台做这个呢?

如果需要,我可以提供一些代码。

4 个答案:

答案 0 :(得分:0)

两种方式:

  • 将所有墙壁的位置保持在HashSet或类似物中。
  • 检查玩家想去的方向,然后检查是否有墙。

我不明白为什么这么难,也许你可以解释一下;)

答案 1 :(得分:0)

首先 - 我没有使用控制台游戏的经验,但在我看来,你应该有一个包含用户所在的“地图”的数据模型,并在更新UI(控制台)之前在数据模型中检查它

答案 2 :(得分:0)

有多种方法可以解决这个问题。我希望你有一个代表游戏地图的二维数组。一种简单的方法是添加一个方法CheckMove,用于验证尝试的移动。如果无效,则不执行移动。这是一种伪代码示例。

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
}

答案 3 :(得分:0)

我认为你是否编写控制台应用程序并不重要。因为View的目的不是检测碰撞。这是你的游戏模型的目的。模型刚刚显示在视图上。内部壁结构甚至可以描述为二维阵列。当前玩家坐标也存储在模型中。因此,检测移动某些地方的可能性如下:

public void IsPossibleMoveTo(int x, int y)
{
    return mazeArray[x, y] == null;
}