我试图在C#中制作一个roguelike,我需要制作一个小地图,并设置一个循环来检查是否按下了w / s / a / d来移动玩家;但是我在检测墙壁时遇到了问题;让我们说我想知道在移动之前是否有一个右边的墙,我得到了玩家的位置,我检查该位置的右侧是什么,如果它' sa& #39;#',我不让玩家移动,因为它应该是一堵墙。
但问题是,在控制台中,如何检查坐标,例如"(15,2)"包含#'#'炭吗
是否有更简单的方法来检查给定坐标是否包含该字符?
怎么样?因为我尝试了,但我无法在控制台的某个坐标中获取字符。
类似的东西:
static bool wallcheck_x(int xpos) {
xpos++;
//Now, it should GET the char allocated in xpos++;
if (/*char that's in xpos++ */ == '#')
{
return true; //it's a wall
}
return false; //it's not a wall
}
答案 0 :(得分:3)
你不应该这样做。你应该有一些映射到控制台中显示内容的东西,我假设你甚至可以看到地图开始。当玩家移动时,您应该根据地图检查它,不控制台中显示的内容。
所以例如......
如何检查坐标,例如“(15,2)”是否包含'#'字符?
请勿在(15,2)检查控制台中的内容,但请检查地图显示控制台中#
的内容。这样就容易多了。
但是,让我说我在一个多维数组中做了地图......然后我如何在控制台中打印数组?
使用Google,伙计。这是我从this question中提取的内容:
int rowLength = arr.GetLength(0);
int colLength = arr.GetLength(1);
for (int i = 0; i < rowLength; i++)
{
for (int j = 0; j < colLength; j++)
{
Console.Write(string.Format("{0} ", arr[i, j]));
}
Console.Write(Environment.NewLine + Environment.NewLine);
}
这样做是逐行遍历数组,打印行中的每个字符。当它到达行的末尾时,它会打印一个新行并开始打印新行。您的数组可能是一个代表地图的二维字符数组。同样,您可以通过以下方式跟踪玩家的位置:
int playerXPos;
int playerYPos;
您需要在角色移动时更新这些内容。所以,相信这个片段,你可以检查玩家是否已经撞墙:
if (arr[playerXPos, playerYPos] == '#')
{
// player has collided with a wall
}
else
{
// player has NOT collided with a wall
}
虽然拥有一个实际的播放器数据结构会更具可扩展性,但这似乎很适合你。
答案 1 :(得分:1)
无法访问任何代码(你应该真的发布这样的帮助),我假设你会这样做:
if (map[player.X, player.Y] == '#')
{
// player has collided with a wall
}
else
{
// player has NOT collided with a wall
}
此代码假定map
是包含地图的多维数组。