目前我正在制作一个控制台游戏(rougelike),我需要一些关于碰撞事件的建议。我需要判断玩家 (@) 旁边是否有墙 (▒),如果有,则不允许玩家朝那个方向移动。有没有人对我如何使用 C# 中的控制台执行此操作有任何想法?
如果需要,我可以提供一些我的代码。
目前我正在制作一个控制台游戏(rougelike),我需要一些关于碰撞事件的建议。我需要判断玩家 (@) 旁边是否有墙 (▒),如果有,则不允许玩家朝那个方向移动。有没有人对我如何使用 C# 中的控制台执行此操作有任何想法?
如果需要,我可以提供一些我的代码。
两种方式:
我不明白为什么这么难,也许你可以解释一下;)
首先 - 我对控制台游戏的经验为零,但在我看来,您应该有一个包含用户所在“地图”的数据模型,并在更新 UI(控制台)之前在数据模型中检查它
有多种方法可以处理这个问题。我希望你有一个代表游戏地图的二维数组。一种简单的方法是添加一个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
}
我认为您是否编写控制台应用程序并不重要。因为 View 的目的不是检测碰撞。这是您的游戏模型的目的。模型刚刚显示在视图上。内壁结构甚至可以描述为二维阵列。当前玩家坐标也存储在模型中。因此检测移动某些地方的可能性可能如下所示:
public void IsPossibleMoveTo(int x, int y)
{
return mazeArray[x, y] == null;
}