我正在尝试编写一个简单读取多维数组的程序(使用'for'循环),如果遇到某个字母(如'A'),它会绘制一个矩形形状(即时使用画布库和绘制形状的函数。)
我正在尝试使用画布绘制一个类似迷宫的地图。但由于一些奇怪的原因,它并不是正确的。我认为这是读取数组的问题,我不知道为什么。
来自文本文件的多维数组读取输入,如下所示(示例): 这是我尝试使用画布创建的迷宫地图的布局。
AAAAAAAAAAAAAAAAAAAAA
A.........A.........A
A.........A.........A
A...............AAAAA
AAAAA...............A
AAAAAAAAAAAAAAAAAAAAA
当然'A'将替换为填充矩形以表示墙
''。'代表道路。
这是我的代码:
void MazeGame::DrawMap(Canvas &canvas, char (&map)[20][26])
{
double drawx = 200;
double drawy = 200;
for(int i = 0; i < 20; i++)
{
for(int j = 0; j < 26; j++)
{
if(map[i][j] == 'A')
{
canvas.DrawFillRect(drawx+10, drawy, 10, 10);
}
if(map[i][j] == '.')
{
map[i][j] = ' ';
}
}
}
}
我在课堂上写了这个函数。
我将两个'double'变量drawx和drawy初始化为200.这被认为是将绘制形状的x和y原点坐标。 当然,正在读取字符数组时,x&amp; y坐标必须相应地移动到迷宫布局在文本文件中的显示方式,否则,在绘制形状时,它将简单地绘制或覆盖先前绘制的形状。我不想那个
我觉得这很简单,但输出让我很困惑。 有什么建议吗?
答案 0 :(得分:2)
你没有递增 drawx 和 drawy ,所以程序总是在(210,200)处绘制。
canvas.DrawFillRect(10*i + drawx, j*10 + drawy, 10, 10);
另外,您可能需要查看:http://en.wikipedia.org/wiki/Single_responsibility_principle
并将点替换模块移动到另一个函数中。
答案 1 :(得分:1)
这样的事情怎么样:
if(map[i][j] == 'A')
{
canvas.DrawFillRect(i * 10 + drawx, j * 10 + drawy, 10, 10);
}
这样您就可以翻译每个矩形的x和y坐标。
以这种方式思考:
where:
i = 0, x = 0 * 10 + 200 = 200
i = 1, x = 1 * 10 + 200 = 210
i = 2, x = 2 * 10 + 200 = 220
i = 3, x = 3 * 10 + 200 = 230
ect...
答案 2 :(得分:0)
你永远不会在(210,200)之外的任何其他位置画任何东西。
绘图时,您应该执行以下操作:
canvas.DrawFillRect(drawx + 10 * j, drawy + 10 * i, 10, 10)
假设数组以标准[height] [width]形式表示。