贪吃蛇游戏课程设计实验报告样本.docx
- 文档编号:23804294
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:35
- 大小:599.58KB
贪吃蛇游戏课程设计实验报告样本.docx
《贪吃蛇游戏课程设计实验报告样本.docx》由会员分享,可在线阅读,更多相关《贪吃蛇游戏课程设计实验报告样本.docx(35页珍藏版)》请在冰豆网上搜索。
贪吃蛇游戏课程设计实验报告样本
辽宁科技大学
课程设计阐明书
设计题目:
基于C#贪吃蛇游戏
学院、系:
装备制造学院
专业班级:
计算机科学与技术
学生姓名:
叶佳佳
指引教师:
丁宁
成绩:
12月12日
一、概述
1、用C#实现该设计办法
一方面应当理解设计规定,然后按照功能设计出实际模块,每个模块都要完毕特定功能,要实现模块间高内聚,低耦合。
设计模块是一种相称重要环节,模块数量不适当太多,也不适当太少,要是每个模块都能比较简朴转换成流程图。
模块设计完毕后,就该给每个模块绘制流程图。
流程图要尽量简朴且容易理解,多使用中文,补某些过长代码,增长理解难度。
此外,流程图应容易转换成代码。
依照流程图编写好代码后在WindowsXP操作系统,VS.NET开发环境下进行运营测试,检查错误,最后设计出可行程序。
2、贪吃蛇游戏阐明
游戏操作要尽量简朴,界面要尽量美观。
编写程序实现贪吃蛇游戏,贪吃蛇游戏是一种深受人们喜欢游戏:
一条蛇在密闭围墙内,在围墙内随机浮现一种食物,通过键盘上四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表达食物被吃掉,这时蛇身体长一节,同步计10分;接着又浮现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或身体交叉(蛇头撞到自己身体),则游戏结束。
游戏结束时输出相应得分。
详细规定有如下几点:
(1)对系统进行功能模块分析、控制模块分析对的,符合课题规定,实现相应功能;可以加以其她功能或修饰,使程序更加完善、合理;
(2)系统设计要实用,采用模块化程序设计办法,编程简洁、可用,功能全面;
(3)阐明书、流程图要清晰;
二、实验目及设计规定
1、实验目
.NET课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基本知识基本上,进一步加深对VC#.NET技术理解和掌握;
提高和加强学生计算机应用及软件开发能力,使学生具备初级程序员基本素质;
培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新月异发展形势;
本次课程设计是以学生独立思考解决问题为主,教师指引为辅,结合上机操作,完毕指定任务,做出设计报告。
2、实验规定
运用MicrosoftVisualStudio平台设计制作一种贪吃蛇小游戏,规定如下:
(1)可以记录游戏成绩(计分按照每吃一块食物增长20合计)
(2)可以暂停/继续游戏(通过按钮实现)
(3)蛇身体可以随着吃到食物数量逐渐变长
(4)可以自己添加障碍物,规定设计成红色墙壁
(5)积分每增长50分规定蛇相应加迅速度
(6)规定在游戏过程中添加背景音乐和随机炸弹
三、课程设计详细实现
1、概要设计
1.1、设计思想
程序核心在于表达蛇图形及蛇移动。
用一种小矩形快表达蛇一节身体,身体每长一节,增长一种矩形块,蛇头(绿色)用三节表达。
移动时必要从蛇头开始,因此蛇不可以向相反方向移动,如果不按任意键,蛇自行在当前方向右前移,但按下有效方向键后,蛇头朝该方向移动,一步移动一节身体,因此按下有效方向键后,先拟定蛇头位置,而后蛇身体随蛇头移动,图形实现是从蛇头新位置开始画出蛇,这时,由于未清屏因素,本来蛇位置和新位置差一种单位,因此看起来蛇多一节身体,因此将蛇最后节用背景色覆盖。
食物浮现与消失也是画矩形块和覆盖矩形块。
为了便于理解,定义两个构造体:
食物与蛇,同步还定义了一种随意墙。
然后运用图形驱动,,制作美观游戏界面,通过随机函数产生随机食物,控制游戏过程食物浮现。
定义键盘操作控制游戏过程蛇移动方向,画出边界,并判断游戏与否结束,记录游戏过程中蛇吃食物数量,计算并输出游戏成绩。
1.2、主模块实现
1.snake设计模块
2.Form设计模块
1.3、主函数流程图
2、详细设计
2.1、设计思想
一方面进入VS打开文献新建一种项目,点击windows窗体应用程序,名字设为Snakes。
进入Form设计界面,一方面咱们都懂得游戏最基本功能有开始,暂停,继续,退出,因此一方面要先加4个button键来控制游戏,再加一种TextBox文本框来显示成绩。
在窗体中加入Panel来实现贪吃蛇运动空间,设立有一种游戏界面运动空间。
之后就要定义一种sakes类,来实现蛇某些属性与办法,一方面明白这个游戏实现是贪吃蛇吃食物,因此还需要定义食物,食物被吃后要实现食物重建。
玩游戏时还需要有控制键设立,这一模块可以选用Switch语句来实现。
实现基本功能后要注意如何状况会导致蛇死亡,可以想到有越界线,咬到自己都会死亡。
随着思想成熟,觉得只吃食物好像太简朴,因此在这个贪吃蛇游戏基本上又设立了某些障碍,加了几堵墙,还设立了随机炸弹,这样游戏就更故意思了,加上此前玩俄罗斯方块某些感觉,还设立了游戏不断加速模块。
2.2、详细模块实现:
1、snake属性定义
2、Form属性定义
3、创立蛇模块
创立蛇模块和创立障碍物思路想法是一致,都是通过label实现:
4、创立食物模块
创立食物模块和创立随机炸弹思路是一致,都是在一定范畴内随机浮现。
通过坐标点办法来实现食物,食物是随机浮现,并且一旦被吃掉就会立即创立新食物。
并且还需要判断食物浮现地方时与否与墙壁重叠。
5、蛇吃食物模块
通过Timer控件来设立时间,,吃到食物之后身体增长,蛇身体颜色是三色交替浮现,每吃到一种食物积分加10,身体加长相应增长。
并且还要判断与否需要更改蛇运营速度。
7、与否撞到自己模块
当贪吃蛇自己遇到自己身体时游戏结束
8、游戏结束模块
9、初始化panel
10、初始化Form并添加背景音乐(Kalimba.wav)
11、控制蛇运动方向
四、调试过程及运营成果
1、调试过程
(1)在实现撞障碍物过程中,刚刚开始时候墙不能起作用,贪吃蛇总是能穿过障碍物,日后才发现时障碍物设立范畴浮现了错误。
通过不断尝试与计算才算出对的范畴。
(2)在实现固定墙过程中是通过使用Label来实现,跟创立贪吃蛇思想是同样,但是在运营过程中刚刚开始时候不浮现障碍物,日后在教师协助下发现本来少一句话,需要在NowStar()函数中增长障碍物显示
for(inti=0;i {this.panel1.Controls.Add((Label)sk.Wall[i]);} (3)在玩游戏过程中发现食物会与墙壁尚有炸弹重叠状况,然后通过度析因素,这与构造食物时判断食物与身体与否接触道理是同样,这里需要加一种循环语句来判断,如果不是墙话才在这里创造食物。 (4)在创造炸弹实现过程中,总是在炸弹右半边任何位置都爆炸,通过一步一步调试检查是在判断语句时右侧范畴太大,导致有半侧没有炸弹也爆炸。 通过调试找到对的范畴。 2、实验成果 (1)游戏运营主界面 (2)协助界面 (3)结束界面 五、实验心得 这次课设对我来说有很大收获,我学到了许多课本上没有学到知识,这次我将将课本上理论知识充分转化成了某些实用技能。 通过这次自己制作软件,丰富了自己实践技能,扩展课本专业知识面。 在这次设计同步,我又从中学到了许多东西。 但由于我对这样软件开发还只是一种开始,理解不多,这其中或许尚有诸多局限性,有些模块做不是较好,界面设计及整体布局还是比较简朴。 此外,在这一次课程设计过程中,我上网查阅了大量资料,对C#有了更深理解,对于软件工程这些辅助性教材也巩固了不少,为我这次课设提供了很大协助,锻炼了我能力。 更重要是,它还让我结识到了自己局限性之处,在编程方面,我还是比较欠缺,后来路任重道远,我需要事不断地丰富自己,充实自己,这样才干在程序设计方面有所收获。 最后感谢教师在这次课程设计中对咱们悉心辅导,通过这次学习,让咱们掌握了诸多关于C#.NET应用知识。 六、参照资料 [1]陈俊荣.ASP与网络数据库技术[M].北京: 中华人民共和国铁道出版社,. [2]张绣兰.ASP网站建设实录[M].北京: 北京但愿电子出版社.. [3]李华.DreamWeaver8网页设计程序教程[M].北京: 清华大学出版社.. [4]江开耀.软件工程[M].西安: 西安电子科技大学出版社. 七、附录: 源代码 snake源代码如下: usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Windows.Forms; usingSystem.Collections; usingSystem.Drawing; usingSystem.ComponentModel; usingSystem.Data; namespaceSnake { classsnake { publicPointfood_p;//定义食物位置 privateLabelfood;//定义食物 publicLabelFood//食物属性 { get{returnfood;} set{food=value;} } privateArrayListbody=newArrayList();//定义食物定义食物链表 publicArrayListBody//食物链表属性 { get{returnbody;} set{body=value;} } //定义障碍物上下左右各面墙蛇撞墙即死 privateArrayListwall=newArrayList(); publicArrayListWall { get{returnwall;} set{wall=value;} } privateArrayListwall1=newArrayList(); publicArrayListWall1 { get{returnwall1;} set{wall1=value;} } privateArrayListwall2=newArrayList(); publicArrayListWall2 { get{returnwall2;} set{wall2=value;} } privateArrayListwall3=newArrayList(); publicArrayListWall3 { get{returnwall3;} set{wall3=value;} } publicvoidCreateSnake()//使用Label进行创立一种蛇 { intleft=20; Labellb; for(inti=0;i<2;i++) { lb=newLabel(); lb.Name="label"+i.ToString(); lb.BackColor=Color.Green; lb.Width=10; lb.Height=10; lb.Top=0; lb.Left=left; body.Add(lb); left-=10; } } publicvoidCreateWall()//使用Label进行创立障碍物 { intleft=200; Labellb0; for(inti=0;i<10;i++) { lb0=newLabel(); lb0.Name="label"+i.ToString(); lb0.BackColor=Color.Red; lb0.Width=10; lb0.Height=10; lb0.Top=50; lb0.Left=left; wall.Add(lb0); left-=10; } } publicvoidCreateWall1() { intleft=200; Labellb1; for(inti=0;i<10;i++) { lb1=newLabel(); lb1.Name="label"+i.ToString(); lb1.BackColor=Color.Red; lb1.Width=10; lb1.Height=10; lb1.Top=310; lb1.Left=left; wall1.Add(lb1); left-=10; } } publicvoidCreateWall2() { inttop=200; Labellb2; for(inti=0;i<10;i++) { lb2=newLabel(); lb2.Name="label"+i.ToString(); lb2.BackColor=Color.Red; lb2.Width=10; lb2.Height=10; lb2.Left=50; lb2.Top=top; wall2.Add(lb2); top-=10; } } publicvoidCreateWall3() { inttop=200; Labellb3; for(inti=0;i<10;i++) { lb3=newLabel(); lb3.Name="label"+i.ToString(); lb3.BackColor=Color.Red; lb3.Width=10; lb3.Height=10; lb3.Left=260; lb3.Top=top; wall3.Add(lb3); top-=10; } } //创立食物 publicvoidCreateFood() { Randomrand=newRandom(); food_p.X=rand.Next(36)*10;//限定食物物所能浮现横坐标 food_p.Y=rand.Next(36)*10;//限定食物物所能浮现横坐标 for(inti=0;i { if(food_p.Y==((Label)body[i]).Top&&food_p.X==((Label)body[i]).Left) { this.CreateFood(); break; } } //判断食物和所见障碍物与否重叠 for(inti=0;i { if(food_p.Y==((Label)this.Wall[i]).Top&&food_p.X==((Label)this.Wall[i]).Left) { this.CreateFood(); } elseif(food_p.Y==((Label)this.Wall1[i]).Top&&food_p.X==((Label)this.Wall1[i]).Left) { this.CreateFood(); } elseif(food_p.X==((Label)this.Wall2[i]).Left&&food_p.Y==((Label)this.Wall2[i]).Top) { this.CreateFood(); } elseif(food_p.X==((Label)this.Wall3[i]).Left&&food_p.Y==((Label)this.Wall3[i]).Top) { this.CreateFood(); } } food=newLabel(); food.Width=10; food.Height=10; food.Top=food_p.Y; food.Left=food_p.X; //加载食物图片 food.Image=Snake.Properties.Resources.food; } //蛇吃食物通过timer进行速度设立 publicPanelEatFood(Panelpanel1,Timertimer1,TextBoxtextBox1,TextBoxtextBox2) { if(((Label)body[0]).Top==food_p.Y&&((Label)body[0]).Left==food_p.X) { panel1=this.DeFood(panel1); Labellb=newLabel();//增长蛇身 lb.Name="label"+body.Count.ToString(); inti=body.Count%3; if(i==0) lb.BackColor=Color.DimGray; elseif(i==1) lb.BackColor=Color.DeepPink; else lb.BackColor=Color.DeepSkyBlue; lb.Width=10; lb.Height=10; lb.Top=((Label)body[body.Count-1]).Top; lb.Left=((Label)body[body.Count-1]).Left; body.Add(lb); textBox1.Text=Convert.ToString(Convert.ToInt32(textBox1.Text)+10); textBox2.Text=textBox1.Text; if(Convert.ToInt32(textBox2.Text) textBox2.Text=textBox1.Text; //修改速度 if(textBox1.Text=="50") timer1.Interval=150; elseif(textBox1.Text=="100") timer1.Interval=100; elseif(textBox1.Text=="150") timer1.Interval=80; elseif(textBox1.Text=="200") timer1.Interval=50; elseif(textBox1.Text=="250") timer1.Interval=20; } returnpanel1; } //吃过后销毁再创立食物 publicPanelDeFood(Panelpanel1) { panel1.Controls.Remove(food); this.CreateFood(); panel1.Controls.Add(food); returnpanel1; } } } //Form源代码: usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; usingSystem.Text; usingSystem.Windows.Forms; usingSystem.Collections; usingSystem.Media; namespaceSnake { publicpartialclassForm1: Form { publicForm1() { InitializeComponent(); } privatesnakesk=newsnake();//构造一种蛇对象 privateintdir=3;//初始时要运动方向(向右) privatePointbomb_b;//定义炸弹 privateLabelbomb; publicvoidCreatBomb()//创立炸弹 { Randomrand=newRandom(); bomb_b.X=rand.Next(20)*10; bomb_b.Y=rand.Next(20)*10; bomb=newLabel(); bomb.Width=10; bomb.Height=10; bomb.Top=bomb_b.Y; bomb.Left=bomb_b.X; bomb.Image=Snake.Properties.Resources.b2; //判断随机炸弹与否与随机食物重叠 if(bomb_b.X==sk.food_p.X&&bomb_b.Y==sk.food_p.Y) { CreatBomb(); } } //清除炸弹 publicPanelDeBomb(Panelpanel1) { panel1.Controls.Remove(bomb); returnpanel1; } privateintdiring=-1;//正在运动方向 privatevoidbutton1_Click(objectsender,EventArgse)//开始 { textBox1.Text="0"; button3.Enabled=true; timer1.Start(); panel1=sk.DeFood(panel1); this.CreatBomb(); panel1.Controls.Add(bomb); } privatevoidbutton2_Click(objectsender,EventArgse)//暂停 { timer1.Stop(); } privatevoidbutton3_Click(objectsender,EventArgse)//新游戏 { textBox1.Text="0"; timer1.Interval=200; button3.Enabled=false; panel1.Controls.Clear(); sk.Body.Clear(); sk.CreateSnake(); Now
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 游戏 课程设计 实验 报告 样本