㈠ c语言设计一个简单的图形动画,用turboc2运行,怎样编写使图形动起来的代码
1、首先,打开vc6.0,建立程序编写页面,建立C语言环境,声明两个整数型变量。
㈡ 请问怎么用c语言实现动画编程
如果用TC,可以考虑用<graphics.h>,不过只支持16色。。
如果用VC,那就用WIN32 API。。
㈢ c语言动画编程
看啊
一群星星在追老鼠!!
#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);
}
}
}
}
㈣ 同学,怎么用C语言制作简单的动画啊
因为C的图形处理功能太一般,不便于创作大型动画。制作动画用flash。
flash制作动画:
打开Flash,点击【文件】→【新建】,在打开的“新建”窗口中选择“Flash文件(ActiveScript 3.0)“,然后点击”确定“创建空白文档。
在图层1 的第一帧,把库中的“Result0”拖动到场景中。
点击“时间轴”上的“新建图层”按钮,创建图层2,然后在图层2的第5帧处,点击【插入】→【关键帧】,把库中的“Result1”拖动到场景中。
利用同样的原理,将”Result2“、 ”Result3“和”Result4“分别到图层3、图层4和图层5中,对应的帧分别为10、15和20处。
最后调整各个图层图像的延续时间。至此,运动的小人影片剪辑制作完成。
切换至主场景中,使主场景处于活动状态,点击”属性“面板中的”大小“按钮,将场景的大小设置为”800*300“,同时将背景色设置为”黑色“点击”确定“按钮。
从库中将”运动的小人“影片剪辑拖动到场景左边外边。
然后在”时间轴“第30帧处,点击【插入】→【时间轴】→【关键帧】,在30帧处插入关键帧,然后将小人从场景的左侧外面拖动到场景右侧外面。至此,整个动画设置完成。
在1到30帧之间鼠标右击,选择”创建补间动画“。
最后按下键盘组合键”CTRL+Enter“进行测试。如果感觉小人运动不规律,可适当将1至30帧的距离调整的稍微大一些,直到满意为止。
㈤ 如何利用C语言实现动画
基于擦除法的C语言动画设计与实现
Movie design implement in C language base on erasure way
东华理工学院计算机与通信系姜林何月顺江西南昌330013
摘要:
本文介绍了程序设计语言中动画设计的原理,在C语言中的动画设计常用方法,并提出了在C语言中新的动画设计方法――擦除法。阐述擦除法动画设计的原理,并通过一个具体的实例详细介绍了这种方法的设计实现,文中末尾总结了擦除法动画设计的优点及适用的范围。
关键字:擦除法;C语言;TurboC2.0;动画设计;原理;实现
中图分类号:TP312
Summary:
Through the principium of movie design in program design language, the thesis present movie design general way in C language, and bring forward new movie design way――erasure . The thesis also expatiate the principium of erasure way, particular describe the design implement of erasure by a instance. The end summarize the excellence and range of erasure way.
Key words: erasure way; C language ; TurboC 2.0; movie design; principium; implement
0. 引言
动画技术是计算机图形学中的重要内容,它广泛用于游戏娱乐,辅助教学,科学实验模拟等计算机辅助设计。用于动画设计的程序设计语言有多种,并且有多种方法。其中C语言程序设计又广泛用于各种软件开发项目中。因此,掌握C语言的动画设计方法对于软件开发很有必要。
1. 程序设计中动画原理
程序设计中动画设计的原理类似电影的方法,它利用人的视觉具有暂留的生理特点,即人眼对动态图像的变化仅能分辨出时间间隔为25毫秒左右的变化,如果图像变化太快,则人眼无法分辨。在程序设计中我们可以在屏幕上画出一张图像,而将这张图像在不同时间出现,然后一张张快速(时间间隔小于25毫秒)呈现在屏幕上,从视觉效果上看这些画面就如同电影在连续变化一样,给人以动的视觉感觉。
2. C语言动画设计常用方法C语言常用动画设计方法[1]:
2.1利用动态开辟图视口方法
在位置动态变化,但大小不变的图视口中(用setviewpot()函数[2]),设置固定图形,这样呈现在观察者面前的是当前图视口位置在动态变化,因而在屏上看到的图像就好像在动态变化一样。
2.2 利用显示页和编辑页交替变化
将当前显示页和编辑页分开(用setvisualpage()和setactivepage()函数),在编辑页上
画好图形后,立即令该页变为显示页,然后在上次显示页上进行画图,画好后,再交换,如此反复,在观察者的视觉上,就出现了动画的效果。
2.3 利用画面存储再重放的方法
如同制作幻灯片一样,将整个动画过程变成一个个片断,然后存储到显示缓冲区内,当把它们按顺序重放到屏幕上时,就出现了动画效果。
2.4 直接对图像动态存储器进行操作
利用显示适配器上控制图像显示的各种寄存器和图像存储器VRAM,对其进行直接操作和控制,从而可以高效快速的实现动画效果。
上述4种方法均可以实现动画效果,但其操作比较复杂,且在程序中要对图像不断进行存取操作,这需要耗费大量内存资源。下面的擦除法动画设计可以解决上述问题。
3. 擦除法动画设计原理
擦除法动画设计方法在很多的动画制作工具(如flash)中大量使用,但在程序设计中却鲜有人用。它的设计原理是:利用同色原理,当图形色与背景色相同时人眼不能感知。在动画设计中,当在一个位置画了一张图像时,使图像色与背景色相异,然后再到另一个位置画一张图像并使图像色与背景色也相异,此时将先前画的图像在原位置再画一张,并使图像色与背景色相同,这样人眼只能看到新画的一张图像而看不到先前画的图像,从而先前画的图像感觉被擦除了。这样连续画多张图像并在每画一张新的图像,将原来的图像擦除,从而在观察者来看就实现了动画的效果。
4. 擦除法的动画设计实现
下面以一个上下翻滚的圆作为一个例子来讲解在TurboC2.0开发环境下用C语言来实现动画的设计过程,其中动画设计的方法是擦除法。具体的实现步骤如下:
4.1 TC的图形系统的初始化
TurboC2.0为用户提供了一个功能强大的画图软件库,它包括图形库文件(graphics.lib),图形头文件(graphics.h)和许多图形显示器的驱动程序。在TurboC2.0开始进行图形设计前必须对之进行初始化,使系统知道要用什么类型的图形显示器的驱动程序,采用什么模式的图形方式,以及该适配器驱动程序的寻找路径名。这个初始化的函数是initgraph()。在本程序中的初始化如下:
gdriver=DETECT;
initgraph(&gdriver, &gmode, "");//图形显示器、显示模式、路径自动检测
4.2 画图
setcolor(LIGHTRED);//设置圆的线条颜色为淡红色
setlinestyle(0,0,1);//设置线条为形状为实线,线宽为一点宽
setfillstyle(1, 10);//设置圆的填充式样为以实填充,填充色为淡绿色
circle(300, 10+10*y,15);//画一个圆心在坐标(300,10+10y),半径为15的圆
这个地方我们需要画一个圆(用draw()函数实现),并且设置圆的圆周线条的颜色(用setcolor()函数),设置线条类型(用setlinestyle()函数),设置圆的填充色和填充模式(用setfillstyle()函数),设置圆的填充色(用floodfill()),最后是画圆(用circle()函数)。在本程序(draw()函数)中的代码如下:
floodfill(300, 10+10*y, 12);//给圆填充如上stfillstyle中的淡绿色
为了实现擦除操作需在同一个位置再画一个圆(用clear()函数实现),该操作只需将上面的画圆函数(draw()函数)改动两个设置即可,如下示:
setcolor(BLUE);//设置圆的线条颜色为蓝色(与背景色相同)
setfillstyle(1, 10);//设置圆的填充式样为以实填充,填充色为淡绿色
4.3 动画实现
本部分是核心部分,先设置背景色为蓝色(用setbkcolor()函数),再在屏幕上画一个填充色为淡绿色的圆(draw()函数)。设置一个循环控制语句实现在屏幕上不同的位置画圆,同时在每画一个圆后作一个时间的延迟(用delay()函数),再在延迟后实现擦除操作,即调用clear()函数。其流程图及代码如下:
setbkcolor(BLUE);//设置背景色为蓝色
for(j=20;j>0;j=j-4)//控制动画实现的次数为20次
{ for(i=j;i<30;i++)//实现动画从上向下闪烁
{ draw(i);//画圆
delay(100000);//延迟0.1秒
clear(i);//擦除已画的圆
}
for(i=30;i>j;i--)//实现动画从下向上闪烁
{ draw(i);//画圆
delay(100000);//延迟0.1秒
clear(i);//擦除已画的圆
}
}
动画实现后的最后效果图如下示。
4.4 关闭图形系统
当图形实现结束后需要关闭图形系统,利用函数closegraph()即可实现。
5. 总结
擦除法动画设计原理易于理解,便于操作。并且它的程序运行所需内存空间也比上述四种常用方法要少得多,因为它在程序执行过程中不需将图形存入内存再从内存调出,这节省了大量的内存空间。如果程序运行在内存紧张的环境中,如嵌入式系统中,这种方法尤其适用
㈥ 用c语言编写一个简单的动画或休闲小游戏
//贪吃蛇游戏,可以运行,我测试过
#include<stdio.h>
#include<dos.h>
#include<graphics.h>
#include<stdlib.h>
#define UP 0x48
#define DOWN 0x50
#define LEFT 0x4b
#define RIGHT 0x4d
#define SPACE 0x39
#define ENTER 0x1c
#define ESC 0x1
#define SW 60
#define SL 20
#define Gsize 20
#define S 0
#define X 1
#define Z 2
#define Y 3
typedef struct SN{
int x;
int y;
int direction;
struct SN *next;
}SNAKE;
SNAKE *tail;
int rank=0;
int grilled[21][16]={0};
unsigned size,size1;
void *buffer,*buffer1;
void interrupt (*oldtime)();
void interrupt newtime();
void install(void interrupt (*haddr)());
int timer=0;
int getkey()
{
union REGS rg;
rg.h.ah=0;
int86(0x16,&rg,&rg);
return rg.h.ah;
}
SNAKE *initmainwindow()
{
int i,j,k;
SNAKE *p,*w;
for(i=0;i<20;i++)
{
grilled[0]=1;
grilled[15]=1;
}
for(j=0;j<16;j++)
{
grilled[0][j]=1;
grilled[20][j]=1;
}
rectangle(SW+20,SL+20,SW+300,SL+400);
rectangle(SW+19,SL+19,SW+299,SL+399);
rectangle(SW+Gsize*6,SL+Gsize*6,SW+Gsize*6+20,SL+Gsize*6+20);
bar(SW+Gsize*6+2,SL+Gsize*6+2,SW+Gsize*6+18,SL+Gsize*6+18);
size=imagesize(SW+Gsize*6,SL+Gsize*6,SW+Gsize*6+20,SL+Gsize*6+20);
buffer=malloc(size);
getimage(SW+Gsize*6,SL+Gsize*6,SW+Gsize*6+20,SL+Gsize*6+20,buffer);
for(k=1;k<3;k++)
{
putimage(SW+Gsize*6,SL+Gsize*(6+k),buffer,XOR_PUT);
grilled[6+k][6]=1;
}
w=NULL;
for(k=2;k>=0;k--)
{
p=(SNAKE *)malloc(sizeof(SNAKE));
p->x=6;p->y=6+k;
p->direction=S;
p->next=w;
w=p;
}
rectangle(SW+Gsize*2,SL+Gsize*4,SW+Gsize*2+15,SL+Gsize*4+15);
rectangle(SW+Gsize*2+2,SL+Gsize*4+2,SW+Gsize*2+13,SL+Gsize*4+13);
grilled[4][2]=2;
size1=imagesize(SW+Gsize*2,SL+Gsize*4,SW+Gsize*2+15,SL+Gsize*4+15);
buffer1=malloc(size1);
getimage(SW+Gsize*2,SL+Gsize*4,SW+Gsize*2+15,SL+Gsize*4+15,buffer1);
return w;
}
int main()
{
int driver=VGA,mode=VGAHI;
char key;
tail=NULL;
initgraph(&driver,&mode,"");
randomize();
tail=initmainwindow();
oldtime=getvect(0x1c);
while(1)
{
key=getkey();
switch(key)
{
case UP :
tail->direction=S;break;
case DOWN:
tail->direction=X;break;
case LEFT:
tail->direction=Z;break;
case RIGHT:
tail->direction=Y;break;
case ESC: closegraph();exit(1);
case SPACE :install(oldtime);break;
case ENTER :install(newtime);break;
}
}
}
void interrupt newtime()
{
int xx=1,yy=1;
char s[4];
SNAKE *p,*pend,*pp;
p=(SNAKE *)malloc(sizeof(SNAKE));
p->next=NULL;
if(timer++==3)
{
timer=0;
switch(tail->direction)
{
case S: if(grilled[tail->y-1][tail->x]==1) exit(1);
p->x=tail->x;p->y=tail->y-1;p->direction=tail->direction;p->next=NULL;
break;
case X: if(grilled[tail->y+1][tail->x]==1) exit(1);
p->x=tail->x;p->y=tail->y+1;p->direction=tail->direction;p->next=NULL;
break;
case Z: if(grilled[tail->y][tail->x-1]==1) exit(1);
p->x=tail->x-1;p->y=tail->y;p->direction=tail->direction;p->next=NULL;
break;
case Y: if(grilled[tail->y][tail->x+1]==1) exit(1);
p->x=tail->x+1;p->y=tail->y;p->direction=tail->direction;p->next=NULL;
break;
}
if(grilled[p->y][p->x]==2)
{
putimage(SW+Gsize*(p->x),SL+Gsize*(p->y),buffer1,XOR_PUT);
putimage(SW+Gsize*(p->x),SL+Gsize*(p->y),buffer,XOR_PUT);
grilled[p->y][p->x]=1;
p->next=tail;
tail=p;
rank++;
bar(375,390,400,420);
sprintf(s,"%d",rank);
setcolor(GREEN);
outtextxy(380,400,s);
do{
xx=random(14)+1;yy=random(19)+1;
}while((grilled[yy][xx]==1)||grilled[yy][xx]==2);
grilled[yy][xx]=2;
putimage(SW+Gsize*xx,SL+Gsize*yy,buffer1,XOR_PUT);
}
else
{
putimage(SW+Gsize*(p->x),SL+Gsize*(p->y),buffer,XOR_PUT);
grilled[p->y][p->x]=1;
p->next=tail;
tail=p;
pend=tail;
while(pend->next) {pp=pend;pend=pend->next;}
putimage(SW+Gsize*(pend->x),SL+Gsize*(pend->y),buffer,XOR_PUT);
grilled[pend->y][pend->x]=0;
pp->next=NULL;
}
}
}
void install(void interrupt (*hadder)())
{
disable();
setvect(0x1c,hadder);
enable();
}
㈦ 用c语言编写一个欢迎界面动画,求教。
这是一个界面动画的主题部分,头文件还有一些pi的预处理命令我都省了
希望给你参考一下,C语言的图形动画只能在TC下编写,运行
int a=DETECT,b; /*切换到图形模式*/
initgraph(&a,&b,"d:\\tc");
while(!kbhit())
{j+=10;
for(i=0;i<=2000;i++)
{
x=300+100*cos(2*i*pi/1000)*sin(i*pi/1000+j*pi/1000);
y=240+100*cos(2*i*pi/1000)*cos(i*pi/1000+j*pi/1000);
if(j%500==0) k++;
putpixel(x,y,k); /*在指定位置画一像素*/
}
delay(5000); /*延时函数[毫秒数]*/
cleardevice(); /* 清除图形屏幕*/
}
getch();
closegraph(); /*切换到字符模式*/
㈧ 怎么用C语言编程实现一个简单的动画
1.可以考虑用Turbo C的绘图函数(附加graphic.h库)或者用opengl+glut等来实现。2.前者一般就是纯粹的画点画线。网上也能找到教程。3.主要说一下后者。可以导入图片,并且二维、三维动画都可以做,甚至是用来开发游戏。后者可以用vc6.0或者vs2005来开发。跨平台。参考教程: http://www.owlei.com/DancingWind/看你的描述要做比较偏数学的东西,那你自己得弄明白如何去实现绘制算法。要实现的动画本身而搭的基本框架不会很复杂的,可能100行代码都不用。4.另外还有opencv、GDI之类的可能更适合二维图像处理库,但我自己不是很了解了,你也可以查一查用哪种绘图库比较适合你。
㈨ 用C语言制作动画
flash制作动画:
打开Flash,点击【文件】→【新建】,在打开的“新建”窗口中选择“Flash文件(ActiveScript 3.0)“,然后点击”确定“创建空白文档。
点击【插入】→【新建元件】,在打开的”新建元件“窗口中,将名称设置为”运动的小人“,勾选”影片剪辑“,然后点击”确定“按钮。
点击【文件】→【导入】→【导入到库】,然后在打开的”导入到库“窗口中,选择事先准备好的小人走动姿势图片,全部选择并点击”打开“按钮,导入到库。
把库中的“Result0”拖动到场景中。
点击“时间轴”上的“新建图层”按钮,创建图层2,然后在图层2的第5帧处,点击【插入】→【关键帧】,把库中的“Result1”拖动到场景中。
利用同样的原理,将”Result2“、 ”Result3“和”Result4“分别到图层3、图层4和图层5中,对应的帧分别为10、15和20处。
最后调整各个图层图像的延续时间。至此,运动的小人影片剪辑制作完成。
切换至主场景中,使主场景处于活动状态,点击”属性“面板中的”大小“按钮,将场景的大小设置为”800*300“,同时将背景色设置为”黑色“点击”确定“按钮。
从库中将”运动的小人“影片剪辑拖动到场景左边外边。
然后在”时间轴“第30帧处,点击【插入】→【时间轴】→【关键帧】,在30帧处插入关键帧,然后将小人从场景的左侧外面拖动到场景右侧外面。至此,整个动画设置完成。
在1到30帧之间鼠标右击,选择”创建补间动画“。
最后按下键盘组合键”CTRL+Enter“进行测试。如果感觉小人运动不规律,可适当将1至30帧的距离调整的稍微大一些,直到满意为止。
㈩ 用C语言编写一个简单的动画
#include<iostream>
#include <stdio.h>
int main()
{
int countBlank = 40;//空格数
int timer = 0;
while(1)
{
++timer;
if(timer == 5)
{
timer = 0;
countBlank --;
if(countBlank == 0)
countBlank = 40;
}
for(int i = 0; i < countBlank; ++i)
{
printf(" ");
}
printf("欢迎光临\n");
system("cls");
}
return 0;
}