C语言课程设计运动的小车动画.docx
- 文档编号:13773812
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:16
- 大小:872.44KB
C语言课程设计运动的小车动画.docx
《C语言课程设计运动的小车动画.docx》由会员分享,可在线阅读,更多相关《C语言课程设计运动的小车动画.docx(16页珍藏版)》请在冰点文库上搜索。
C语言课程设计运动的小车动画
XXX航空工业学院
课程设计报告
课程设计名称:
C语言课程设计
课程设计题目:
运动的小车动画
院(系):
计算机学院
专业:
网络工程
班级:
学号:
姓名:
指导教师:
完成日期:
2009年07月17日
第1章需求分析
内容:
实现一个简单动画,屏幕背景为蓝色,画一简单小车。
小车在屏中随意移动。
要求:
1)实现简单的游戏界面;
2)对小车运动进行控制;
3)熟练掌握基本的调试方法,并将程序调试通过;
4)采用VC环境进行调试运行。
操作系统:
WindowsXPSP2。
硬件环境:
CPUAMD3000+内存1G,硬盘120G。
软件环境:
TurboC。
本程序首先分为四个模块即编写四个函数,主程序按顺序调用这四个函数最后掉用关闭图形系统函数,至此整个程序算是真正结束。
题目程序设计思想分析是:
先设置背景色和前景色,确定小车的初始位置和车头方向,画出小车,在没有按键的情况下,进入一个循环系统小车自动向前运动,直到撞墙,有按键的情况下,判断按键的性质确定车头的方向,计算小车的新坐标,进入另一个画车循环,一直循环,直到结束。
第2章概要设计
2.1总体结构
本程序主要分为五个模块:
主函数模块,图行驱动模块,场景游戏模块,游戏过程模块,结束模块。
主函数模块实现函数调用。
图行驱动模块对图行操作系统进行初使化。
场景游戏模块建立简单的游戏界面。
游戏过程模块画小车,并通过键盘控制小车的运动。
结束模块关闭作图系统,结束程序(如图2.1)。
图2.1功能模块
1主函数模块:
本模块主要实现函数的调用,一共四个函数。
2图行驱动模块:
本模块主要是实现对图形系统进形初始化以及做出简单界面,设置屏幕背景颜色,还有显示游戏开始时的菜单。
3场景游戏模块:
本模块主要是实现画出游戏界面,利用循环画出四面墙,屏幕背景为蓝色。
4游戏过程模块:
本模块主要是实现画出初始小车及显示其位置,用swich-case()来控制小车的移动情况。
5结束模块:
本模块主要是实现最后清屏以及关闭作图系统,显示游戏结束菜单。
第3章详细设计
3.1主函数模块
控制整个程序的运行,控制菜单操作,通过主函数模块分别调用各个模块,实现各项功能,流程如图3.1所示。
图3.1主模块流程图
主函数主要完成函数的调用,一共有四个函数:
画图系统初始化函数,画开始游戏界面函数,游戏过程函数,关闭图形系统函数。
2.2图形驱动模块
此模块完成图形操做系统初始化,选择适配器,设置背景颜色及前景色,显示进入游戏界面,。
图3.2显示模块流程图
图形系统初始化:
程序自动在当前选择适配器,背景色设为蓝色,前景色为白色,画四面墙为游戏开始界面,outtextxy()函数确定字符显示位置及其内容。
2.3场景游戏模块
。
图3.3场景模块流程图
3.4游戏过程模块
。
图3.4游戏模块流程图
3.5结束模块模块
。
图3.5结束模块流程图
第4章调试分析
问题1:
由于在编源代码的时候我没有掌握好屏幕的坐标,导致小车画不出来,也答不到我想要的停止效果。
解决办法:
我就采用尝试法修改错误,我的程序中有四个坐标,我就已次改变一个坐标,一次改变一点坐标的大小,最终完成了我想要的效果。
问题2:
小车运动时,小车运动的前一个位置仍然有小车图像。
解决办法:
在代码适当的位置适当加入cleardevice();函数,使小车在屏幕上运行轨迹正确显示。
问题3:
出现一些未定义的参数。
解决方法:
由于我的粗心且C语言大小敏感,我的错误就是弄错了字母的大小写。
改了大小写就可以了。
问题4:
小车不动。
解决方法:
函数调用顺序出现了错误,导致一些函数无法运行,换了顺序序就像我想象的运行了。
第5章使用说明
以下图5.1和图5.2为程序执行后小车运动的画面。
背景为蓝色,小车为红色。
图5.3为游戏结束界面图。
图5.1小车运动图
图5.2小车运动图
图5.3结束时的界面
参考文献
[1]张长海.C语言程设计[M],北京高等教育出版社,2006
[2]刘红伟.C++游戏开发[M],机械工业出版社,2006
[3]刘变红.C语言高级编程及实例剖析[M],人民邮电出版社,2007
[4]石祥滨.C语言程序设计基础与实践[M],辽宁大学出版社,2004
[5]谭浩强.C程序设计(第二版)[M],清华大学出版社,2000
附录(程序清单)
#defineN200
#include
#include
#include
#defineLEFT0x4b00
#defineRIGHT0x4d00
#defineDOWN0x5000
#defineUP0x4800
#defineESC0x011b
inti,key;
intgamespeed=60000;/*游戏速度自己调整*/
structcar
{
intx[N];
inty[N];
intnode;/*小车的节数*/
intdirection;/*小车移动方向*/
}car;
voidInit(void);/*图形驱动*/
voidClose(void);/*图形结束*/
voidDrawK(void);/*开始画面*/
voidGameOver(void);/*结束*/
voidGamePlay(void);/*具体过程*/
/*主函数*/
voidmain(void)
{
Init();/*图形驱动*/
DrawK();/*开始画面*/
GamePlay();/*具体过程*/
Close();/*图形结束*/
}
/*图形驱动*/
voidInit(void)
{
intgd=DETECT,gm;
initgraph(&gd,&gm,"c:
\\tc");
cleardevice();
}
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
voidDrawK(void)
{
setbkcolor(BLUE);
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/
for(i=50;i<=600;i+=10)/*画围墙*/
{
rectangle(i,40,i+10,49);/*上边*/
rectangle(i,451,i+10,460);/*下边*/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10);/*左边*/
rectangle(601,i,610,i+10);/*右边*/
}
}
voidGamePlay(void)
{
car.direction=1;/*方向往右*/
car.x[0]=100;car.y[0]=100;/*车头*/
car.x[1]=110;car.y[1]=100;
car.node=4;/*节数*/
while
(1){
while(!
kbhit())/*在没有按键的情况下,小车自己移动身体*/
{for(i=car.node-1;i>0;i--)/*小车的每个环节往前移动,也就是小车运行的关键算法*/
{car.x[i]=car.x[i-1];
car.y[i]=car.y[i-1];}
/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动车头*/
switch(car.direction)
{
case1:
car.x[0]+=20;break;
case2:
car.x[0]-=20;break;
case3:
car.y[0]-=20;break;
case4:
car.y[0]+=20;break;
}
if(car.x[0]<55||car.x[0]>595||car.y[0]<65||
car.y[0]>455)/*小车是否撞到墙壁*/
{GameOver();/*本次演示结束*/
getch();}
setcolor(4);/*画出小车*/
for(i=0;i rectangle(car.x[i],car.y[i],car.x[i]+20, car.y[i]-20); delay(gamespeed); setcolor(BLUE);/*用背景色去除车的的最后一节*/ rectangle(car.x[car.node-1],car.y[car.node-1], car.x[car.node-1]+20,car.y[car.node-1]-20); /*endwhile(! kbhit)*/ } key=bioskey(0);/*接收按键*/ if(key==ESC)/*按ESC键退出*/ GameOver(); else if(key==UP&&car.direction! =4) /*判断是否往相反的方向移动*/ car.direction=3; else if(key==RIGHT&&car.direction! =2) car.direction=1; else if(key==LEFT&&car.direction! =1) car.direction=2; else if(key==DOWN&&car.direction! =3) car.direction=4; }/*endwhile (1)*/ } voidGameOver(void) {cleardevice(); setcolor(RED); settextstyle(0,0,4); outtextxy(200,200,"GAMEOVER"); Close(); } /*图形结束*/ voidClose(void) { getch(); closegraph(); } 课程设计总结: 这次C语言课程设计是我的第一次编写一个相对平时实验课写的小程序大得多也复杂得多的程序。 我的题目是小车动画,属于游戏类,用到的函数全是新的,这说明我必须自修,对我来说是一个挑战。 在这一个暑假的的开发工作中,虽然遇到不少困难和难题,但是我都以坚坚持不懈的毅力和顽强的拼搏精神一一解决了它们。 虽然暑假没玩好,看书看到眼睛疼,但是当小车动画程序最终按自己的意图执行时的欣慰亦足以弥补。 通过此次的课程设计,我也意识到了自身的不足。 无论是从程序模块化还是系统稳定性都还有很大的改进优化余地,自己C语言知识学的太少,以后学习应该开阔眼界,应当多阅读他人的优秀程序,取人所长,补己之短。 努力提升自己的程序编写、系统开发水平以及C知识水平。 这次课程设计给我最大的收获是: 深刻地体会到了C语言的严格,自己又太粗心大意。 C语言是一门高深的学问,很难学但也充满乐趣,此次课设让我更想学好计算机。 课程设计结束了,但是我知道我的学习没有结束。 当今的计算机技术发展更新的速度极快,我们必须不断的学习、提升才能跟上时代的步伐! 指导教师评语: 指导教师(签字): 年月日 课程设计成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 运动 小车 动画