在一些特殊的C语言动画技术中,可以利用随机函数int random(int num ) 取一个0~num范围内的随机数,经过某种运算后,再利用C 语言的作图语句产生各种大小不同的图形,也能产生很强的移动感。程序dh1.c就是利用随机函数来产生动画应用。该程序运行后,屏幕中间绘出一台微型计算机,微机下方同时显示“computer”的放大字形,在画出微机的小屏幕内,产生各种大小不同、颜色各异的矩形,这些矩形互相覆盖,给人以极强的动画感。
程序中改变x1、x2、y1、y2的值,能将图形移动屏幕的任何位置,改变x、y的值,能将图形放大或缩小。
[例9-7] 动画显示程序DH1.C
- #include<conio.h>
- #inclu]de<stdio.h>
- #include<stdlib.h>
- #include<graphics.h>
- #include<time.h>
- #define X1 260
- #define X2 320
- #define y1 140
- #define y2 180
- #define Xy 16
- int gdrive,gmode,mcolor,ecode;
- struct palettetype palette;
- void initialize(void);
- void rbars(void);
- int main( )
- {
- initialize( ); /*初始化图形系统*/
- /* 显示放大字体*/
- setcolor(YELLOW);
- settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
- settextjustify(CENTER_TEXT,CENTER_TEXT);
- outtextxy((getmaXX( )/2-17),360,"COMPUTER");
- rbars( ); /* 主程序*/
- closegraph( )/*关闭图形系统*/
- return 1;
- }
-
- void initialize(void)
- {
- gdrive=DETECT;
- initgraph (&gdrive,&gmode," ");
- ecode=graphresult( );
- if(ecode!=0)
- {
- printf("Graphice Error: %d\n",grapherrormsg(ecode));
- eXit(1);
- }
- getpalette(&palette);
- mcolor=getmaXcolor( )+1;
- }
- void rbars(void)
- {
- int color; /* 画计算机图形*/
- setcolor(DARKGRAY);
- bar3d(X1-20,y1-20,X2+56,y2+70,0,3);
- setfillstyle(CLOSE_DOT_FILL,BLUE);
- setfillstyle(SOLID_FILL,RED);
- circle(X2+28,y2+60,4);
- bar(X1+4,y1+78,X1+20,y1+83);
- setcolor(MAGENTA);
- circle(X2+28,y2+60,4);
- circle(X2+16,y2+60,4);
- circle(X2+4,y2+60,4);
- setcolor(WHITE);
- setfillstyle(SOLID_FILL,DARKGRAY);
- bar3d(X1-60,y1+120,X1+154,y1+170,0,2);
- bar3d(X1+120,y1+126,X1+100,y1+164,0,2);
- line (X1+20,y1+145,X1+100,y1+145);
- setfillstyle(SOLID_FILL,GREEN);
- bar(X1+26,y1+130,X1+34,y1+132);
- bar(X1+26,y1+150,X1+34,y1+152);
- setfillstyle(WIDE_DOT_FILL,RED);
- bar(X1-24,y1+128,X1-44,y1+142);
- /*利用随机函数实现矩形画面互相覆盖,产生动感*/
- while(!kbhit( ))
- {
- color=random(mcolor-1)+1;
- setcolor(color);
- setfillstyle(random(11)+1,color);
- bar3d(X1+random(getmaXX( )/Xy),y1+random(getmaXy( )/Xy),X2+getmaXX( )/Xy,y2+getmaXy( )/Xy,0,5 );
- }
- }