资源描述
XXX航空工业学院课 程 设 计 报 告课程设计名称:C语言课程设计课程设计题目:运动的小车动画 院(系):计算机学院专 业:网络工程班 级:学 号:姓 名: 指导教师:完成日期:2009年07月17日沈阳航空工业学院课程设计报告 目 录第1章 需求分析11.1题目的内容与要求11.2开发工具11.3题目分析1第2章 概要设计22.1总体结构2第3章 详细设计33.1主函数模块32.2图形驱动模块32.3场景游戏模块43.4游戏过程模块53.5结束模块模块7第4章 调试分析8第5章使用说明9参考文献11附 录(程序清单)12-15-沈阳航空工业学院课程设计报告 第1章 需求分析1.1题目的内容与要求内容:实现一个简单动画,屏幕背景为蓝色,画一简单小车。小车在屏中随意移动。要求:1)实现简单的游戏界面;2)对小车运动进行控制;3)熟练掌握基本的调试方法,并将程序调试通过;4)采用VC环境进行调试运行。1.2开发工具操作系统:WindowsXP SP2。硬件环境:CPUAMD3000+内存1G ,硬盘 120G。软件环境:TurboC。1.3题目分析本程序首先分为四个模块即编写四个函数,主程序按顺序调用这四个函数最后掉用关闭图形系统函数,至此整个程序算是真正结束。题目程序设计思想分析是:先设置背景色和前景色,确定小车的初始位置和车头方向,画出小车,在没有按键的情况下,进入一个循环系统小车自动向前运动,直到撞墙,有按键的情况下,判断按键的性质确定车头的方向,计算小车的新坐标,进入另一个画车循环,一直循环,直到结束。第2章 概要设计2.1总体结构 本程序主要分为五个模块:主函数模块,图行驱动模块,场景游戏模块,游戏过程模块,结束模块。主函数模块实现函数调用。图行驱动模块对图行操作系统进行初使化。场景游戏模块建立简单的游戏界面。游戏过程模块画小车,并通过键盘控制小车的运动。结束模块关闭作图系统,结束程序(如图2.1)。小车动画程序场景游戏模块游戏过程模块主模块图形驱动模块结束模块图2.1功能模块 1 主函数模块:本模块主要实现函数的调用,一共四个函数。 2 图行驱动模块:本模块主要是实现对图形系统进形初始化以及做出简单界面,设置屏幕背景颜色,还有显示游戏开始时的菜单。 3场景游戏模块:本模块主要是实现画出游戏界面,利用循环画出四面墙,屏幕背景为蓝色。 4游戏过程模块:本模块主要是实现画出初始小车及显示其位置,用swich-case()来控制小车的移动情况。 5结束模块:本模块主要是实现最后清屏以及关闭作图系统,显示游戏结束菜单。 沈阳航空工业学院课程设计报告 第3章 详细设计3.1主函数模块控制整个程序的运行,控制菜单操作,通过主函数模块分别调用各个模块,实现各项功能,流程如图3.1所示。调用Init()函数调用DrawPlay()函数调用GamePlay()函数调用close()函数开始结束 图3.1 主模块流程图 主函数主要完成函数的调用,一共有四个函数:画图系统初始化函数,画开始游戏界面函数,游戏过程函数,关闭图形系统函数。2.2图形驱动模块此模块完成图形操做系统初始化,选择适配器,设置背景颜色及前景色,显示进入游戏界面,流程如图3.2所示。 initgraph(&graphdrive,&graphmode,”) setcolor(WHILT)设置前景色清屏 画进入游戏的界面setbkcolor(BLUE) 设置背景色清屏开始结束图3.2 显示模块流程图 图形系统初始化:程序自动在当前选择适配器,背景色设为蓝色,前景色为白色,画四面墙为游戏开始界面,outtextxy()函数确定字符显示位置及其内容。2.3场景游戏模块 此模块主要完成在完成图形初始化后画出游戏界面,该游戏界面为四面墙,屏幕背景为蓝色,画墙面用了两个for循环完成,流程如图3.3所示。int i ;setbkcolor(BLUE)etcolor(11);setlinestyle();i=50i=600rectangle(i,40,i+10,49)rectangle(i,451,i+10,460)i+i=40i=450rectangle(50,i,59,i+10)rectangle(601,i,610,i+10)i+YNYN结束开始图3.3场景模块流程图3.4游戏过程模块此程序是本游戏的主体部分,主要完成游戏的运动过程,首先确定小车的位置和车头方向,接着在这个位置画小车,利用循环画小车,在没有按键情况下,进入画小车循环,直到小车撞墙结束整个程序。如果有按键则判断按键的数值,计算新的坐标,再判断小车头是否撞墙,如果撞墙则结束循环显示结束出结束界面的内容,如果不 撞墙则进入画小车循环,接着进入有没有按键的循环,直到整个程序结束为止。流程如图3.4所示。结 束开 始接受按键图3.4游戏模块流程图3.5结束模块模块此模块主要完成关闭图形操作系统,流程如图3.5所示。 调用closegraph()函数开始结束 图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,北京高等教育出版社,20062刘红伟.C+游戏开发M,机械工业出版社,20063刘变红.C语言高级编程及实例剖析M,人民邮电出版社,20074石祥滨.C语言程序设计基础与实践M,辽宁大学出版社,20045谭浩强.C程序设计(第二版)M,清华大学出版社,2000沈阳航空工业学院课程设计报告附 录(程序清单)#define N 200#include #include #include #define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int gamespeed=60000;/*游戏速度自己调整*/struct car int xN; int yN; int node;/*小车的节数*/int direction;/*小车移动方向*/car;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束*/void GamePlay(void);/*具体过程*/*主函数*/void main(void) Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*具体过程*/ Close();/*图形结束*/*图形驱动*/void Init(void) int gd=DETECT,gm; initgraph(&gd,&gm,c:tc); cleardevice();/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/void DrawK(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;i0;i-)/*小车的每个环节往前移动,也就是小车运行的关键算法*/ car.xi= car.xi-1; car.yi=car.yi-1; /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动车头*/ switch(car.direction) case 1:car.x0+=20;break; case 2: car.x0-=20;break; case 3: car.y0-=20;break; case 4: car.y0+=20;break; if(car.x0595|car.y0455)/*小车是否撞到墙壁*/GameOver();/*本次演示结束*/ getch();setcolor(4);/*画出小车*/for(i=0;icar.node;i+) rectangle(car.xi,car.yi,car.xi+20, car.yi-20);delay(gamespeed);setcolor(BLUE);/*用背景色去除车的的最后一节*/rectangle(car.xcar.node-1,car.ycar.node-1,car.xcar.node-1+20,car.ycar.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; elseif(key=DOWN&car.direction!=3) car.direction=4; /*endwhile(1)*/ void GameOver(void) cleardevice(); setcolor(RED); settextstyle(0,0,4); outtextxy(200,200,GAME OVER); Close(); /*图形结束*/void Close(void) getch(); closegraph();课程设计总结:这次C语言课程设计是我的第一次编写一个相对平时实验课写的小程序大得多也复杂得多的程序。我的题目是小车动画,属于游戏类,用到的函数全是新的,这说明我必须自修,对我来说是一个挑战。在这一个暑假的的开发工作中,虽然遇到不少困难和难题,但是我都以坚坚持不懈的毅力和顽强的拼搏精神一一解决了它们。虽然暑假没玩好,看书看到眼睛疼,但是当小车动画程序最终按自己的意图执行时的欣慰亦足以弥补。通过此次的课程设计,我也意识到了自身的不足。无论是从程序模块化还是系统稳定性都还有很大的改进优化余地,自己C语言知识学的太少,以后学习应该开阔眼界,应当多阅读他人的优秀程序,取人所长,补己之短。努力提升自己的程序编写、系统开发水平以及C知识水平。这次课程设计给我最大的收获是:深刻地体会到了C语言的严格,自己又太粗心大意。C语言是一门高深的学问,很难学但也充满乐趣,此次课设让我更想学好计算机。课程设计结束了,但是我知道我的学习没有结束。当今的计算机技术发展更新的速度极快,我们必须不断的学习、提升才能跟上时代的步伐!指导教师评语: 指导教师(签字): 年 月 日课程设计成绩
展开阅读全文