迭代与绘图
Iteration and Drawing C++
好的,我在程序的某个特定部分卡住了。我只是根据它在二维数组
中的位置来绘制矩形二维数组存储迷宫(在文本/字符形式),我试图用画布绘制。例如,它存储如下:
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像素,所以我只是添加了变量来处理这个问题。你需要做的是根据i
和j
给出的x和y坐标,以10像素的间隔画出矩形。例如:如果j
是2,那么width*j
将给你第三列矩形的x坐标,或者从左边20个像素。变量offsetx
和offsety
用于控制从侧面和顶部开始绘制的距离。width
, height
, offsetx
和offsety
不需要更改,因为它们定义了设置的像素量。i
和j
是这里唯一需要更改的变量,因为它们将字符从数组中取出,并告诉程序在哪里绘制。
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);
}
}
}
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++矢量迭代
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 擦除while循环中迭代的元素
- 实现一个在集合上迭代的模板函数
- 对于set上的循环-获取next元素迭代器
- 在向量内的向量上迭代
- 为什么output_editor Concept不需要output_e迭代器标记
- TSP递归解的迭代形式
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 迭代与绘图