我是SDL2的新手,作为我的第一个项目,我只想创建一个棋盘。事实证明,这比我想象的要难。
我已经尝试了很多不同的方法来画棋盘的区域。
,这是当前状态:
#include
int main()
{
bool quit = false;
SDL_Event event;
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window = SDL_CreateWindow("Chess", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, 680, 680, 0);
SDL_Renderer *render = SDL_CreateRenderer(window, -1,
SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
for (int x = 0; x > 3; x++) {
for (int y = 0; x > 8; x++) {
SDL_Rect rect;
rect.x = x*10;
rect.y = y*10;
rect.w = 128;
rect.h = 128;
SDL_SetRenderDrawColor(render, 159, 84, 8, 255);
SDL_RenderFillRect(render, &rect);
}
}
SDL_RenderPresent(render);
while (!quit) {
SDL_WaitEvent(&event);
switch (event.type) {
case SDL_QUIT:
quit = true;
break;
}
}
SDL_Quit();
return 0;
}当我使用时,没有矩形想要显示
在一个循环中。你知道为什么会这样吗?
干杯!
发布于 2021-03-01 23:03:07
for循环中有多个错误。
您必须更改for循环中的条件。迭代变量(x和y)都从0开始,但是运行foor循环的条件是它们大于3或8,因此它们不会被执行。将其更改为小于该值(<而不是>)
您必须更改第二个for循环的迭代变量。您创建了y,但条件和值的更改是针对x的
您的矩形是128x128大小,但是您将循环中的x和y乘以10,这意味着您的矩形将会重叠。你必须将它至少乘以128。
如果你看一个国际象棋棋盘,从左上角开始,从左到右,每隔一段时间就会着色一次。要实现这一点,你必须从左上角开始,遍历每个单元格,然后跳到下一行。每隔一段时间,你必须绘制一个矩形。
这是你的算法的一个稍微编辑过的版本:
int startPos = 0;
for (int y = 0; y < 8; y++) {
for (int x = startPos; x < 3; x+=2) {
SDL_Rect rect;
rect.x = x * 129;
rect.y = y * 129;
rect.w = 128;
rect.h = 128;
SDL_SetRenderDrawColor(render, 159, 84, 8, 255);
SDL_RenderFillRect(render, &rect);
}
startPos = 1 - startPos;
}说明:在第一行中,第一个字段将是彩色的,因为startPos是0。由于每一行都具有与其前一行相反的起始位置,因此在绘制一行的最后一个单元格时,我们必须立即更改startPos。由于我们只需要每隔一次绘制一次单元格,因此每次迭代都必须将x增加2
希望这对你有一点帮助
https://stackoverflow.com/questions/66424009
复制相似问题