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

教程总目录:http://www.easyx.cn/skills/View.aspx?id=45 (里面包括VC下的graphics.h的配置方法)

 

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

例如,我们需要画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);
}

void 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();			// 关闭图形窗口
}

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

#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);
}

void 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();			// 关闭图形窗口
}

运行效果:


本节作业:

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) 三万次。

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

更新时间:2010/5/8