第4章 旋转蛇

童晶老师《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

分享到

添加评论