您当前的位置:首页 > 计算机 > 编程开发 > C语言

用随机函数实现动画的技巧

时间:01-03来源:作者:点击数:

在一些特殊的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 );
    }
}

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门