2022年面向对象编程技术实验指导教程[参 .pdf

上传人:H****o 文档编号:40341917 上传时间:2022-09-09 格式:PDF 页数:20 大小:232.81KB
返回 下载 相关 举报
2022年面向对象编程技术实验指导教程[参 .pdf_第1页
第1页 / 共20页
2022年面向对象编程技术实验指导教程[参 .pdf_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《2022年面向对象编程技术实验指导教程[参 .pdf》由会员分享,可在线阅读,更多相关《2022年面向对象编程技术实验指导教程[参 .pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、面向对象编程技术实验指导教程郑州轻工业学院计算机与通信工程学院网络工程系名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 20 页 -目录1实验目的.32实验题目.33实验步骤.43.1需求.43.2设计.53.3编码.63.4测试.173.5系统升级.错误!未定义书签。4实验报告.185实验验收.186实验成绩.错误!未定义书签。附录 1 实验报告格式.19名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 20 页 -网络编程基础实训教程31 实验目的通过开发一款贪吃蛇游戏程序,熟练掌握C#编程语言、和面向对象程序设计方法,独立完成一个游戏程序的开发。2 实验题目使用

2、C#编程语言,开发一款贪吃蛇游戏,如下图所示。游戏基本功能描述如下:1)游戏场地是一片矩形区域的草坪。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 20 页 -网络编程基础实训教程42)一条蛇由蛇头和蛇身组成。3)当游戏开始之后,草坪中出现一颗豆和一条蛇,并且蛇不停地移动,蛇移动的方向与蛇头的方向一致。4)当蛇移动时,玩家使用“”、“”、“”和“”四个键控制蛇的方向。5)当蛇头与豆的位置重合时,豆被蛇吃掉,同时在草坪中再生成一颗新的豆,蛇身增加一节。6)当蛇头碰到草坪四周或蛇身时,蛇立即毙命,游戏结束。3 实验步骤3.1 需求根据功能描述可知,贪吃蛇游戏的系统结构图如下所示。定

3、义数据字典如下:1)草坪(Lawn):草坪是贪吃蛇游戏的场地。豆和蛇只能存在于草坪范围之内。草坪具有大小和颜色等属性。2)蛇(Snake):在贪吃蛇游戏中,蛇由若干节组成,其中第一节是蛇头,其余是蛇身。在游戏过程中,有且仅有一条名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 20 页 -网络编程基础实训教程5蛇,并且蛇在不停地移动。如果蛇吃了豆,则蛇生长一节。如果蛇头碰到蛇身或离开草坪,则蛇死亡游戏结束。蛇具有长度、颜色、运动方向、每一节的位置等属性。3)豆(Bean):在贪吃蛇游戏中,豆是蛇的食物。在游戏过程中,有且仅有一颗豆。如果蛇吃了豆,则重新生成一颗豆。豆具有位置、大小和

4、颜色等属性。3.2 设计根据需求分析可知,Snake的每一节都有位置和大小等属性。而Bean也具有这两个属性。抽象出二者的共同特征,抽象出一般类Block,用于描述一个块。Block派生出 Bean和SnakeBlock两个类,其中SnakeBlock类用于描述蛇的一节。为了使游戏的运行更易于控制,定义Game类用于启动、暂停和继续游戏。根据需求分析可知,Lawn仅包含大小和颜色两个属性。为了减少类的数量,可将其大小和颜色等属性添加到Game类中。综上所述,在贪吃蛇游戏中,有Block(块)、Bean(豆)、SankeBlock(节)、Snake(蛇)、Game(游戏)和 MainForm(用

5、户接口)六个类。贪吃蛇游戏的逻辑模型如下图所示。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 20 页 -网络编程基础实训教程6MainFormGameBlockBeanSnakeBlockSnake3.3 编码3.3.1 Block(块)类编码Block是用来构成 Bean(豆)和 Snake(蛇)的最基本的单位,是Bean和SnakeBlock的基类。Block类的参考代码如下。usingSystem;usingSystem.Drawing;namespace HungrySnakeclassBlockprotectedPointorigion;/Block 的左上顶点pu

6、blicconstintWIDTH=10;/Block 的宽度publicconstintHEIGHT=10;/Block 的高度protectedColorcolor;/Block 的颜色publicBlock()origion=new Point(0,0);color=new Color();名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 20 页 -网络编程基础实训教程7publicBlock(intx,inty,Color_color)origion=new Point(x,y);color=_color;publicPointOrigiongetreturnorigio

7、n;publicvoidDisplay(Graphicsg)SolidBrushbrush=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,HEIGHT-1);publicvoidClear(Graphicsg,ColorbackGroundColor)SolidBrushbrush=new SolidBru

8、sh(backGroundColor);g.FillRectangle(brush,origion.X,origion.Y,WIDTH,HEIGHT);3.3.2 Bean(豆)类编码Bean表示豆,是由 Block派生而来的。Bean类的参考代码如下。usingSystem;usingSystem.Drawing;namespace HungrySnakeclassBean:BlockpublicBean(Color_color)origion=new Point(0,0);color=_color;publicvoidCreat(Graphicsg,ColorbackGroundColor

9、,intlawnWidth,int名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 20 页 -网络编程基础实训教程8lawnHeight,Snake snake)Clear(g,backGroundColor);boolbGetAPosition=false;/是否找到生成豆的位置Randomrandom=new Random();while(!bGetAPosition)origion.X=random.Next(0,lawnWidth-1)/WIDTH*WIDTH;origion.Y=random.Next(0,lawnHeight-1)/HEIGHT*HEIGHT;inti

10、;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派生而来的。SnakeBlock类的参考代码如下:usingSystem;usingSystem.Drawing;namespace HungrySnakeclassSnakeBlock:BlockprivateboolisHead;publicboolIsHeadgetret

11、urnisHead;publicSnakeBlock(intx,inty,Color_color,bool_isHead)名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 20 页 -网络编程基础实训教程9origion=new Point(x,y);color=_color;isHead=_isHead;publicvoidChangeHeadToBody()if(isHead)isHead=false;publicvoidDisplay(Graphicsg,Directiondirection)base.Display(g);if(isHead)/绘制蛇眼SolidBrushb

12、rush=new SolidBrush(Color.Brown);switch(direction)case Direction.Up:case Direction.Down:g.FillRectangle(brush,origion.X+WIDTH/4,origion.Y+HEIGHT/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+WID

13、TH/2,origion.Y+HEIGHT/4,2,2);g.FillRectangle(brush,origion.X+WIDTH/2,origion.Y+HEIGHT/4*3,2,2);break;3.3.4 Snake(蛇)类编码Snake表示蛇。Snake 类的参考代码如下:usingSystem;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 20 页 -网络编程基础实训教程10usingSystem.Collections.Generic;usingSystem.Drawing;namespace HungrySnakepublicenum DirectionUp,D

14、own,Left,Right;classSnakeprivateintlength;publicDirectiondirection;privateColorcolor;publicList blocks;privateconstintINIT_LENGTH=3;publicintLengthgetreturnlength;publicSnake(Color_color,Direction_direction)direction=_direction;color=_color;blocks=new List();publicvoidCreat(Graphicsg,ColorbackGround

15、Color,intlawnWidth,intlawnHeight)Clear(g,backGroundColor);blocks.Clear();length=INIT_LENGTH;intx;inty;Randomrandom=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;名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 20 页

16、 -网络编程基础实训教程11blocks.Add(new SnakeBlock(x,y,color,true);switch(direction)case Direction.Up:for(inti=1;i length;i+)blocks.Add(new SnakeBlock(x,y+Block.HEIGHT*i,color,false);break;case Direction.Down:for(inti=1;i length;i+)blocks.Add(new SnakeBlock(x,y-Block.HEIGHT*i,color,false);break;case Direction.

17、Left:for(inti=1;i length;i+)blocks.Add(new SnakeBlock(x+Block.WIDTH*i,y,color,false);break;case Direction.Right:for(inti=1;i length;i+)blocks.Add(new SnakeBlock(x-Block.WIDTH*i,y,color,false);break;Display(g);publicvoidGrow()intx=2*blocksblocks.Count-1.Origion.X-blocksblocks.Count-2.Origion.X;inty=2

18、*blocksblocks.Count-1.Origion.Y-blocksblocks.Count-2.Origion.Y;blocks.Insert(length,new SnakeBlock(x,y,color,false);length+;publicvoidMove()名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 20 页 -网络编程基础实训教程12intx=0;inty=0;blocks0.ChangeHeadToBody();switch(direction)case Direction.Up:x=blocks0.Origion.X;y=blocks0.Orig

19、ion.Y-Block.HEIGHT;break;case Direction.Down:x=blocks0.Origion.X;y=blocks0.Origion.Y+Block.HEIGHT;break;case Direction.Left:x=blocks0.Origion.X-Block.WIDTH;y=blocks0.Origion.Y;break;case Direction.Right:x=blocks0.Origion.X+Block.WIDTH;y=blocks0.Origion.Y;break;blocks.Insert(0,new SnakeBlock(x,y,colo

20、r,true);blocks.RemoveAt(blocks.Count-1);publicvoidDisplay(Graphicsg)for(inti=0;i length;i+)blocksi.Display(g,direction);publicvoidClear(Graphicsg,ColorbackGroundColor)for(inti=0;i length;i+)blocksi.Clear(g,backGroundColor);publicboolCanEatBean(Bean bean)if(blocks0.Origion=bean.Origion)returntrue;名师资

21、料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 20 页 -网络编程基础实训教程13elsereturnfalse;publicvoidEatBean(Bean bean,Graphicsg,ColorbackGroundColor,intlawnWidth,intlawnHeight)bean.Clear(g,backGroundColor);Grow();bean.Creat(g,backGroundColor,lawnWidth,lawnHeight,this);publicboolIsAlive(intlawnWidth,intlawnHeight)if(blocks0.Or

22、igion.X 0)returnfalse;if(blocks0.Origion.Y lawnWidth)returnfalse;if(blocks0.Origion.Y+Block.HEIGHT lawnHeight)returnfalse;for(inti=3;i blocks.Count;i+)if(blocks0.Origion=blocksi.Origion)returnfalse;returntrue;3.3.5 Game(游戏)类设计Game控制游戏的运行,负责在游戏开始时生成Bean和Snake,以及负责在游戏运行中 Snake 的移动、Snake 的生长、Bean的重生,并随

23、时检测 Snake 的生死状态。Game类的参考代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;namespace HungrySnakeclassGame名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 20 页 -网络编程基础实训教程14publicSnake snake;publicBean bean;publicboolisSnakeAlive;publicintlawnWidth;publicintlawnHeight;publicGame(int_lawnWidth,int_la

24、wnHeight)Randomrandom=new Random();intx=random.Next(0,_lawnWidth-1)/Block.WIDTH*Block.WIDTH;inty=random.Next(0,_lawnHeight-1)/Block.HEIGHT*Block.HEIGHT;Directiondirection=(Direction)random.Next(1,4);snake=new Snake(Color.YellowGreen,direction);bean=new Bean(Color.Pink);isSnakeAlive=false;lawnWidth=_

25、lawnWidth;lawnHeight=_lawnHeight;publicvoidBegin(Graphicsg,ColorbackGroundColor,intlawnWidth,intlawnHeight)isSnakeAlive=true;snake.Creat(g,backGroundColor,lawnWidth,lawnHeight);bean.Creat(g,backGroundColor,lawnWidth,lawnHeight,snake);publicvoidOnTime(Graphicsg,ColorbackGroundColor,intlawnWidth,intla

26、wnHeight)if(isSnakeAlive)snake.Clear(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;名师资料总结-精品资

27、料欢迎下载-名师精心整理-第 14 页,共 20 页 -网络编程基础实训教程153.3.6 MainForm(主界面)类设计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.Wi

28、dth,lawn.Height);3.3.6.3Panel 容器Panel容器作为游戏运行的场地。Snake 和Bean都在Panel 容器中绘制。Panel容器的添加步骤如下:在MainForm中添加一个 Panel容器。拖动Panel容器的大小才,使其充满整个窗体。修改Panel容器的属性 Name=lawn。修改Panel容器的属性 BackColor=Green。3.3.6.4Timer组件Timer组件用于在用户定义的时间间隔引发事件。Timer组件的添加步骤如下:在MainForm 中添加一个 Timer 组件。名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 20

29、页 -网络编程基础实训教程16修改Timer 组件的属性 Enalbed=false。修改Timer 组件的属性 Interval=100。双击,生成Tick 事件。Tick 事件的参考代码如下:if(game.isSnakeAlive)Graphicsg;g=lawn.CreateGraphics();game.OnTime(g,lawn.BackColor,lawn.Width,lawn.Height);if(!game.isSnakeAlive)MessageBox.Show(Game Over!);3.3.6.5MenuStrip菜单MenuStrip菜单用于提供用户可以使用的功能。M

30、enuStrip菜单的添加步骤如下:在MainForm 中添加一个 MenuStrip菜单。添加菜单项如下图所示。修改菜单项“开局”的属性Name=ToolStripMenuItemStart。双击菜单项“开局”,生成 Click 事件。Click 事件的参考代码如下:Graphicsg;g=lawn.CreateGraphics();game.Begin(g,lawn.BackColor,lawn.Width,lawn.Height);timer1.Enabled=true;3.3.6.6KeyDown 事件在贪吃蛇游戏中,使用“”、“”、“”和“”四个方向名师资料总结-精品资料欢迎下载-名

31、师精心整理-第 16 页,共 20 页 -网络编程基础实训教程17键改变蛇的移动方向。KeyDown 事件用于在用户按键时,提供改变蛇移动方向的功能。KeyDown 事件的添加步骤如下:双击事件 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 K

32、eys.Right:game.snake.direction=Direction.Right;break;elseswitch(e.KeyCode)case Keys.Up:game.snake.direction=Direction.Up;break;case Keys.Down:game.snake.direction=Direction.Down;break;3.4 测试3.4.1Bean 的生成、消除与显示1)测试程序是否能在游戏开始时,生成一颗豆。2)测试程序是否能在游戏运行中,正常显示一颗豆。3)测试程序是否能在豆被蛇吃掉时,消除原先的豆,并重名师资料总结-精品资料欢迎下载-名师精

33、心整理-第 17 页,共 20 页 -网络编程基础实训教程18新生成一颗豆。3.4.2Snake 的生成、显示、移动、生长与死亡1)测试程序是否能在游戏开始时,生成一条蛇。2)测试程序是否能在游戏运行中,正常显示一条蛇的运动。3)测试程序是否能在游戏运行中,根据用户的按键情况,改变蛇的移动方向。4)测试程序是否能在蛇吃掉豆时,生长一节。5)测试程序是否能在蛇头碰到蛇身时死亡,并结束游戏。6)测试程序是否能在蛇头碰到场地边界时死亡,并结束游戏。4 实验报告游戏发布成功后。撰写实验报告。实验报告的内容包括:实验目的、实验题目、功能描述、需求分析、设计说明、源代码、测试报告、心得体会等项目。5 实验

34、验收实验验收内容包括:1)提交电子版和纸质版实验报告。2)上传完整的程序源代码,要求程序功能正确。3)实验小组推荐一个优秀的案例,发布程序,并根据提交的实验报告和程序源代码回答问题。名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 20 页 -网络编程基础实训教程19附录 1 实验报告格式郑州轻工业学院实验报告实验名称:指导教师:姓名:学号:班级:提交日期:名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 20 页 -网络编程基础实训教程201.实验目的2.实验题目3.功能描述4.需求分析5.设计说明6.源代码7.测试报告1)测试用例2)测试结果8.心得体会名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 20 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁