收藏 分享(赏)

面向对象编程技术实验指导教程.doc

上传人:dzzj200808 文档编号:2736445 上传时间:2018-09-26 格式:DOC 页数:21 大小:159KB
下载 相关 举报
面向对象编程技术实验指导教程.doc_第1页
第1页 / 共21页
面向对象编程技术实验指导教程.doc_第2页
第2页 / 共21页
面向对象编程技术实验指导教程.doc_第3页
第3页 / 共21页
面向对象编程技术实验指导教程.doc_第4页
第4页 / 共21页
面向对象编程技术实验指导教程.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、面向对象编程技术实验指导教程郑州轻工业学院计算机与通信工程学院网络工程系目录1 实验目的 32 实验题目 33 实验步骤 43.1 需求 .43.2 设计 .53.3 编码 .63.4 测试 .183.5 系统升级 .194 实验报告 205 实验验收 206 实验成绩 20附录 1 实验报告格式 .21网络编程基础实训教程31 实验目的通过开发一款贪吃蛇游戏程序,熟练掌握C#编程语言、和面向对象程序设计方法,独立完成一个游戏程序的开发。2 实验题目使用C# 编程语言,开发一款贪吃蛇游戏,如下图所示。游戏基本功能描述如下:1) 游戏场地是一片矩形区域的草坪。网络编程基础实训教程42) 一条蛇由

2、蛇头和蛇身组成。3) 当游戏开始之后,草坪中出现一颗豆和一条蛇,并且蛇不停地移动,蛇移动的方向与蛇头的方向一致。4) 当蛇移动时,玩家使用“” 、“” 、“”和“”四个键控制蛇的方向。5) 当蛇头与豆的位置重合时,豆被蛇吃掉,同时在草坪中再生成一颗新的豆,蛇身增加一节。6) 当蛇头碰到草坪四周或蛇身时,蛇立即毙命,游戏结束。3 实验步骤3.1 需求根据功能描述可知,贪吃蛇游戏的系统结构图如下所示。玩 家 蛇 豆 草 坪 用 户 接 口 定义数据字典如下:1) 草坪(Lawn):草坪是贪吃蛇游戏的场地。豆和蛇只能存在于草坪范围之内。草坪具有大小和颜色等属性。2) 蛇(Snake):在贪吃蛇游戏中

3、,蛇由若干节组成,其中网络编程基础实训教程5第一节是蛇头,其余是蛇身。在游戏过程中,有且仅有一条蛇,并且蛇在不停地移动。如果蛇吃了豆,则蛇生长一节。如果蛇头碰到蛇身或离开草坪,则蛇死亡游戏结束。蛇具有长度、颜色、运动方向、每一节的位置等属性。3) 豆(Bean):在贪吃蛇游戏中,豆是蛇的食物。在游戏过程中,有且仅有一颗豆。如果蛇吃了豆,则重新生成一颗豆。豆具有位置、大小和颜色等属性。3.2 设计根据需求分析可知,Snake的每一节都有位置和大小等属性。而Bean也具有这两个属性。抽象出二者的共同特征,抽象出一般类Block,用于描述一个块。 Block派生出Bean和SnakeBlock两个类

4、,其中SnakeBlock类用于描述蛇的一节。为了使游戏的运行更易于控制,定义Game类用于启动、暂停和继续游戏。根据需求分析可知,Lawn仅包含大小和颜色两个属性。为了减少类的数量,可将其大小和颜色等属性添加到Game类中。综上所述,在贪吃蛇游戏中,有Block (块)、 Bean(豆)、SankeBlock(节)、Snake(蛇)、Game(游戏)和MainForm(用户接口)六个类。贪吃蛇游戏的逻辑模型如下图所示。网络编程基础实训教程6MainFormGameBlockBean SnakeBlockSnake3.3 编码3.3.1 Block(块)类编码Block是用来构成Bean(豆)

5、和Snake(蛇)的最基本的单位,是Bean 和SnakeBlock的基类。 Block类的参考代码如下。using System;using System.Drawing;namespace HungrySnakeclass Blockprotected Point origion; /Block的左上顶点public const int WIDTH = 10; /Block的宽度public const int HEIGHT = 10; /Block的高度protected Color color; /Block的颜色public Block()origion = new Point(0,

6、 0);color = new Color();网络编程基础实训教程7public Block(int x, int y, Color _color)origion = new Point(x, y);color = _color;public Point Origiongetreturn origion;public void Display(Graphics g)SolidBrush brush = new SolidBrush(color);g.FillRectangle(brush, origion.X, origion.Y, WIDTH, HEIGHT);Pen pen = new

7、Pen(Color.Black);g.DrawRectangle(pen, new Rectangle(origion.X, origion.Y, WIDTH - 1, HEIGHT - 1);public void Clear(Graphics g, Color backGroundColor)SolidBrush brush = new SolidBrush(backGroundColor);g.FillRectangle(brush, origion.X, origion.Y, WIDTH, HEIGHT);3.3.2 Bean(豆)类编码Bean表示豆,是由Block派生而来的。Bea

8、n类的参考代码如下。using System;using System.Drawing;namespace HungrySnakeclass Bean : Blockpublic Bean(Color _color)origion = new Point(0, 0);color = _color;public void Creat(Graphics g, Color backGroundColor, int lawnWidth, int 网络编程基础实训教程8lawnHeight, Snake snake)Clear(g, backGroundColor);bool bGetAPosition

9、 = false; /是否找到生成豆的位置Random random = new Random();while (!bGetAPosition)origion.X = random.Next(0, lawnWidth - 1) / WIDTH * WIDTH;origion.Y = random.Next(0, lawnHeight - 1) / HEIGHT * HEIGHT;int i;for (i = 0; i blocks;private const int INIT_LENGTH = 3;public int Lengthgetreturn length;public Snake(C

10、olor _color, Direction _direction)direction = _direction;color = _color;blocks = new List();public void Creat(Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight)Clear(g, backGroundColor);blocks.Clear();length = INIT_LENGTH;int x;int y;Random random = new Random();x = random.Next(lawnWi

11、dth / 4, lawnWidth / 4 * 3) / Block.WIDTH * Block.WIDTH;y = random.Next(lawnHeight / 4 - 1, lawnHeight / 4 * 3) / Block.HEIGHT * Block.HEIGHT;网络编程基础实训教程11blocks.Add(new SnakeBlock(x, y, color, true);switch (direction)case Direction.Up:for (int i = 1; i lawnWidth)return false;if (blocks0.Origion.Y +

12、Block.HEIGHT lawnHeight)return false;for (int i = 3; i blocks.Count; i+)if (blocks0.Origion = blocksi.Origion)return false;return true;3.3.5 Game(游戏)类设计Game控制游戏的运行,负责在游戏开始时生成Bean和Snake,以及负责在游戏运行中Snake的移动、Snake的生长、Bean的重生,并随时检测Snake 的生死状态。 Game类的参考代码如下:using System;using System.Collections.Generic;us

13、ing System.Drawing;namespace HungrySnakeclass Game网络编程基础实训教程14public Snake snake;public Bean bean;public bool isSnakeAlive;public int lawnWidth;public int lawnHeight;public Game(int _lawnWidth, int _lawnHeight)Random random = new Random();int x = random.Next(0, _lawnWidth - 1) / Block.WIDTH * Block.

14、WIDTH;int y = random.Next(0, _lawnHeight - 1) / Block.HEIGHT * Block.HEIGHT;Direction direction = (Direction)random.Next(1, 4);snake = new Snake(Color.YellowGreen, direction);bean = new Bean(Color.Pink);isSnakeAlive = false;lawnWidth = _lawnWidth;lawnHeight = _lawnHeight;public void Begin(Graphics g

15、, Color backGroundColor, int lawnWidth, int lawnHeight)isSnakeAlive = true;snake.Creat(g, backGroundColor, lawnWidth, lawnHeight);bean.Creat(g, backGroundColor, lawnWidth, lawnHeight, snake);public void OnTime(Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight)if (isSnakeAlive)snake.Cl

16、ear(g, backGroundColor);snake.Move();snake.Display(g);bean.Display(g);if (snake.CanEatBean(bean)bean.Clear(g, backGroundColor);snake.EatBean(bean, g, backGroundColor, lawnWidth, lawnHeight);bean.Display(g);if (!snake.IsAlive(lawnWidth, lawnHeight)isSnakeAlive = false;网络编程基础实训教程153.3.6 MainForm(主界面)类

17、设计MainForm可通过继承 System.Windows.Forms.Form实现,通过向MainForm中添加控件及设置控件的属性系统会自动向MainForm 类中添加相应的对象字段,如本程序的menuStrip1和timer1 等。3.3.6.1 添加属性添加属性game,来控制游戏的开始和运行, 参考代码如下:private Game game;3.3.6.2 修改构造函数在构造函数的最后对属性game 进行实例化, 参考代码如下:game = new Game(lawn.Width, lawn.Height);3.3.6.3Panel 容器Panel容器作为游戏运行的场地。Snak

18、e 和Bean 都在Panel 容器中绘制。Panel 容器的添加步骤如下: 在MainForm中添加一个Panel容器 。 拖动Panel 容器的大小才,使其充满整个窗体。 修改Panel 容器的属性Name=lawn。 修改Panel 容器的属性BackColor=Green 。3.3.6.4Timer组件Timer组件用于在用户定义的时间间隔引发事件。Timer组件的添加步骤如下:网络编程基础实训教程16 在MainForm 中添加一个Timer 组件 。 修改Timer 组件的属性Enalbed=false。 修改Timer 组件的属性Interval=100。 双击 ,生成Tick

19、事件。Tick 事件的参考代码如下:if (game.isSnakeAlive)Graphics g;g = lawn.CreateGraphics();game.OnTime(g, lawn.BackColor, lawn.Width, lawn.Height);if (!game.isSnakeAlive)MessageBox.Show(“Game Over!“);3.3.6.5MenuStrip 菜单MenuStrip菜单用于提供用户可以使用的功能。MenuStrip 菜单的添加步骤如下: 在MainForm 中添加一个MenuStrip菜单 。 添加菜单项如下图所示。 修改菜单项“开局

20、”的属性Name=ToolStripMenuItemStart。 双击菜单项“开局”,生成Click 事件。Click 事件的参考代码如下:Graphics g;g = lawn.CreateGraphics();game.Begin(g, lawn.BackColor, lawn.Width, lawn.Height);timer1.Enabled = true;3.3.6.6KeyDown 事件网络编程基础实训教程17在贪吃蛇游戏中,使用“”、“”、“”和“”四个方向键改变蛇的移动方向。KeyDown 事件用于在用户按键时,提供改变蛇移动方向的功能。KeyDown 事件的添加步骤如下: 双

21、击事件KeyDown,生成MainForm的KeyDown 事件。 KeyDown 事件的参考代码如下:if (game.snake.direction = Direction.Down | game.snake.direction = Direction.Up)switch (e.KeyCode)case Keys.Left:game.snake.direction = Direction.Left;break;case Keys.Right:game.snake.direction = Direction.Right;break;elseswitch (e.KeyCode)case Key

22、s.Up:game.snake.direction = Direction.Up;break;case Keys.Down:game.snake.direction = Direction.Down;break;3.4 测试3.4.1Bean 的生成、消除与显示1) 测试程序是否能在游戏开始时,生成一颗豆。2) 测试程序是否能在游戏运行中,正常显示一颗豆。网络编程基础实训教程183) 测试程序是否能在豆被蛇吃掉时,消除原先的豆,并重新生成一颗豆。3.4.2Snake 的生成、显示、移动、生长与死亡1) 测试程序是否能在游戏开始时,生成一条蛇。2) 测试程序是否能在游戏运行中,正常显示一条蛇的运

23、动。3) 测试程序是否能在游戏运行中,根据用户的按键情况,改变蛇的移动方向。4) 测试程序是否能在蛇吃掉豆时,生长一节。5) 测试程序是否能在蛇头碰到蛇身时死亡,并结束游戏。6) 测试程序是否能在蛇头碰到场地边界时死亡,并结束游戏。4 实验报告游戏发布成功后。撰写实验报告。实验报告的内容包括:实验目的、实验题目、功能描述、需求分析、设计说明、源代码、测试报告、心得体会等项目。5 实验验收实验验收内容包括:1) 提交电子版和纸质版实验报告。2) 上传完整的程序源代码,要求程序功能正确。3) 实验小组推荐一个优秀的案例,发布程序,并根据提交的实验报告和程序源代码回答问题。网络编程基础实训教程19附录 1 实验报告格式郑州轻工业学院实验报告实验名称:指导教师:姓名:学号:班级:提交日期:网络编程基础实训教程201. 实验目的2. 实验题目3. 功能描述4. 需求分析5. 设计说明6. 源代码7. 测试报告1) 测试用例2) 测试结果8. 心得体会网络编程基础实训教程21

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报