0

目前我正在制作一个控制台游戏(rougelike),我需要一些关于碰撞事件的建议。我需要判断玩家 (@) 旁边是否有墙 (▒),如果有,则不允许玩家朝那个方向移动。有没有人对我如何使用 C# 中的控制台执行此操作有任何想法?

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

4

4 回答 4

0

两种方式:

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

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

于 2012-07-25T18:27:14.843 回答
0

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

于 2012-07-25T18:28:32.287 回答
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
}
于 2012-07-25T18:29:27.023 回答
0

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

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