【发布时间】:2016-10-01 04:59:18
【问题描述】:
我正在为一个学校项目制作一个基于文本的游戏,但我发现自己遇到了一个非常愚蠢的问题。 这个概念很简单,有一张地图、一个玩家、一些怪物和一些物品。 对于地图数据结构,我决定使用具有 unicode 内容的 char 的 2d 数组。 最重要的是,我有一个相机,它有一个半径。玩家永远不会在屏幕上移动,它有一个 x 和 y,但屏幕上的运动是相机本身。这工作得很好,除非我到达角落或任何外墙。 我让我的相机这样做
int size = cameraSize/2;
int top = player.GetY() - size, bottom = player.GetY() + size;
char[,] camera = new char[cameraSize, cameraSize];
Console.SetCursorPosition(0,0);
for (int i = top; i < bottom; i++)
{
for (int j = top; j < bottom; j++)
{
camera[i, j] = map.ReMapPosition(i, j);
Console.Write(camera[i,j]);
}
Console.Write("\n");
}
Console.SetCursorPosition(cameraSize,cameraSize);
Console.Write(player.GetPlayerChar());
我的 'cameraSize' 在类的开头声明,并在调用构造函数时填充
private int cameraSize;
cameraSize = difficulty.GetCameraSize();
“难度”类与我的问题无关。 我的问题本身是,当我到达边界墙时,我无法让玩家定位在中心,因为从阵列中没有任何东西可以得到,因为这些是负位置。
【问题讨论】:
-
假设在负坐标处存在 一个值,您可以读取该值而不会出现越界异常。您希望该值是多少?
-
一个简单的空白区域就可以了,我只需要能够让玩家保持居中,但也能够走到角落并靠近墙壁。
-
好的。下一个问题。为什么你有一个
camera数组?你写入它,你读出它,为什么你需要一个数组?为什么不只是一个简单的char变量? -
说实话,这是我尝试解决问题两个多小时的结果......
-
好的,然后停下来,退后一步,重新思考问题,而不是随意尝试。当坐标有效时,您需要一种行为 - 获取该地图坐标处的值 - 如果坐标无效,则需要另一种行为 - 获取空格。 这是一个方法的规范,所以写那个方法。或者,更确切地说是两种方法。一个应该叫做
IsValid,它应该接受一个坐标和一个地图,并返回一个布尔值。另一个应该叫GetMapValue,它应该带一个坐标、一张地图,然后叫IsValid。你知道这将如何运作吗?