如何在C#控制台中获取给定坐标中的字符?

时间:2013-11-01 17:44:44

标签: c# windows console-application

我试图在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
    }

2 个答案:

答案 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是包含地图的多维数组。