0

我正在尝试编写一个简单地读取多维数组(使用'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] = ' ';  
            }
        }
    }
}

我在课堂上写了这个函数。

我将两个“双”变量drawx和drawy初始化为200。这被认为是绘制形状的x和y原点坐标。当然,在读取字符数组时,x & y 坐标必须根据迷宫布局在文本文件中的显示方式进行移动,否则,在绘制形状时,它会简单地覆盖或覆盖先前绘制的形状。我不想要那个

我觉得这很简单,但输出真的让我很困惑。有什么建议么?

4

3 回答 3

2

您没有增加drawxdrawy,因此程序始终在 (210,200) 处绘制。

canvas.DrawFillRect(10*i + drawx, j*10 + drawy, 10, 10);

另外你可能想看看:http ://en.wikipedia.org/wiki/Single_responsibility_principle

并将点替换模块移动到另一个函数中。

于 2013-05-07T16:46:01.420 回答
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...
于 2013-05-07T16:46:17.903 回答
0

您永远不会在 (210, 200) 以外的任何其他位置绘制任何东西。

绘图时,您应该执行以下操作:

canvas.DrawFillRect(drawx + 10 * j, drawy + 10 * i, 10, 10)

假设数组以标准 [height][width] 形式表示。

于 2013-05-07T16:46:57.913 回答