您的当前位置:首页正文

动画设计

2023-09-20 来源:步旅网
Ⅰ 摘 要

这是一篇“品”字动画演示,其中涉及到for循环、清屏技巧、键盘操作、图形函数等知识。本游戏的开发者需要基本掌握显示器中断寄存器的设置。

Ⅱ 前 言

文字动画既能锻炼思维的严密性,又有很多乐趣,因此我就借这个机会用C语言去实现一些动画效果,在从别人身上学到一些技巧的同时,我也有了自己的经验,但是效果还是并不感觉的满意,有些粗糙,希望老师能够谅解,我以后会再接再厉。

Ⅲ 功能描述

本次演示共有3个环节,每一环节都有初始化、按

键处理、及退出功能。 (1)“品”字输出。 (2)“品”字动画演示。

(3)分解三个口,做出蹦极效果。

Ⅳ 配置要求

(1)硬件配置

CPU:≥Intel 酷睿i3 330M

内存:≥1GB

硬盘剩余空间:≥128MB (2)软件环境

(3) Turbo C 2.0及其以上版本 WIN-TC

Ⅴ 总体设计

一功能模块设计

1、系统模块图

本程序包括5个模块,分别是初始化模块、动画演示模块和功能控制模块。 (1)初始化模块

该模块包括屏幕初始化和游戏第一环节的初始化。屏幕初始化用于输出操作提示,动画演示每一环节的初始化是构建每一环节的关卡。

(2)动画演示模块

该模块主要是被其他模块调用。 (3)动能控制模块

该模块是几个功能函数的集合,包括屏幕输出功能、判断功能和环节重置功能。 2、 任务执行流程图

开 始 菜 单 是否演示 Y 动画演示 1 2 3 Y “品” 字输出 “品” 字动画 蹦 极 是否再次演示 谢谢观看

N 二、数据结构设计

1、设置全局变量

定义全局变量,用于下面调用函数的循环作用 2、定位输出

定位输出开机画面,便于动画操作 switch(a) {

case 1:cleardevice();b();one(); break;

case 2:cleardevice();b();two(); break; case 3:cleardevice();b();three(); break; case 4:cleardevice();exit(0); break; }

outtextxy(20,100,\"1:pin zi\"); outtextxy(20,115,\"2:pin donghua\"); outtextxy(20,130,\"3:peng peng tiao tiao\"); outtextxy(20,145,\"4:exit\");

outtextxy(50,200,\"please put in number 1-4\"); scanf(\"%d\

三、函数功能描述

1、函数名: settextstyle

功 能: 为图形输出设置当前的文本属性 用 法: void far settextstyle (int font, int direction, char size);

2、函数名: outtextxy

功 能: 在指定位置显示一字符串

用 法: void far outtextxy(int x, int y, char *textstring);

3、函数名:Setbkcolor

动能:该函数用指定的颜色值来设置当前的背景色,如果指定的颜色值超出了当前设备的表示范围,则设置为最近似的、设备可以表示的颜色。

用法:SetBkColor( HDC hdc, COLORREF crColor ); 4、函数名:Switch

功能:该函数计算一组表达式列表的值,然后返回与表达式列表中最先为 True 的表达式所相关的 Variant 数值或表达式。

用法:Switch 函数的参数列表由多对表达式和数值组成。表达式是由左至右加以计算的,而数值则会在第一个相关的表达式为 True时返回。如果其中有部分不成对,则会产生一个运行错误。如果 expr-1 为

True则 Switch 返回 value-1,如果 expr-1 为 False,但 expr-2 为 True,则 Switch 返回 value-2,以此类推。 当没有一个表达式为 True,或者第一个为 True 的表达式的对应值为 Null时,Switch 会返回一个Null值。 虽然它只返回其中的一个值,但是 Switch会计算所有的表达式。因此应该注意到其所产生的副作用。例如,只要其中一个表达式导致被零除错误,则运行就会发生错误。 5、函数名:setlinestyle

功能: setlinestyle() 为画线函数设置当前线型,包括线型、线图样和线宽。

用法: setlinestyle() 函数调用方式为void setlinestyle(int stly,unsigned pattern,int width); 6、函数名:bar

功能: 函数bar()用当前填充图样和填充色(注意不是给图色)画出一个指定上左上角与右下角的实心长条形(长方块或正方块),但没有四条边线)。

用法: bar()函数调用方式为void bar(int left,int top,int right,int bottom); 7、函数名:circle()

功能: 函数circle()使用当前绘图色并以实线画一个完整的圆。

用法:该函数调用方式为void circle(int x,int y,int radius); 8、函数名:getch

功能:从控制台无回显地取一个字符。 用法:int getch(void); 9、函数名:delay

功能:该函数起到延时的作用,有一个参数是微秒。用法:delay(); 10、主函数

首先设置寄存器AX的高位和低位,显示器软中断,进行显示状态的设置,初始化屏幕,并显示操作提示信息。然后根据1键进行处理,处理过程由move()函数进行(如果按下4键,则退出程序)。

四、代码实现

1、程序预处理

程序预处理部分包括加载头文件、定义全局变量和定义数据结构,并对它们进行初始化工作。其中加载头文件的代码如下:

#include #include #include

2、初始化模块

模块初始化环节时是调用动画演示模块中的函数。该模块包括以下几个函数。

void one(); void two(); void three(); void exit(); int i,j,k,h,r,p,g; void b();

3、功能控制模块

该模块主要用于对屏幕的初始化及相关的按键提示。

main() {

int x,y,a; x=DETECT; y=0;

initgraph(&x,&y,\"\"); b();

settextstyle(0,0,3) ;

outtextxy(50,200,\"please put in number 1-4\"); outtextxy(50,300,\"choice__\"); settextstyle(0,0,2);

outtextxy(20,100,\"1:pin zi\");

outtextxy(20,115,\"2:pin donghua\");

outtextxy(20,130,\"3:peng peng tiao tiao\"); outtextxy(20,145,\"4:exit\"); setbkcolor(0) ; scanf(\"%d\

switch(a) {

case 1:cleardevice();b();one(); break;

case 2:cleardevice();b();two(); break; case 3:cleardevice();b();three(); break; case 4:cleardevice();exit(0); break;

}

outtextxy(20,100,\"1:pin zi\");

outtextxy(20,115,\"2:pin donghua\");

outtextxy(20,130,\"3:peng peng tiao tiao\"); outtextxy(20,145,\"4:exit\");

outtextxy(50,200,\"please put in number 1-4\"); scanf(\"%d\

switch(a) {

case 1:cleardevice();b();one(); break;

case 2:cleardevice();b();two(); break; case 3:cleardevice();b();three(); break; case 4:cleardevice();exit(0); break; }

outtextxy(20,100,\"1:pin zi\"); outtextxy(20,115,\"2:pin donghua\");

outtextxy(20,130,\"3:peng peng tiao tiao\"); outtextxy(20,145,\"4:exit\");

outtextxy(50,200,\"please put in number 1-4\"); scanf(\"%d\

switch(a) {

case 1:cleardevice();b();one(); break;

case 2:cleardevice();b();two(); break; case 3:cleardevice();b();three(); break; case 4:cleardevice();exit(0); break;

} outtextxy(20,100,\"1:pin zi\"); outtextxy(20,115,\"2:pin donghua\");

outtextxy(20,130,\"3:peng peng tiao tiao\"); outtextxy(20,145,\"4:exit\");

outtextxy(50,200,\"please put in number 1-4\"); scanf(\"%d\

switch(a) {

case 1:cleardevice();b();one(); break;

case 2:cleardevice();b();two(); break;

case 3:cleardevice();b();three(); break; case 4:cleardevice();exit(0); break;

} outtextxy(20,100,\"1:pin zi\");

outtextxy(20,115,\"2:pin donghua\");

outtextxy(20,130,\"3:pengpengtiaotiao\"); outtextxy(20,145,\"4:exit\");

outtextxy(50,200,\"please put in number 1-4\"); scanf(\"%d\ getch(); }

void b() {

{for(k=1,i=1;k<=100,i<=100;k++,i++) {

if(i==16)i++; setfillstyle(1,i); delay(100);

bar(0+k*20,0,20+k*20,5) ; bar(0+k*20,475,640+k*20,480) ; } } }

void one() {

for(i=0;i<=5;i++) {

setfillstyle(1,2);

bar(i*50,50,100+i*50,55); bar(i*50,150,100+i*50,155); bar(250,50,255,155); bar(350,50,355,155);

bar(i*35,170,100+i*35,175); bar(i*35,270,100+i*35,275); bar(175,170,180,275); bar(275,170,280,275);

bar(i*65,170,100+i*65,175); bar(i*65,270,100+i*65,275); bar(325,170,330,275); bar(425,170,430,275); for(j=0;j<100;j++) delay(1000);

if(i!=5)

setfillstyle(1,0);

bar(i*50,50,100+i*50,55); bar(i*50,150,100+i*50,155); bar(i*35,170,100+i*35,175); bar(i*35,270,100+i*35,275); bar(i*65,170,100+i*65,175); bar(i*65,270,100+i*65,275); } }

void two ()

{ for(k=0;k<=3;k++) { setfillstyle(1,2);

bar(5*50-50*k,50+50*k,100+5*50-50*k,55+50*k); bar(5*50-50*k,150+50*k,100+5*50-50*k,155+50*k); bar(250-50*k,50+50*k,255-50*k,155+50*k); bar(350-50*k,50+50*k,355-50*k,155+50*k);

bar(5*35-50*k,170+50*k,100+5*35-50*k,175+50*k); bar(5*35-50*k,270+50*k,100+5*35-50*k,275+50*k); bar(175-50*k,170+50*k,180-50*k,275+50*k); bar(275-50*k,170+50*k,280-50*k,275+50*k);

bar(5*65-50*k,170+50*k,100+5*65-50*k,175+50*k); bar(5*65-50*k,270+50*k,100+5*65-50*k,275+50*k); bar(325-50*k,170+50*k,330-50*k,275+50*k); bar(425-50*k,170+50*k,430-50*k,275+50*k); for(j=0;j<100;j++) delay(1000); if(k!=3)

setfillstyle(1,0);

bar(5*50-50*k,50+50*k,100+5*50-50*k,55+50*k); bar(5*50-50*k,150+50*k,100+5*50-50*k,155+50*k); bar(250-50*k,50+50*k,255-50*k,155+50*k); bar(350-50*k,50+50*k,355-50*k,155+50*k);

bar(5*65-50*k,170+50*k,100+5*65-50*k,175+50*k); bar(5*65-50*k,270+50*k,100+5*65-50*k,275+50*k); bar(325-50*k,170+50*k,330-50*k,275+50*k); bar(425-50*k,170+50*k,430-50*k,275+50*k);

bar(5*35-50*k,170+50*k,100+5*35-50*k,175+50*k); bar(5*35-50*k,270+50*k,100+5*35-50*k,275+50*k); bar(175-50*k,170+50*k,180-50*k,275+50*k); bar(275-50*k,170+50*k,280-50*k,275+50*k); }

for(k=3,h=0;h<=20;h++)

{ setfillstyle(1,2);

bar(5*50-50*k+10*h,50+50*k,100+5*50-50*k+10*h,55+50*k); bar(5*50-50*k+10*h,150+50*k,100+5*50-50*k+10*h,155+50*k); bar(250-50*k+10*h,50+50*k,255-50*k+10*h,155+50*k); bar(350-50*k+10*h,50+50*k,355-50*k+10*h,155+50*k);

bar(5*35-50*k+10*h,170+50*k,100+5*35-50*k+10*h,175+50*k); bar(5*35-50*k+10*h,270+50*k,100+5*35-50*k+10*h,275+50*k); bar(175-50*k+10*h,170+50*k,180-50*k+10*h,275+50*k); bar(275-50*k+10*h,170+50*k,280-50*k+10*h,275+50*k);

bar(5*65-50*k+10*h,170+50*k,100+5*65-50*k+10*h,175+50*k); bar(5*65-50*k+10*h,270+50*k,100+5*65-50*k+10*h,275+50*k); bar(325-50*k+10*h,170+50*k,330-50*k+10*h,275+50*k); bar(425-50*k+10*h,170+50*k,430-50*k+10*h,275+50*k); for(j=0;j<100;j++) delay(100); if(h!=20)

setfillstyle(1,0);

bar(5*50-50*k+10*h,50+50*k,100+5*50-50*k+10*h,55+50*k); bar(5*50-50*k+10*h,150+50*k,100+5*50-50*k+10*h,155+50*k); bar(250-50*k+10*h,50+50*k,255-50*k+10*h,155+50*k); bar(350-50*k+10*h,50+50*k,355-50*k+10*h,155+50*k);

bar(5*35-50*k+10*h,170+50*k,100+5*35-50*k+10*h,175+50*k); bar(5*35-50*k+10*h,270+50*k,100+5*35-50*k+10*h,275+50*k); bar(175-50*k+10*h,170+50*k,180-50*k+10*h,275+50*k); bar(275-50*k+10*h,170+50*k,280-50*k+10*h,275+50*k);

bar(5*65-50*k+10*h,170+50*k,100+5*65-50*k+10*h,175+50*k); bar(5*65-50*k+10*h,270+50*k,100+5*65-50*k+10*h,275+50*k); bar(325-50*k+10*h,170+50*k,330-50*k+10*h,275+50*k); bar(425-50*k+10*h,170+50*k,430-50*k+10*h,275+50*k); }

for(k=3,h=20,j=0;j<=3;j++) { setfillstyle(1,2);

bar(5*50-50*k+10*h,50+50*k-50*j,100+5*50-50*k+10*h,55+50*k-50*j); bar(5*50-50*k+10*h,150+50*k-50*j,100+5*50-50*k+10*h,155+50*k-50*j); bar(250-50*k+10*h,50+50*k-50*j,255-50*k+10*h,155+50*k-50*j); bar(350-50*k+10*h,50+50*k-50*j,355-50*k+10*h,155+50*k-50*j);

bar(5*35-50*k+10*h,170+50*k-50*j,100+5*35-50*k+10*h,175+50*k-50*j); bar(5*35-50*k+10*h,270+50*k-50*j,100+5*35-50*k+10*h,275+50*k-50*j); bar(175-50*k+10*h,170+50*k-50*j,180-50*k+10*h,275+50*k-50*j); bar(275-50*k+10*h,170+50*k-50*j,280-50*k+10*h,275+50*k-50*j);

bar(5*65-50*k+10*h,170+50*k-50*j,100+5*65-50*k+10*h,175+50*k-50*j); bar(5*65-50*k+10*h,270+50*k-50*j,100+5*65-50*k+10*h,275+50*k-50*j); bar(325-50*k+10*h,170+50*k-50*j,330-50*k+10*h,275+50*k-50*j);

bar(425-50*k+10*h,170+50*k-50*j,430-50*k+10*h,275+50*k-50*j); for(i=0;i<100;i++) delay(100); if(j!=3)

setfillstyle(1,0);

bar(5*50-50*k+10*h,50+50*k-50*j,100+5*50-50*k+10*h,55+50*k-50*j); bar(5*50-50*k+10*h,150+50*k-50*j,100+5*50-50*k+10*h,155+50*k-50*j); bar(250-50*k+10*h,50+50*k-50*j,255-50*k+10*h,155+50*k-50*j); bar(350-50*k+10*h,50+50*k-50*j,355-50*k+10*h,155+50*k-50*j);

bar(5*35-50*k+10*h,170+50*k-50*j,100+5*35-50*k+10*h,175+50*k-50*j); bar(5*35-50*k+10*h,270+50*k-50*j,100+5*35-50*k+10*h,275+50*k-50*j); bar(175-50*k+10*h,170+50*k-50*j,180-50*k+10*h,275+50*k-50*j); bar(275-50*k+10*h,170+50*k-50*j,280-50*k+10*h,275+50*k-50*j);

bar(5*65-50*k+10*h,170+50*k-50*j,100+5*65-50*k+10*h,175+50*k-50*j); bar(5*65-50*k+10*h,270+50*k-50*j,100+5*65-50*k+10*h,275+50*k-50*j); bar(325-50*k+10*h,170+50*k-50*j,330-50*k+10*h,275+50*k-50*j); bar(425-50*k+10*h,170+50*k-50*j,430-50*k+10*h,275+50*k-50*j);

}

}

void three() { setfillstyle(1,2);

bar(5*50-50*3+10*20,50+50*3-50*3,100+5*50-50*3+10*20,55+50*3-50*3); bar(5*50-50*3+10*20,150+50*3-50*3,100+5*50-50*3+10*20,155+50*3-50*3); bar(250-50*3+10*20,50+50*3-50*3,255-50*3+10*20,155+50*3-50*3); bar(350-50*3+10*20,50+50*3-50*3,355-50*3+10*20,155+50*3-50*3);

bar(5*35-50*3+10*20,170+50*3-50*3,100+5*35-50*3+10*20,175+50*3-50*3);

bar(5*35-50*3+10*20,270+50*3-50*3,100+5*35-50*3+10*20,275+50*3-50*3); bar(175-50*3+10*20,170+50*3-50*3,180-50*3+10*20,275+50*3-50*3); bar(275-50*3+10*20,170+50*3-50*3,280-50*3+10*20,275+50*3-50*3);

bar(5*65-50*3+10*20,170+50*3-50*3,100+5*65-50*3+10*20,175+50*3-50*3);

bar(5*65-50*3+10*20,270+50*3-50*3,100+5*65-50*3+10*20,275+50*3-50*3); bar(325-50*3+10*20,170+50*3-50*3,330-50*3+10*20,275+50*3-50*3); bar(425-50*3+10*20,170+50*3-50*3,430-50*3+10*20,275+50*3-50*3);

for(i=1;i<=24;i++)

{

setfillstyle(1,0);

bar(270+i*5,50,290+i*5,55); for(j=0;j<1000;j++) delay(10);

}

for(i=1;i<=20;i++) {

setfillstyle(1,0);

bar(390,30+5*i,410,50+5*i); for(j=0;j<1000;j++) delay(10);

}

for(i=1;i<=20;i++) {

setfillstyle(1,0);

bar(405-5*i,150,425-5*i,155); for(j=0;j<1000;j++) delay(10);

}

for(i=1;i<=20;i++) {

setfillstyle(1,0);

bar(300,150-5*i,305,170-5*i); for(j=0;j<1000;j++) delay(10);

}

for (i=0;i<=10;i++) {

setfillstyle(1,4);

bar(225-10*i,170,325-10*i,175); bar(225-10*i,270,325-10*i,275); bar(225-10*i,170,230-10*i,275); bar(325-10*i,170,330-10*i,275); for(j=0;j<100;j++) delay(100); if(i!=10)

setfillstyle(1,0);

bar(225-10*i,170,325-10*i,175); bar(225-10*i,270,325-10*i,275); bar(225-10*i,170,230-10*i,275); bar(325-10*i,170,330-10*i,275); }

for(i=1;i<=24;i++) {

setfillstyle(1,0);

bar(345+i*5,170,375+i*5,175); for(j=0;j<1000;j++) delay(10);

}

for(i=1;i<=20;i++) {

setfillstyle(1,0);

bar(465,150+5*i,485,170+5*i); for(j=0;j<1000;j++) delay(10);

}

for(i=1;i<=20;i++) {

setfillstyle(1,0);

bar(480-5*i,270,500-5*i,275); for(j=0;j<1000;j++) delay(10);

}

for(i=1;i<=20;i++) {

setfillstyle(1,0);

bar(375,270-5*i,380,290-5*i); for(j=0;j<1000;j++) delay(10);

}

setcolor(3);

circle(427,222,40);

sleep(1);

for (k=0,i=10,g=0;k<=30,g<=5;k++,g++) {

setfillstyle(1,4);

bar(225-10*i,170-5*k,325-10*i,175-5*k); bar(225-10*i,270-5*k,325-10*i,275-5*k); bar(225-10*i,170-5*k,230-10*i,275-5*k); bar(325-10*i,170-5*k,330-10*i,275-5*k); for(j=0;j<100;j++) delay(10);

if(k!=30&&g!=5) setfillstyle(1,0);

bar(225-10*i,170-5*k,325-10*i,175-5*k); bar(225-10*i,270-5*k,325-10*i,275-5*k); bar(225-10*i,170-5*k,230-10*i,275-5*k); bar(325-10*i,170-5*k,330-10*i,275-5*k); }

for(p=0;p<=20;p++) {

for (k=30,i=10,h=0,g=5;h<=60;h++) { setcolor(3) ; setfillstyle(1,4);

bar(225-10*i,170-5*k+5*h,325-10*i,175-5*k+5*h); bar(225-10*i,270-5*k+5*h,325-10*i,275-5*k+5*h); bar(225-10*i,170-5*k+5*h,230-10*i,275-5*k+5*h); bar(325-10*i,170-5*k+5*h,330-10*i,275-5*k+5*h); circle(427,222+5*h,40); for(j=0;j<100-10*h;j++) delay(200); if(h!=60) setfillstyle(1,0);

bar(225-10*i,170-5*k+5*h,325-10*i,175-5*k+5*h); bar(225-10*i,270-5*k+5*h,325-10*i,275-5*k+5*h); bar(225-10*i,170-5*k+5*h,230-10*i,275-5*k+5*h); bar(325-10*i,170-5*k+5*h,330-10*i,275-5*k+5*h); if(h!=60) setcolor(0);

circle(427,222+5*h,40); }

for (k=30,i=10,h=60,r=0,g=5;r<=60;r++)

{ setcolor(3) ;

setfillstyle(1,4);

bar(225-10*i,170-5*k+5*h-5*r,325-10*i,175-5*k+5*h-5*r); bar(225-10*i,270-5*k+5*h-5*r,325-10*i,275-5*k+5*h-5*r); bar(225-10*i,170-5*k+5*h-5*r,230-10*i,275-5*k+5*h-5*r); bar(325-10*i,170-5*k+5*h-5*r,330-10*i,275-5*k+5*h-5*r); circle(427,222+5*h-5*r,40); for(j=0;j<100-10*h;j++) delay(200); if(r!=60) setfillstyle(1,0);

bar(225-10*i,170-5*k+5*h-5*r,325-10*i,175-5*k+5*h-5*r); bar(225-10*i,270-5*k+5*h-5*r,325-10*i,275-5*k+5*h-5*r); bar(225-10*i,170-5*k+5*h-5*r,230-10*i,275-5*k+5*h-5*r); bar(325-10*i,170-5*k+5*h-5*r,330-10*i,275-5*k+5*h-5*r); if(r!=60) setcolor(0);

circle(427,222+5*h-5*r,40); }

} }

Ⅵ 参考文献

《C程序设计(第三版)》,谭浩强编,清华大学出版社

C语言图形函数.doc

图形和图像函数包含在graphics.doc

目 录

Ⅰ 摘要 Ⅱ 前言 Ⅲ 功能描述 Ⅳ 配置要求 Ⅴ 总体设计

一、功能模块设计 二、数据结构设计 三、函数功能描述 四、代码实现

Ⅵ 参考文献

因篇幅问题不能全部显示,请点此查看更多更全内容