2005年5月第11卷第2期安庆师范学院学报(自然科学版)JournalofAnqingTeachersCollege(NaturalScience)May.2005Vol.11NO.ΞΞΞ用C语言编写屏幕保护程序胡则辉,范容(杭州师范学院信息工程学院,浙江杭州310018)摘要:图形程序是计算机程序中很重要的内容,我们可以利用C语言中的图形函数编写出风格迥异的屏保程序。本文通过具体程序,介绍了用C语言编写屏幕保护程序的基本思路和方法。关键词:C语言;屏幕保护程序;编程;输出:TP312文献标识码:A:1007-4260(2005)02-0016-04C语言是世界上应用最广泛的几种语言之一,应用C语言可以对数学问题求解或实现其它应用编程。屏幕保护程序可以用C语言来实现,通过编写自己喜爱的屏幕保护程序可以加深对C语言的了解,同时可以提高编程者应用编程语言解决实际问题的能力,培养编程者敏锐的观察力和极强的创造力。基本理论1TurboC提供了非常丰富的图形函数1,我们使用这些图形处理函数可以实现各种图形功能,所有的图形函数的原型均在Graphics.h中。可以利用这些函数来实现图形模式的初始化,从而建立独立的图形程序。屏幕保护程序一般都是一些简单的动画,我们可以利用C语言中的随机函数和延时函数来实现动态效果。下面我们简要介绍一下编写屏幕保护程序中常用的几个函数:(1)在屏幕作图之前,我们必须根据显示适配器的种类将显示器设置成为某种图形模式,设置屏幕为图形模式,可以用下列图形初始化函数:Voidinitgraph(intfar3driver,intfar3driver,charfar3path);其中driver和mode分别表示图形驱动器和模式,path是指图形驱动器所在的目录路径。(2)有时我们并不知道所用的图形显示器适配器的类型,或者需要将编写的屏保程序用于不同的图形驱动器,我们必须对显示器硬件作自动检测,TurboC中提供了自动检测显示器硬件的函数,其调用格式为:Voiddetectgraph(int3driver,int3mode);为了实现此功能,TC中还提供了一种更简单的方法,就是用driver=DETECT语句后再跟initgraph()函数就可以了。(3)为了获得丰富多彩的视觉效果我们需要对屏幕颜色进行设置,图形模式下常用的屏幕颜色设置函数有:Setbkcolor()函数:该函数用来设置图形屏幕的背景颜色,其原型为:Voidsetbkcolor(intcolor)Setcolor()函数:该函数用来设置作图颜色。其原型为:Voidsetcolor(intcolor)收稿日期:2004-12-27作者简介:胡则辉(1979-),男,浙江杭州人,杭州师范学院计算机教育专业研究生。ΞΞΞ2实例实现步骤2.1满天星当程序运行后,会看到屏幕上随机地画出五颜六彩的小圆点,按任意键退出程序。(效果见图1)图1实例1效果图图2实例2的输出设计思想:本例是一个综合性的实例,主要讲解动画的制作,用while循环控制按任意键结束,利用随机函数产生点的颜色并将随机函数作为画圆的参数与延时函数配套使用,得到较迷幻的动画效果。简单步骤:1)图形初始化2:initgraph(gdriver,gmode,”c:\\tc3\\bgi”);2)设置不同颜色在不同的地方画圆:setcolor(random(255));ƒ3设置随机颜色3ƒcircle(random(900),random(500),random(3));ƒ3delay(10);ƒ3延时10毫秒3ƒ3)源代码与注释:随机地画不同的圆3ƒƒ3满天星3ƒ####include<graphics.h>include<stdlib.h>include<conio.h>include<dos.h>ƒ3定义库函数3ƒvoidmain(){intgd=DETECT,gm,i;ƒ3自动检测3ƒinitgraph(gd,gm,"c:\\tc3\\bgi");while(!kbhit()){for(i=0;i<=600;i++)ƒ3图形初始化3ƒsetcolor(random(255));ƒ3设置颜色3ƒcircle(random(900),random(500),random(3));ƒ3画圆3ƒdelay(10);}cleardevice();delay(5);}}2.2空中彩带ƒ3延迟10毫秒3ƒƒ3清除屏幕3ƒ当程序运行后,会看到一个小块在屏幕上不断地旋转,每次都留下不同颜色的轨迹,就如空中的一·18·安庆师范学院学报(自然科学版)2005年条彩色丝带。(见图2)设计思想:由于这个动画有动态和静止两面部分,首先用for循环绘制静止图像做为背景,然后绘制动态部分。为了完成这一过程我们需要调用如下三个函数:Unsignedfarimagesize(intx1,inty1,intx2,inty2);Voidfargetimage(intx1,inty1,intx2,inty2,voidfar3mapbuf);Voidfarputimage(intx,inty,void3mapbuf,intop);函数imagesize():测试左上角为(x1,y1)右上角为(x2,y2)的图形屏幕...