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





《面向对象编程技术实验指导教程.doc》由会员分享,可在线阅读,更多相关《面向对象编程技术实验指导教程.doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象编程技术实验指导教程郑州轻工业学院计算机与通信工程学院网络工程系目录1实验目的32实验题目33实验步骤43.1需求43.2设计53.3编码63.4测试183.5系统升级194实验报告205实验验收206实验成绩20附录1 实验报告格式21网络编程基础实训教程1 实验目的通过开发一款贪吃蛇游戏程序,熟练掌握C#编程语言、和面向对象程序设计方法,独立完成一个游戏程序的开发。2 实验题目使用C#编程语言,开发一款贪吃蛇游戏,如下图所示。游戏基本功能描述如下:1) 游戏场地是一片矩形区域的草坪。2) 一条蛇由蛇头和蛇身组成。3) 当游戏开始之后,草坪中出现一颗豆和一条蛇,并且蛇不停地移动,蛇移
2、动的方向与蛇头的方向一致。4) 当蛇移动时,玩家使用“”、“”、“”和“”四个键控制蛇的方向。5) 当蛇头与豆的位置重合时,豆被蛇吃掉,同时在草坪中再生成一颗新的豆,蛇身增加一节。6) 当蛇头碰到草坪四周或蛇身时,蛇立即毙命,游戏结束。3 实验步骤3.1 需求根据功能描述可知,贪吃蛇游戏的系统结构图如下所示。定义数据字典如下:1) 草坪(Lawn):草坪是贪吃蛇游戏的场地。豆和蛇只能存在于草坪范围之内。草坪具有大小和颜色等属性。2) 蛇(Snake):在贪吃蛇游戏中,蛇由若干节组成,其中第一节是蛇头,其余是蛇身。在游戏过程中,有且仅有一条蛇,并且蛇在不停地移动。如果蛇吃了豆,则蛇生长一节。如果
3、蛇头碰到蛇身或离开草坪,则蛇死亡游戏结束。蛇具有长度、颜色、运动方向、每一节的位置等属性。3) 豆(Bean):在贪吃蛇游戏中,豆是蛇的食物。在游戏过程中,有且仅有一颗豆。如果蛇吃了豆,则重新生成一颗豆。豆具有位置、大小和颜色等属性。3.2 设计根据需求分析可知,Snake的每一节都有位置和大小等属性。而Bean也具有这两个属性。抽象出二者的共同特征,抽象出一般类Block,用于描述一个块。Block派生出Bean和SnakeBlock两个类,其中SnakeBlock类用于描述蛇的一节。为了使游戏的运行更易于控制,定义Game类用于启动、暂停和继续游戏。根据需求分析可知,Lawn仅包含大小和颜
4、色两个属性。为了减少类的数量,可将其大小和颜色等属性添加到Game类中。综上所述,在贪吃蛇游戏中,有Block(块)、Bean(豆)、SankeBlock(节)、Snake(蛇)、Game(游戏)和MainForm(用户接口)六个类。贪吃蛇游戏的逻辑模型如下图所示。MainFormGameBlockBeanSnakeBlockSnake3.3 编码3.3.1 Block(块)类编码Block是用来构成Bean(豆)和Snake(蛇)的最基本的单位,是Bean和SnakeBlock的基类。Block类的参考代码如下。using System;using System.Drawing;namesp
5、ace HungrySnake class Block protected 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, 0); color = new Color(); public Block(int x, int y, Color _color) origion = new Point
6、(x, y); color = _color; public Point Origion get return origion; public void Display(Graphics g) SolidBrush brush = new SolidBrush(color); g.FillRectangle(brush, origion.X, origion.Y, WIDTH, HEIGHT); Pen pen = new Pen(Color.Black); g.DrawRectangle(pen, new Rectangle(origion.X, origion.Y, WIDTH - 1,
7、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派生而来的。Bean类的参考代码如下。using System;using System.Drawing;namespace HungrySnake class Bean : Bl
8、ock public Bean(Color _color) origion = new Point(0, 0); color = _color; public void Creat(Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight, Snake snake) Clear(g, backGroundColor); bool bGetAPosition = false; /是否找到生成豆的位置 Random random = new Random(); while (!bGetAPosition) origion.X
9、= random.Next(0, lawnWidth - 1) / WIDTH * WIDTH; origion.Y = random.Next(0, lawnHeight - 1) / HEIGHT * HEIGHT; int i; for (i = 0; i snake.Length; i+) if (origion = snake.blocksi.Origion) break; if (i = snake.Length) bGetAPosition = true; Display(g); 3.3.3 SnakeBlock(节)类编码SnakeBlock表示蛇的一节,是由Block派生而来
10、的。SnakeBlock类的参考代码如下:using System;using System.Drawing;namespace HungrySnake class SnakeBlock : Block private bool isHead; public bool IsHead get return isHead; public SnakeBlock(int x, int y, Color _color, bool _isHead) origion = new Point(x, y); color = _color; isHead = _isHead; public void Change
11、HeadToBody() if (isHead) isHead = false; public void Display(Graphics g, Direction direction) base.Display(g); if (isHead) /绘制蛇眼 SolidBrush brush = new SolidBrush(Color.Brown); switch (direction) case Direction.Up: case Direction.Down: g.FillRectangle(brush, origion.X + WIDTH / 4, origion.Y +HEIGHT
12、/ 2, 2, 2); g.FillRectangle(brush, origion.X + WIDTH / 4 * 3, origion.Y + HEIGHT / 2, 2, 2); break; case Direction.Left: case Direction.Right: g.FillRectangle(brush, origion.X + WIDTH / 2, origion.Y + HEIGHT / 4, 2, 2); g.FillRectangle(brush, origion.X + WIDTH / 2, origion.Y + HEIGHT / 4 * 3, 2, 2);
13、 break; 3.3.4 Snake(蛇)类编码Snake表示蛇。Snake类的参考代码如下:using System;using System.Collections.Generic;using System.Drawing;namespace HungrySnake public enum Direction Up, Down, Left, Right ; class Snake private int length; public Direction direction; private Color color; public List blocks; private const in
14、t INIT_LENGTH = 3; public int Length get return length; public Snake(Color _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
15、= INIT_LENGTH; int x; int y; Random random = new Random(); x = random.Next(lawnWidth / 4, lawnWidth / 4 * 3) / Block.WIDTH * Block.WIDTH; y = random.Next(lawnHeight / 4 - 1, lawnHeight / 4 * 3) / Block.HEIGHT * Block.HEIGHT; blocks.Add(new SnakeBlock(x, y, color, true); switch (direction) case Direc
16、tion.Up: for (int i = 1; i length; i+) blocks.Add(new SnakeBlock(x, y + Block.HEIGHT * i, color, false); break; case Direction.Down: for (int i = 1; i length; i+) blocks.Add(new SnakeBlock(x, y - Block.HEIGHT * i, color, false); break; case Direction.Left: for (int i = 1; i length; i+) blocks.Add(ne
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 技术 实验 指导 教程

限制150内