您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > C课程设计论文报告贪吃蛇游戏
目录第1章课程设计的目的与要求................................................11.1课程设计目的........................................................11.2课程设计的实验环境..................................................11.3课程设计的预备知识..................................................11.4课程设计要求........................................................1第2章课程设计内容........................................................22.1程序功能介绍........................................................22.2程序整体设计说明....................................................22.2.1设计思路......................................................22.2.2数据结构设计及用法说明........................................22.2.3程序结构(流程图)............................................32.2.4各模块的功能及程序说明........................................62.3程序源代码及注释....................................................9第3章课程设计总结........................................................16参考资料171第1章课程设计的目的与要求1.1课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。本课程设计的目的和任务:1.巩固和加深学生对C语言课程的基本知识的理解和掌握2.掌握C语言编程和程序调试的基本技能3.利用C语言进行基本的软件设计4.掌握书写程序设计说明文档的能力5.提高运用C语言解决实际问题的能力1.2课程设计的实验环境硬件要求能运行Windows2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。1.3课程设计的预备知识熟悉C语言及C语言开发工具。1.4课程设计要求1.分析课程设计题目的要求2.写出详细设计说明3.编写程序代码,调试程序使其能正确运行4.设计完成的软件要便于操作和使用5.设计完成后提交课程设计报告2第2章课程设计内容2.1程序功能介绍贪吃蛇游戏是一个深受人们喜爱的游戏,一条在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。2.2程序整体设计说明2.2.1设计思路程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。2.2.2数据结构设计及用法说明表示食物与蛇的矩形块设计为10*10个像素单位,食物的基本数据域为他所出现的位置,用x和y座标表示,则矩形块用函数rectangle(x,y,x+10,y+10)或rectangle(x,y,x+10,y-10)可以画出。由于每次只出现一个食物,所以设定yes表示是否要出现食物。蛇的一节身体为一个矩形块,表示矩形块只需起点座标x,y。身体不断增长,用数组存放每节座标,最大设定为N=200,node表示当前节数。保存蛇的移动方向的变量direction和生命的变量life,一旦life为1,表示蛇死,结束。#defineN2003structFood{intx;/*食物的横坐标*/inty;/*食物的纵坐标*/intyes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/structSnake{intx[N];inty[N];intnode;/*蛇的节数*/intdirection;/*蛇移动方向*/intlife;/*蛇的生命,0活着,1死亡*/}snake;2.2.3程序结构(流程图)本程序流程图如下:4开始Init();Intgd=DETECT.gm;Setcdor(11);i=50i=6000rectangle(i,40,i+10,49)i+=10i=405i=450ectangle(50,I,59,i+10);i+=10randomize();1!kbhit()Multiplexsnake.life==1break;key=bioskey(0);62.2.4各模块的功能及程序说明1.蛇身基本单元模块SnakeSegment.cs基本单元用一个矩形(Rectangle)来描述,详细构造如下privateRectanglem_rect;/**//************构造函数,传入顶点坐标和块宽度****************/publicSnakeSegment(Pointlocation,intwidth)...{m_rect=newRectangle(location,newSize(width,width));}//属性publicRectangleRectangle...{get...{Multiplexclearderice();charstr[10];geth();结束7returnm_rect;}}publicPointLocation...{get...{returnthis.m_rect.Location;}set...{this.m_rect.Location=value;}}publicSizeSize...{get...{returnthis.m_rect.Size;}}2.蛇身结构位置模块Snake.cs蛇身由若干基本单元组成,这些单元存放在一个Queue结构中,Queue处于命名空间System.Collections之下,表示对象的先进先出集合。Snake类里面主要包含Add(添加新对象),Clear(清除对象),Slither(蛇身移动),PointOnSnake(判断某点是否在蛇身内部)几个方法。//向蛇身添加一个新节点publicvoidAdd(PointnewLocation)...{SnakeSegmentnewhead=newSnakeSegment(newLocation,m_width);8//CheckiftheQueueExistsif(m_segs==null)...{m_segs=newQueue(MAXSNAKELENGTH);}elseif(m_segs.Count==MAXSNAKELENGTH)...{Slither(newLocation);return;}m_segs.Enqueue(newhead);}publicvoidSlither(PointnewLocation)...{SnakeSegmentnewhead=newSnakeSegment(newLocation,this.m_width);this.m_segs.Enqueue(newhead);this.m_segs.Dequeue();}publicboolPointOnSnake(Pointpt)...{IEnumeratormyenum=this.m_segs.GetEnumerator();while(myenum.MoveNext())...{if(((SnakeSegment)myenum.Current).Rectangle.Contains(pt))...{returntrue;}}returnfalse;}3.控制蛇身移动模块Control.cs9首先定义了三个全局变量privatePointm_location;privateintm_increment;privateSnakeDirectionm_direction;其中的SnakeDirection的定义为internalenumSnakeDirection...{None=-1,//保持默认Down=1,Left=0,Right=2,Up=3}2.3程序源代码及注释#defineN200#includegraphics.h#includestdlib.h#includedos.h#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011binti,key;intscore=0;/*得分*/intgamespeed=50000;/*游戏速度自己调整*/structFood{intx;/*食物的横坐标*/10inty;/*食物的纵坐标*/intyes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/structSnake{intx[N];inty[N];intnode;/*蛇的节数*/intdirection;/*蛇移动方向*/intlife;/*蛇的生命,0活着,1死亡*/}snake;voidInit(void);/*图形驱动*/voidClose(void);/*图形结束*/voidDrawK(void);/*开始画面*/voidGameOver(void);/*结束游戏*/voidGamePlay(void);/*玩游戏具体过程*/voidPrScore(void);/*输出成绩*//*主函数*/voidmain(void){Init();/*图形驱动*/DrawK();/*开始画面*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/}/*图形驱动*/voidInit(void){intgd=DETECT,gm;initgraph(&gd,&gm,c:\\tc);11cleardevice();}/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/voidDrawK(void){/*setbkcolor(LIGHTGREEN);*/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){randomize();/*随机数发生器*/food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/
本文标题:C课程设计论文报告贪吃蛇游戏
链接地址:https://www.777doc.com/doc-3818378 .html