c语言动画编程
发布网友
发布时间:2022-05-03 04:07
我来回答
共2个回答
热心网友
时间:2023-10-09 06:35
看啊
一群星星在追老鼠!!
#include <DOS.H>
#include<graphics.h>
#include<stdlib.h>
#include<math.h>
#define maxcircle 80
#define CR 1
main()
{union REGS r;
int dr=DETECT,mode=0;
int mx,my,mc;
int i, color[maxcircle];
double fx,fy,force=0;
double s,x[maxcircle],y[maxcircle];
initgraph(&dr,&mode,"");
r.x.ax=0;
int86(0X33,&r,&r);
r.x.ax=2;
int86(0x33,&r,&r);
for(i=0;i<maxcircle;i++)
{color[i]=random(16)+1;
x[i]=random(640);
y[i]=random(480);
}
while(!kbhit())
{
r.x.ax=3;
int86(0x33,&r,&r);
mx=r.x.cx;
my=r.x.dx;
mc=r.x.bx;
for(i=0;i<maxcircle;i++)
{
fx=mx-x[i];
fy=my-y[i];
s=sqrt(fx*fx+fy*fy+0.0012);
if(s!=0)
{
setcolor(0);
setfillstyle(1,0);
fillellipse(x[i],y[i],CR,CR);
setcolor(color[i]);
setfillstyle(1,color[i]);
force=random(30)/(double)10;
x[i]+=fx/s*force;
y[i]+=fy/s*force;
fillellipse(x[i],y[i],CR,CR);
}
}
if(mc==1)
{
cleardevice();
for(i=0;i<maxcircle;i++)
{x[i]=random(640);
y[i]=random(480);
color[i]=random(16)+1;
fillellipse(x[i],y[i],CR,CR);
}
}
}
}
热心网友
时间:2023-10-09 06:35
学习目标
·平面动画的实现方法
·通过实例理解动画的制作,并能自己动手制作小动画
平面动画的实现方法
随着计算机技术的普及应用,动画技术作为计算机图形学的一部分, 已广泛用于制作动画片、游戏和进行辅助教学等方面。
所谓动画技术指的是屏幕上显示出来的画面或者其中的一部分,能够按照一定的规则及要求在屏幕上移动或变幻,从而实现由计算机显示的图形能够动态变换。可见,实现动画的关键在于图形生成、复现和消隐。产生动画所采用的方法,归结起来有以下几种:
(1)BITBLT动画,亦称图形阵列动画、快照动画和图形块,关键在于画面存储和重放,类似制作幻灯片,通过将整个动画过程划分为一个片断,作为一副画显示在屏幕的一个区域,在将屏幕图形像素存放在一个文件中;进行动态显示时,在将存储的图像释放,显示在指定画面,实现了动画效果。这种方法主要用于处理屏幕的一部分,需要经过内存申请(用于存储显示缓冲区中的一个矩形方块的图形数据)、读取位图并存入内存、再将内存中存储的图形数据置于显示器指定位置,同时释放内存供它用。这样,便得到了动画的效果。动画速度受到显示分辨率、显示模式及图形大小等*。
(2)线框动画,亦称全屏动画,页面动画和迭代动画,关键在于图形页面的互换,利用计算机图形显示器在一定工作模式下具有多个页面的特点,并分别作为显示页和绘图页,图形在这两个页面上交换,实现实时动画。这种方法的处理对象是分别存放在不同图形页面上的一系列全屏图像,并通过一个独立的子程序以适当的顺序扫描有关页面,得到动画的效果。
(3)实时动画,亦称现场动画、乒乓动画、隐藏页面动画和动态页面动画,与上述两种方法有本质区别。前面两种方法都是在开始动画序列之前,已经将所有图像画好,并存储起来;而实时动画则是在动画开始时才绘制图像,需要分时处理图像生成和动画实现。
(4)色彩循环动画,利用调色板设置指令,来改变图像颜色,让可见图像消失为背景,同时又立即使用第二条调色板设置指令恢复另一幅图像的正确颜色。两幅图像交替出现,不断重复(即图像本色与背景色),便获得实时动画效果。
小车
#define PI 3.1415926
#define step 10
#define R 10
#include<time.h>
#include<stdlib.h>
#include<graphics.h>
#include<conio.h>
#include<dos.h>
main()
{
int gdriver=DETECT,gmode;
static int startx=5;
static int starty=100;
int maxx,l=1,n=1;
double dalta=20,angle;
int size;
void *image;
initgraph(&gdriver,&gmode,"");
cleardevice();
setbkcolor(BLUE);
size=imagesize(startx,starty,startx+60,starty+60);
image=(unsigned char *)malloc(size);
maxx=getmaxx();
while(!kbhit())
{
if(l==1)
{
n++;
angle=-1*(n*step)/PI*180/R;
if((int)(-1*angle)%360<dalta)
angle-=dalta;
if(n>(maxx-70)/step)
l=0;
}
if(l==0)
{
--n;
angle=-1*(n*step)/R/PI*180;
if((int)(-1*angle)%360<dalta)
angle-=dalta;
if(n==1)l=1;
}
rectangle(startx+n*step,starty,startx+n*step+60,starty+40);
pieslice(startx+n*step+15,starty+50,angle,angle-dalta,10);
pieslice(startx+n*step+45,starty+50,angle,angle-dalta,10);
setcolor(GREEN);
setfillstyle(SOLID_FILL,GREEN);
circle(startx+n*step+15,starty+50,10);
circle(startx+n*step+45,starty+50,10);
circle(startx+n*step+15,starty+50,3);
circle(startx+n*step+45,starty+50,3);
getimage(startx+n*step,starty,startx+n*step+60,starty+60,image);
delay(100);
putimage(startx+n*step,starty,image,XOR_PUT);
}
free(image);
closegraph();
}