我写了一个格子涂色游戏,虽然程序正确,但是不太明白floodfill的原理,为什么程序中的floodfill函数在鼠标点击了绘图板上的颜色以后,在进行格子填充的时候,填充的是当前选中颜色而不是floodfill函数中的WHITE白色
#include<graphics.h>
#include<conio.h>
int main() {
initgraph(1280, 960);
LOGFONT f;
gettextstyle(&f); // 获取当前字体设置
f.lfHeight = 48; // 设置字体高度为 48
_tcscpy_s(f.lfFaceName, _T("黑体")); // 设置字体为“黑体”(高版本 VC 推荐使用 _tcscpy_s 函数)
f.lfQuality = ANTIALIASED_QUALITY; // 设置输出效果为抗锯齿
settextstyle(&f); // 设置字体样式
outtextxy(540, 30, _T("格子涂色"));
for (int x = 320, y = 360; y < 1000; x += 40, y += 40) {
for (int b = 100, n = 140; n < 460; b += 40, n += 40) {
rectangle(x,b,y,n);
}
}
float H, S, L; // 定义 HSL 颜色模型的 3 个变量
H = 0;
S = 1;
L = 0.5f;
for (int i = 300; i != 1000; ++i) // 绘制调色板颜色
{
L += 0.000000085f;
S -= 0.0013f;
setlinecolor(HSLtoRGB(H, S, L));
line(i, 450, i, 500);
if (i % 50 == 0)
H = H + 20;
}
MOUSEMSG m;
while (true) {
m = GetMouseMsg();
switch (m.uMsg)
{
case WM_LBUTTONDOWN:
//判断鼠标单击的位置
if (m.x > 300 && m.x < 1000 && m.y>450 && m.y < 1000)
setfillcolor(getpixel(m.x, m.y)); //获取点的颜色
if (m.x > 320 && m.x < 1000 && m.y>100 && m.y < 460)
floodfill(m.x, m.y, WHITE); //填充该点所在的封闭区域
break;
}
}
_getch(); // 按任意键继续
closegraph(); // 关闭图形窗口
return 0;
}