
贪吃蛇实训报告.doc
21页轻工业学院实训报告实训名称:贪吃蛇指导教师::**:班级:提交日期:一.实验目的通过开发一款贪吃蛇游戏程序,熟练掌握C#编程语言、和面向对象程序设计方法,独立完成一个游戏程序的开发二.实验题目本次实训的题目为贪吃蛇通过使用C#编程语言来实现三.功能描述1.游戏的根本功能描述1) 游戏场地是一片矩形区域的空地构成,蛇可以在这片定义的区域中自由移动2) 定义一个Block来构成石块,蛇头,蛇身以及豆蛇由蛇头和蛇身组成3) 当游戏开场之后,定义的区域中出现一颗豆和一条蛇,并且蛇不停地移动,蛇移动的方向与蛇头的方向一致4) 通过space或者暂停键可以使游戏停顿,蛇停顿移动,分数停顿积分5) 当蛇移动时,玩家可以使用"↑〞、"↓〞、"←〞和"→〞四个方向键改变蛇的移动方向6) 当蛇头与豆的位置重合时,豆被蛇吃掉,同时在草坪中再生成一颗新的豆,蛇身增加一节7) 当蛇头碰到石块时,蛇死亡,游戏完毕8) 当蛇头咬到蛇身时,则蛇死亡,游戏完毕9) 当蛇头碰到草坪四周时,蛇立即毙命,游戏完毕10) 游戏分为不同的级别,第一关游戏速度为200,当蛇吃五个豆子就可以过关,级别显示为2,速度增加100变为300.第二关为吃够10个豆子,速度增加50,以后以此类推。
11) 游戏菜单中设有游戏帮助,玩家可以通过点击帮助了解游戏的玩法12) 对于不是第一次玩的玩家可以改变蛇的运动速度,来增加难度在菜单中设有加速和减速两个键,单击可以改变速度13) 游戏菜单中还有时间显示14) 当游戏暂停时,可以通过"继续〞键使游戏继续进展四.需求分析本游戏用户可以自己练习和娱乐本游戏需要满足以下几点要求:(1) 利用方向键"↑、↓、←、→〞来改变蛇的运行方向2) 空格键暂停游戏,并在随机的地方产生食物3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏完毕,否则正常运行可行性分析:贪吃蛇游戏是一种简单的群众的游戏,自从计算机实现以来,深受广阔电脑玩家的喜爱,做一个简单的贪吃蛇小游戏贪吃蛇的核心算法是如何实现蛇的移动和吃掉食物后如何变成新的蛇体没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背风光重绘出队的节点,这样就可以到达移动的效果而在吃到食物的时候,则只需把食物入队即可实现贪吃蛇的根本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开场玩家可以根据自己的水平选择不同的级别进展游戏挑战。
贪吃蛇游戏中定义如下:1) 空白区域〔Lawn〕:定义的区域是贪吃蛇游戏的场地豆、石头和蛇只能存在于空白区域的范围之内根据个人爱好还可以添加背景,改变区域的大小和颜色2) 蛇〔Snake〕:在贪吃蛇游戏中,蛇由假设干节组成,其中第一节是蛇头,在蛇头上面定义两个点,作为蛇的眼睛,其余是蛇身在游戏过程中,有且仅有一条蛇,并且蛇在不停地移动如果蛇吃了豆,则蛇生长一节如果蛇头碰到蛇身,蛇死亡,游戏完毕如果蛇头离开所定义的区域,则蛇死亡游戏完毕当蛇头撞到定义的石块上的时候游戏完毕在定义蛇的时候可以改变蛇的初始长度,也可以改变蛇的颜色和大小3) 豆〔Bean〕:在贪吃蛇游戏中,豆是蛇的食物在游戏过程中,有且仅有一颗豆如果蛇吃了豆,则重新生成一颗豆豆的出现是随机性的4〕石块〔stone〕:游戏中石块和豆是同时出现的,不同的是,豆是随机产生的,而石块是固定的,它的坐标在写代码的时候就定义好了,不能够改变它的大小和颜色也可以随便的改变5〕菜单〔MenuStrip〕:在贪吃蛇游戏中有游戏菜单,里面有开局、暂停、继续、加速、减速、帮助等菜单还有Label控件,显示速度、时间、日期和积分的五.设计说明Snake的每一节都有位置和大小等属性。
而Bean和stone也具有这两个属性抽象出这三者的共同特征,抽象出一般类Block,用于描述一个块Block派生出Bean和SnakeBlock两个类,其中SnakeBlock类用于描述蛇的一节为了使游戏的运行更易于控制,定义Game类用于启动、暂停和继续游戏根据需求分析可知,Lawn仅包含大小和颜色两个属性为了减少类的数量,可将其大小和颜色等属性添加到Game类中综上所述,在贪吃蛇游戏中,有Block〔块〕、Bean〔豆〕、SankeBlock〔节〕、Snake〔蛇〕、Game〔游戏〕和MainForm〔用户接口〕六个类游戏逻辑构思图如下:定义空白区域游戏开场生成石块生成豆生成蛇重新开局吃到蛇身增加豆增加级别统计分数石块碰到石壁游戏完毕游戏的设计如下:游戏图标及名称豆子成绩显示速度显示游戏菜单蛇身级别显示石块游戏的定义区域日期及时间显示六.源代码using System;using System.Collections.Generic;using System.ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Te*t;using System.Windows.Forms;namespace WindowsFormsApplication1{publicpartialclassMainForm : Form {int a = 200;//定义初速度为200privateGame game;//DateTime c;public MainForm() { Initializeponent(); game = newGame(lawn.Width, lawn.Height); timer1.Enabled = true; timer1.Interval = a; timer1.Enabled = false; Velocity.Te*t = a.ToString(); }Block是用来构成Bean〔豆〕和Snake〔蛇〕还有Stone〔石块〕的最根本的单位,是Bean和SnakeBlock的基类。
Block类的参考代码如下classBlock {protectedPoint origion; //Block的左上顶点publicconstint WIDTH = 10; //Block的宽度publicconstint HEIGHT = 10; //Block的高度protectedColor color; //Block的颜色public Block() { origion = newPoint(0, 0); color = newColor(); }public Block(int *, int y, Color _color) { origion = newPoint(*, y); color = _color; }publicPoint Origion {get {return origion; } }publicvoid Display(Graphics g) {SolidBrush brush = newSolidBrush(color); g.FillRectangle(brush, origion.*, origion.Y, WIDTH, HEIGHT);Pen pen = newPen(Color.Black); g.DrawRectangle(pen, newRectangle(origion.*, origion.Y, WIDTH - 1, HEIGHT - 1)); }publicvoid Clear(Graphics g, Color backGroundColor) {SolidBrush brush = newSolidBrush(backGroundColor); g.FillRectangle(brush, origion.*, origion.Y, WIDTH, HEIGHT); } }这是对豆的定义,是由Block派生而来的,在系统开场时,使豆产生,它的出现位置为随机生成。
其代码如下:classBean : Block {publicstaticint f = 0;//吃到豆子的个数public Bean(Color _color) { origion = newPoint(0, 0); color = _color; }publicvoid Creat(Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight, Snake snake) { Clear(g, backGroundColor);bool bGetAPosition = false; //是否找到生成豆的位置Random random = newRandom();while (!bGetAPosition) { origion.* = random.Ne*t(0, lawnWidth - 1) / WIDTH * WIDTH; origion.Y = random.Ne*t(0, lawnHeight - 1) / HEIGHT * HEIGHT;int i;for (i = 0; i < snake.Length; i++) {if (origion == snake.blocks[i].Origion)break; }if (i == snake.Length) bGetAPosition = true; } Display(g); f++; }newpublicvoid Display(Graphics g) {SolidBrush brush = newSolidBrush(c。






![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)





