




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
专业综合实践课程设计目录一 项目名称及说明11.1项目名称:11.2项目说明:11.3调试环境1二 设计方案22.1设计流程22.2设计思想2三 程序详细设计说明33.1游戏开始前速度选择33.2随机指定蛇,食物,围墙的数组43.3根据数组画出界面53.4获取按键事件63.5蛇移动时的处理73.6蛇吃食物的处理93.7蛇撞墙的处理93.8游戏主窗体载入时事件函数103.9计时器触发的事件10四 程序运行界面114.1 选择级别界面114.2游戏界面114.3游戏结束界面124.4 帮助界面12五 结束语12五 参考文献13一 项目名称及说明1.1项目名称:基于.NET窗体编程的贪吃蛇小游戏1.2项目说明: 本项目实现的贪吃蛇小游戏以供用户进行娱乐。用户在游戏开始前可自行选择游戏速度。进入游戏后边框内会随机出现若干个绿色的食物和红色的围墙,用户通过“上下左右”键可控制蛇的移动方向吃绿色食物,同时需要避免蛇头撞到红色围墙或者边框。如果蛇头碰到绿色食物则说明食物被吃,食物在框内消失,蛇头碰到围墙或者边框则游戏失败。当食物全部吃光后进入下一关,下一关有更多的食物和围墙。按z键可加速按x键可减速。1.3调试环境 Windows XP系统以及visual studio 2008二 设计方案2.1设计流程2.2设计思想 用一个小矩形表示蛇身的一节,蛇头用黑色表示。定义三个数组分别存放蛇,食物还有围墙的像素点。利用定时器timer不断触发窗体内的事件,用背景色清理窗体,重新画出蛇,食物,围墙以达到蛇移动的效果。每次触发时都要坚持存放蛇的数组是否与食物的数组或者围墙的数组相重合,如果与食物数组相重合则取得食物数组中该点并将分散加1,如果与围墙数组相重合则调用end()函数结束游戏。此外如果用户按键则触发按键的函数,如果按键为方向键且与当前蛇前进方向不一样则改变蛇的方向与按键一致,如果按了z,x键则改变计时器timer的时间间隔缩短或增长,按了空格键则暂停。三 程序详细设计说明3.1游戏开始前速度选择说明:选择速度越快,timer计时器的间隔时间越短13private void ok_Click(object sender,EventArgs e)snake.Speed=300/this.speed.Value;if(this.speed.Value=4)snake.Speed=45;if(this.speed.Value=5)snake.Speed=10;this.Close();private void sp_vc(object sender,EventArgs e)switch(this.speed.Value)case 1:this.l1.Text=速度: 慢;break;case 2:this.l1.Text=速度: 中;break;case 3:this.l1.Text=速度: 快;break;case 4:this.l1.Text=速度: 很快;break;case 5:this.l1.Text=速度: 死亡速度;break;3.2随机指定蛇,食物,围墙的数组说明:在指定数组时考虑了游戏刚开始和游戏过关后两种情况public void reset()/随机指定墙和点的位置 this.walls = new ArrayList(); this.nuts = new ArrayList(); Random ran = new Random(); this.headc = Color.Black; /设置蛇身颜色为绿色 this.bodyc = Color.Green; this.direction = Way.right; /开始时 if (this.cart.Count = 3) for (int i = -1; i 3) for (int i = 2 - this.cart.Count; i = 1; i+) Point n = new Point(this.sl * i, this.sl * (this.district.Height / this.sl / 2); this.carti - 2 + this.cart.Count = n; for (int i = 0; i this.now; i+) Point po = new Point(); po.X = ran.Next(10, this.district.Width); po.Y = ran.Next(0, ran.Next(0, this.district.Height - this.wl.Height); this.walls.Add(po); for (int i = 0; i this.nop; i+) Point po = new Point(); int w = ran.Next(1, this.district.Width / this.sl); po.X = w * this.sl; w = ran.Next(0, this.district.Height / this.sl - 1); po.Y = w * this.sl; this.nuts.Add(po); this.timer.Start();3.3根据数组画出界面private void drawsnake() Graphics g = this.CreateGraphics(); /画出墙,每局之后tom.now加1 越到后面墙越多 for (int i = 0; i this.Tom.Now; i+) g.FillRectangle(Brushes.Red, new Rectangle(Point)(this.Tom.wallsi), this.Tom.Wl); /画出果实 越到后面果实也越多 for (int i = 0; i this.Tom.nuts.Count; i+) g.FillRectangle(Brushes.Green, new Rectangle(Point)(this.Tom.nutsi), this.Tom.Ssl); /画出蛇身 for (int i = 0; i = 37 & a 20) this.timer.Interval -= 20; /使用x键减速 if (a = (int)Keys.X) this.timer.Interval += 20; if (a = (int)Keys.Escape) this.Close(); 3.5蛇移动时的处理 public void move() int o = this.cart.Count - 1; for (int i = 0; i = o - 1; i+) this.carti = this.carti + 1; /碰到墙后游戏结束 foreach (Point e in this.walls) Point h = (Point)(this.carto); if (new Rectangle(e, this.wl).Contains(h) this.end(); return; /碰到边框后游戏结束 Point head = (Point)(this.carto); if (head.X = this.district.Width | head.Y = this.district.Height - 1) this.end(); return; switch (this.direction) case Way.right: this.carto = new Point(head.X + this.sl, head.Y); for (int i = 0; i this.nuts.Count; i+) Point p = (Point)this.nutsi; if (head.X = p.X - this.sl & head.Y = p.Y) this.eat(i); break; break; case Way.left: this.carto = new Point(head.X - this.sl, head.Y); for (int i = 0; i this.nuts.Count; i+) Point p = (Point)this.nutsi; if (head.X = p.X + this.sl & head.Y = p.Y) this.eat(i); break; break; case Way.up: this.carto = new Point(head.X, head.Y - this.sl); for (int i = 0; i this.nuts.Count; i+) Point p = (Point)this.nutsi; if (head.X = p.X & head.Y = p.Y + this.sl) this.eat(i); break; break; case Way.down: this.carto = new Point(head.X, head.Y + this.sl); for (int i = 0; i this.nuts.Count; i+) Point p = (Point)this.nutsi; if (head.X = p.X & head.Y = p.Y - this.sl) this.eat(i); break; break; default: break; /当屏幕中所有点被吃完后,nop(点的数量)加1,now(墙的数量)加2 if (this.nuts.Count = 0) this.nop+; this.now += 2; this.reset(); 3.6蛇吃食物的处理说明:蛇的像素点和食物像素点重合时即表明吃到食物,可以从数组中移除该点private void eat(int i) Point p = (Point)(this.nutsi); this.cart.Add(new Point(p.X, p.Y); this.nuts.RemoveAt(i);/移除此处的点 3.7蛇撞墙的处理说明:判断撞墙的过程即是判断蛇的像素点和墙的像素点重合的过程,如果重合则结束游戏重新开始private void end() this.timer.Stop(); MessageBox.Show(您的得分为:+(cart.Count-3)+); this.cart.RemoveRange(0, this.cart.Count - 3);/去除一定范围 this.now = snake.Wn; this.nop = snake.Nn; this.reset(); 3.8游戏主窗体载入时事件函数private void Form1_Load(object sender, EventArgs e) this.Text = 贪吃蛇; this.Size = new Size(300, 300); this.Location = new Point(500, 200); this.FormBorderStyle = FormBorderStyle.FixedToolWindow; this.timer = new Timer(); this.Tom = new snake(this.ClientRectangle, timer); this.timer.Interval = snake.Speed;/设置时间间隔为用户所选级别 this.timer.Tick += new EventHandler(timer_Tick); this.timer.Start(); 3.9计时器触发的事件private void timer_Tick(object sender, EventArgs e) Graphics g = this.CreateGraphics(); g.Clear(Color.DeepSkyBlue); this.drawsnake(); this.BackColor = Color.DeepSkyBlue; this.Tom.move(); 四 程序运行界面4.1 选择级别界面4.2游戏界面4.3游戏结束界面4.4 帮助界面五 结束语通过本次课设我得到了许多锻炼,增长了许多知识。增加了我对C#语言的了解。我觉得课设是将课本上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版合同代理协议书范本
- 会计英语(第六版)课件 Lesson 4 LONG TERM ASSETS
- 2025林地流转合同样本
- 营销知识培训大纲课件
- 2025-2026学年七年级语文上册第五单元检测基础卷( 含答案)
- 2025-2026学年七年级语文上册第三单元检测培优卷(含答案)
- 2025年合同变更与解除管理规定的工程案例分析
- 2025年绿色金融产品创新与市场绿色金融产品创新驱动因素分析报告
- 2024人教版七年级生物上册第一、二单元共2套单元练习试卷(含答案)
- 2025设备租赁合同示范文本设备租赁合同
- 《教育魅力-青年教师成长钥匙》
- 《生物多样性公约》及国际组织课件
- 绪论(遗传学)课件
- 种子全程质量管理制度
- 滴定管使用课件
- 单片机应用技术项目教程C语言版ppt课件(完整版)
- 公司金融课件(完整版)
- 公司员工薪资审批表
- 高处作业审批表
- 太湖综合整工程生态清淤取土工程施工组织设计
- 14S501-1 球墨铸铁单层井盖及踏步施工
评论
0/150
提交评论