第4章 旋转蛇
2021-2-23 ~ 2021-4-2
(0)
童晶老师《C和C++游戏趣味编程》一书各个章节的案例代码,每章案例逐步利用学到的语法知识。
本章我们将绘制非常神奇的错觉图片,静止的圆盘看起来却有在转动的错觉。
首先学习绘制扇形函数和RGB颜色模型,绘制了一个基本单元;然后学习了for循环语句和循环的嵌套,实现了旋转蛇的绘制;最后学习了HSV颜色模型,并利用随机函数和按键切换,实现了丰富多变的旋转蛇错觉图案。
源码:
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <time.h>
int main()
{
float Pi = 3.14159; // 圆周率Pi
initgraph(800,600); // 打开一个窗口
setbkcolor(RGB(128,128,128)); // 设置背景颜色为灰色
cleardevice(); // 以背景颜色清空画布
srand(time(0)); // 随机种子函数
int centerX,centerY; // 圆心坐标
int radius; // 圆半径
int i;
float offset; // 同一半径各组扇形之间的角度偏移量
float totalOffset; // 不同半径之间的角度偏移量
while(1) // 重复执行
{
for (centerX = 100;centerX<800;centerX=centerX+200) // 对圆心x坐标循环
{
for (centerY = 100;centerY<600;centerY=centerY+200) // 对圆心y坐标循环
{
totalOffset = 0; // 同一半径各组扇形之间的角度偏移量
float h = rand()%180; // 随机色调
COLORREF color1 = HSVtoRGB(h,0.9,0.8); // 色调1生成的颜色1
COLORREF color2 = HSVtoRGB(h+180,0.9,0.8); // 色调2生成的颜色2
for (radius=100;radius>0;radius=radius-20) // 半径从大到小绘制
{
int left = centerX - radius; // 圆外切矩形左上角x坐标
int top = centerY - radius; // 圆外切矩形左上角y坐标
int right = centerX + radius; // 圆外切矩形右下角x坐标
int bottom = centerY + radius; // 圆外切矩形右下角y坐标
for (i=0;i<20;i++) // 绕着旋转一周,绘制扇形区域
{
offset = i*Pi/10 + totalOffset; // 各组扇形之间偏移的角度
setfillcolor(color1); // 色调1生成的颜色1
solidpie(left,top,right,bottom,offset,2*Pi/60+offset);
setfillcolor(RGB(255,255,255));// 设置填充颜色为白色
solidpie(left,top,right,bottom,2*Pi/60+offset,3*Pi/60+offset);
setfillcolor(color2); // 色调2生成的颜色2
solidpie(left,top,right,bottom,3*Pi/60+offset,5*Pi/60+offset);
setfillcolor(RGB(0,0,0));// 设置填充颜色为黑色
solidpie(left,top,right,bottom,5*Pi/60+offset,6*Pi/60+offset);
}
totalOffset = totalOffset + Pi/20; // 不同半径间角度偏移量为Pi/20
}
}
}
_getch(); // 暂停,等待按键输入
}
return 0;
}
这一章主要讲解了for循环语句、循环嵌套等语法知识,学习了扇形的绘制、颜色的表示与设置,实现了旋转蛇错觉图片的绘制。读者也可以参考本章的思路,尝试绘制其他好玩的错觉图案。
视频教程可以参考这里:https://zhuanlan.zhihu.com/p/188259883
添加评论
取消回复