迭代与绘图

Iteration and Drawing C++

本文关键字:绘图 迭代      更新时间:2023-10-16

好的,我在程序的某个特定部分卡住了。我只是根据它在二维数组

中的位置来绘制矩形

二维数组存储迷宫(在文本/字符形式),我试图用画布绘制。例如,它存储如下:

AAAAAAAAAAAAAAAAAAA
A                 A
A                 A
A                 A
A                 A
A                 A
A                 A
AAAAAAAAAAAAAAAAAAA

我的代码是这样写的:

void MazeGame::DrawMap(Canvas &canvas, char (&map)[26][20])
{ 
    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')
                {
                    drawx+=10;
                    drawy+=10;
                    canvas.DrawFillRect(drawx*j, drawy, 10, 10);
                }
            }
        }

表示画布中的参数。DrawFillRect,前两个参数是x &Y坐标/值,最后两个是宽度&矩形长度

我被告知我的错误是我没有修改drawx和drawy,而是修改了I &j.我明白这一点。j需要在DrawFillRect的参数,但我只是没有看到任何其他的方式来写这个没有它似乎修改I &j .

我猜如果我修改drawx &绘制,它会正确绘制迷宫

有什么建议吗?我对c++不是很熟练

我不确定你是否打算开始绘制200像素,所以我只是添加了变量来处理这个问题。你需要做的是根据ij给出的x和y坐标,以10像素的间隔画出矩形。例如:如果j是2,那么width*j将给你第三列矩形的x坐标,或者从左边20个像素。变量offsetxoffsety用于控制从侧面和顶部开始绘制的距离。width, height, offsetxoffsety不需要更改,因为它们定义了设置的像素量。ij是这里唯一需要更改的变量,因为它们将字符从数组中取出,并告诉程序在哪里绘制。

void MazeGame::DrawMap(Canvas &canvas, char (&map)[26][20])
{ 
    double width = 10;  // define the width and height here so that if they need
    double height = 10; // to change, it's all in one place
    double offsetx = 200;
    double offsety = 200;
    for(int i = 0; i < 20; i++)
    {
        for(int j = 0; j < 26; j++)
        {
            if(map[i][j] == 'A')
            {
                canvas.DrawFillRect(width * j + offsetx,
                                    height * i + offsety,
                                    width, height);
            }
        }
    }