这是一篇“品”字动画演示,其中涉及到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 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 目 录 Ⅰ 摘要 Ⅱ 前言 Ⅲ 功能描述 Ⅳ 配置要求 Ⅴ 总体设计 一、功能模块设计 二、数据结构设计 三、函数功能描述 四、代码实现 Ⅵ 参考文献 因篇幅问题不能全部显示,请点此查看更多更全内容