用随机函数实现动画的技巧
在一些特殊的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;
}
http://cyuyanbiancheng.blog.hexun.com/
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 );
}
}
程序中改变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;
}
http://cyuyanbiancheng.blog.hexun.com/
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 );
}
}