BestAns

路漫漫其修远兮,吾将上下而求索

VC绘图/游戏简易教程--8:用函数简化相同图案的制作

教程总目录:https://www.codeabc.cn/bestans/post/concise-lesson-contents

实际中有许多类似的图案,如果一一单独绘制,太麻烦。于是,我们需要一个公用的绘制过程,就是函数。

例如,我们需要画5个三角形,位于不同的位置。我们可以将绘制单个三角形的过程写成函数,函数内是一个独立的程序段,这个绘制过程很简单。
然后,在需要绘制的时候,调用这个函数即可。可以通过参数来解决细微差异(图案的坐标、颜色等),例如:

#include <graphics.h>
#include <conio.h>

// 在坐标 (x,y) 处,用颜色 c 绘制三角形
void sanjiaoxing(int x, int y, int c)
{
	// 设置画线颜色
	setlinecolor(c);

	// 画三角形的三条边
	line(x, y, x+50, y);
	line(x, y, x, y+50);
	line(x+50, y, x, y+50);
}

int main()
{
	initgraph(640, 480);	// 初始化图形窗口

	sanjiaoxing(100, 100, RED);
	sanjiaoxing(120, 160, BLUE);
	sanjiaoxing(140, 220, GREEN);
	sanjiaoxing(160, 120, BLUE);
	sanjiaoxing(160, 160, GREEN);
	sanjiaoxing(220, 140, GREEN);

	_getch();				// 按任意键继续
	closegraph();			// 关闭图形窗口
	return 0;
}

再结合循环等控制条件,就能绘制更复杂漂亮的图案了。试试运行下面程序,理解一下函数的用处:

#include <graphics.h>
#include <conio.h>

void sanjiaoxing(int x, int y, int color)
{
	// 设置画线颜色
	setlinecolor(color);

	// 画三角形的三条边
	line(x, y, x+10, y);
	line(x, y, x, y+10);
	line(x+10, y, x, y+10);
}

int main()
{
	initgraph(640, 480);	// 初始化图形窗口

	for(int x = 0; x < 640; x += 10)
		for(int y = 0; y < 480; y += 10)
			sanjiaoxing(x, y, RGB(x*255/640, y*255/480, 0));

	_getch();				// 按任意键继续
	closegraph();			// 关闭图形窗口
	return 0;
}

运行效果:

本节作业:

1. 绘制 Windows 自带游戏“扫雷”的初始界面。

2. 这个作业有点独特,仔细看下面这个数学过程:

  1. 在二维平面上随机生成 3 个点 P[0]、P[1]、P[2];
  2. 随机生成 1 个点 P;
  3. 绘制点 P;
  4. 随机生成 [0, 2] 内的整数 n;
  5. 令 P = P 与 P[n] 的中点;
  6. 重复执行步骤 (3)~(5) 三万次。

问题是:以上步骤执行完以后,这三万个点在屏幕上会是个什么情况?有规律吗?很难想出来吧,那就写个程序把这个过程模拟一下,看看究竟是什么~~

分享到

评论 (1) -

  • 既然你是在第11课才讲随机函数,那么为什么你现在给我们的作业里面就包含了“随机”啊。