c#课程设计贪吃蛇游戏_第1页
c#课程设计贪吃蛇游戏_第2页
c#课程设计贪吃蛇游戏_第3页
c#课程设计贪吃蛇游戏_第4页
c#课程设计贪吃蛇游戏_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、课程设计的目的和要求1.通过C#课程设计,使学生能将学到的面向对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解,要求学生能够对现实生活中许多具体的事物抽象出类,并掌握继承与派生,基类、虚方法和抽象方法和多态性的概念。2.通过这次课程设计掌握C#语言程序设计的编程思想,为后续课程打下基础。3.培养我们实际操作能力和实践能力,为以后的工作打下坚实的基础。二、课程设计内容编写一个C# GUI版贪吃蛇小游戏程序我们的需求是:一条蛇在封闭的围墙内爬行,玩家可以通过方向键来控制蛇的运动方向,围墙内随机出现一食物,蛇头碰到食物时表示食物被吃掉,此时蛇身加长一节,同时游戏成绩加10分,接着又

2、出现食物等待蛇吃周而复所,直到蛇撞墙或身体交叉而死游戏结束。基本要求:1、 要求利用C#完成游戏的设计2、 要求在设计过程中建立清晰的类层次3、 程序应具有容错功能4、 程序界面美观,逻辑层次清楚,结构合理,文档清晰三、课程设计基本要求1)    要求利用面向对象的方法以及C#的编程思想来完成系统的设计; 2)    要求在设计的过程中,建立清晰的类层次; 3)    在系统中至少要定义四个类,每个类中要有各自的属性和方法; 4) &#

3、160;  在系统的设计中,至少要用到面向对象的一种机制。5) 程序应具有容错功能。6) 程序运行结果正确,操作方便,界面美观,逻辑层次清楚,程序结构合理,文档规范清晰。目录1:需求分析1.1程序功能说明1.2程序设计的分析2:系统的主要功能模块 2.1程序功能图示3:程序的输入,输出和相应的算法3.1程序的输入3.2程序的输出3.3程序的一些重要方法的实现算法和方法4:程序的测试4.1程序测试的内容和结果5:程序运行效果图6:部分程序代码 6.1 蛇类代码6.2 食物类代码7:程序的注意事项8:程序的不足之处一:需求分析1:程序的功能说明:一条蛇在封闭的围墙内爬行,玩家可

4、以通过方向键来控制蛇的运动方向,围墙内随机出现一食物,蛇头碰到食物时表示食物被吃掉,此时蛇身加长一节,同时游戏成绩加10分,接着又出现食物等待蛇吃周而复所,直到蛇撞墙或身体交叉而死游戏结束。2:程序设计的分析通过程序所要实现的功能可以看出,该程序中有,蛇,食物两个主要的对象,所以我们可以定义两个类:蛇类,和食物类;在蛇类中封装了蛇的所有的属性和操作。蛇的属性有:蛇的长度,蛇的初始位置,蛇的运动方向,蛇的存活状态,蛇的运动速度。蛇的操作有:蛇的移动,蛇吃食物,画出蛇所有的状态。 食物的属性有:食物的出现位置,食物的存活状态。食物类的操作:创建一个新的食物,画出食物的位置。在该程序中还有一个FRO

5、M类,用来画出和显示蛇和食物的状态和位置,该类提供给蛇和食物的运动平台,蛇和事物在该FORM的面板范围内运行。程序中还有其他的功能要一一的实现。如:在用户点击“开始”按钮后程序才能开始运行。用户如果点击“暂停”按钮,则该程序暂停,但并不终止程序,在用户再次点击“开始”按钮后,程序继续运行。如果程序运行结束,即程序出现“GAME OVER”,或用户点击“结束”按钮则程序结束,并且退出。在程序运行过程中,用户控制的蛇,每吃到一个食物,那么该玩家的得分就加10,并且还要记录该玩家总共吃了多少食物。如果玩家“GAME OVER”则要判断该玩家的得分是否大于最高分,如果大于,则提示该玩家获得了最高分。玩

6、家可以查看最高分,玩家点击“显示”按钮则将显示最高分。二:系统主要功能图示系统主界面开始暂停结束重新开始显示键盘控制蛇开始运动蛇暂停运动退出程序蛇重新运动显示最高分吃食物个数得分如果当前玩家得分大于之前的最高分,则将该玩家的得分设为最高分.三:系统的输入,输出和相关算法.1:输入: 在该程序中几乎没有什么从键盘输入的数据,所有的程序所运用的数据都是有程序本身提供的,由用户来选择,程序将根据用户的选择来处理相应的数据.,如在玩家选择游戏级别的时候,程序会根据玩家选择的级别来调整蛇的速度.2:输出: 在该程序中,输出的数据有,玩家所得到的分数,蛇吃到的食物的个数,以及目前的最高得分.,当玩家所控制

7、的蛇死亡后,要输出一个消息”GAME OVER”表示蛇的死亡,并且将蛇的生存状态改为false,如果在玩家控制的蛇死亡后,并且玩家的得分已经超过了之前的最高分,则输出一个消息”恭喜你,创了新的记录”并且将该分记录为最高分. 以上是程序的主要的输出.3:程序中的一些相关操作的实现方法和算法 1:蛇的移动.蛇的移动主要通过的改变蛇的坐标位置,然后通过重绘蛇的位置,这样就实现了蛇的移动.具体的为:从构成蛇身的所有节点的最后一点开始,依次将前一个节点的坐标点赋值为后一个节点.这样就实现了蛇身的移动,接下来是蛇头的移动.蛇头的移动要根据蛇的运动方向来做出相应的移动.如果蛇是向右移动,则蛇头的Y坐标点不变

8、,X坐标点加上相应的移动步长. 如果蛇是想左移动,则蛇头的Y坐标不变,X坐标点减去相应的步长. 如果蛇是向上移动的,则蛇头的X坐标不变,Y坐标减去相应的移动步长,如果蛇是向下移动的,则蛇头的X坐标不变,Y坐标点加上相应的步长.这样就构成了整个蛇的坐标点的变换,然后通过,重绘面板则实现了蛇的移动.2:蛇吃食物 蛇吃食物是在蛇经过该食物时,并且蛇头的坐标位置和该食物的坐标位置是一致的那么,将该食物的坐标点,添加到该蛇的最后一位上.这样就实现了蛇吃食物并且蛇身加长.四:程序的测试该程序由于输入的数据几乎没有,所以在测试也相对比较简单,只要运行该程序,在执行程序的过程中发现错误,在程序完成的初期,该程

9、序中的错误非常多,如在蛇运行的过程中,蛇移动的步长是程序所设定的步长的两倍,所以蛇在移动时的步长太大,无法吃到食物,.还有在蛇的移动正常时,但是蛇经过食物却不能够将食物”吃”掉.经过检查原来蛇的的坐标点和食物的坐标点不重合,相差几个单位,但是这几个单位是用眼睛看不出来的,所以对程序的代码进行了仔细的检查,才发现了这个错误.在点击”开始按钮后程序并不能够执行,经过仔细的分析和检查,终于发现,原来程序对”开始”按钮没有进行事件监听.所以点击”开始”按钮后程序不知道该做什么事情,所以没有响应.程序中的错误都是通过白盒和黑盒测试相结合的方法来进行测试,这样程序的错误才能够找的完全和查找方便.五:程序运

10、行效果图:程序的界面:当程序运行,点击开始按钮后的截面图:当程序运行,蛇每吃到一个食物后,得分和个数都会增加.用户可以调节蛇的运动速度. 当玩家点击了显示按钮后,将显示目前该游戏的最高分.当玩家所控制的蛇死亡后图当玩家控制的蛇死亡了后,如果玩家的得分大于最高分,则提示创了记录,如图:六:程序中部分重要代码1:蛇类的实现代码 enum Direction /定义蛇的移动方向的枚举类型 UP,DOWN,LEFT,RIGHT class Snake int maxScore = 0; /最高分 public const int side = 10; /蛇身每个节点的长度 Point body=new

11、 Point1000; /蛇最大长度 Direction direction; /蛇的初始移动方向 Boolean live; /蛇的存活状态 int number; /蛇身节点个数 int score = 0; int speed =200; /蛇的移动速度 public int MaxScore get return maxScore; set maxScore = value; public int Speed get return speed; set speed = value; public int Score get return (number-2)*10; public Di

12、rection Direction get return direction; set direction = value; public Boolean Live get return live; public int Number get return number; public Point Body get return body; public Snake() /蛇的初始化,长度为,方向为向右,存活状态为活 Point node1 = new Point(100,40); Point node2 = new Point(90,40); body0 = node1; body1 = n

13、ode2; number = 2; direction = Direction.RIGHT; live = true; public void Move(Size range) /蛇的移动方法,参数为蛇的移动范围 for (int i = this.number-1; i > 0; i-) bodyi = bodyi - 1; /从蛇尾开始将蛇身的每前一个节点坐标值赋给后一个坐标点 switch (this.direction) /根据蛇的移动方向来设定蛇头的移动方向 case Direction.UP: body0.Y -= side; break; case Direction.DO

14、WN: body0.Y += side; break; case Direction.LEFT: body0.X -= side; break; case Direction.RIGHT: body0.X += side; break; /如果蛇头的位置超过了参数的范围,则将蛇的存活状态设为false,即蛇死亡 if(body0.X<0|body0.X>range.Width-side|body0.Y<0|body0.Y>range.Height-side) this.live = false; for (int i = 1; i <= number - 1;i+

15、 ) /蛇如果撞到自身,蛇也死亡 if(body0.X=bodyi.X && body0.Y=bodyi.Y) this.live = false; /蛇吃食物的方法,参数传递的是蛇将要吃的食物 public void Eat(Food food) bodynumber =food.Position; /通过将要吃的食物的坐标点值赋给蛇的最后一位,以实现蛇吃食物 this.number+; /蛇身的长度加 public void Draw(Graphics g) /画蛇的方法,传递的参数为画蛇所用的面板 Brush brush = Pens.DarkRed.Brush; g.D

16、rawRectangle(Pens.DarkRed,body0.X,body0.Y,side,side); g.FillRectangle(brush,body0.X,body0.Y,side,side); for (int i = 1; i <= number - 1;i+ ) g.DrawRectangle(Pens.Red, bodyi.X, bodyi.Y, side, side); if (this.live = false) g.DrawString("GAME OVER!", new Font("楷体_GB2312", 36, Fon

17、tStyle.Bold), brush, new Point(120, 200); try FileStream aFile = new FileStream("././temp.txt", FileMode.Open); StreamReader sr = new StreamReader(aFile); this.maxScore = Int32.Parse(sr.ReadLine(); sr.Close(); catch (IOException ex) if(this.Score>this.maxScore) g.DrawString("恭喜你创造了

18、新的记录!", new Font("楷体_GB2312", 12, FontStyle.Bold), brush, new Point(120, 350); this.maxScore = this.Score ; try FileStream aFile = new FileStream("././temp.txt", FileMode.OpenOrCreate); StreamWriter sw=new StreamWriter(aFile); sw.WriteLine(this.maxScore.ToString(); sw.Close(

19、); catch(IOException ex) public void resetSnake() /重新设置蛇的状态 Point node1 = new Point(100, 40); Point node2 = new Point(90, 40); body0 = node1; body1 = node2; number = 2; direction = Direction.RIGHT; live = true; 2:食物类代码class Food Point position; /食物的出现位置 Boolean exist; /食物的存在状态 public Food() position = this.creat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论