我对SDL2还是个新手,我的第一个项目是创建一个棋盘,事实证明这比我想象的要难。
我已经尝试了很多不同的方法来绘制SDL_RenderDrawRect
棋盘的字段,这是当前的状态:
#include <SDL2/SDL.h>
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;
}
当我在循环中使用SDL_RenderDrawRect
时,没有矩形出现。你知道为什么吗?
干杯!
2条答案
按热度按时间wqnecbli1#
for循环中存在多个错误。
你必须改变for循环中的条件。两个迭代变量(x和y)都从0开始,但是你运行foor循环的条件是它们大于3或8,所以它们不会被执行。把它改为小于这个值(〈而不是〉)
你必须改变第二个for循环的迭代变量,你创建了y,但是条件和值的改变是针对x的
你的矩形是128x128大,但是你把循环中的x和y乘以10,这意味着你的矩形会重叠。你必须把它乘以至少128。
如果你看一个国际象棋棋盘,从左上角开始,从左到右,每隔一个区域都是彩色的。要实现这一点,你必须从左上角开始,遍历每个单元格,然后跳到下一行。每隔一个区域,你必须画一个矩形。
这是一个稍微编辑过的算法版本:
说明:在第一行中,第一个字段将被着色,因为startPos为0。由于每一行的开始位置都与其前一行相反,因此我们必须在绘制完一行的最后一个单元格后立即更改startPos。由于我们只需要每隔一个单元格绘制一次,因此每次迭代都必须将x增加2
希望这对你有点帮助
qxsslcnc2#
虽然你的问题解决了,离开这个人谁面临这样的问题(无论如何它很容易使董事会,我写了这段代码)这将创建一个标准的8x8棋盘