课题名称:贪吃蛇游戏的设计与实现院(系):唐山职业技术学院专业:计算机科学与技术学生姓名:阚建伟学号:091320209指导教师:杜金满2012年6月摘要C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。
并定于在微软职业开发者论坛(PDC)上登台亮相。
C#是微软公司研究员Anders Hejlsberg的最新成果。
C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。
但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角。
“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。
本文基于C#技术和.NET Framework开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。
整个游戏包括开始、暂停、结束、音乐的播放及关数的选择等功能。
通过本游戏的开发,达到学习C#技术和熟悉软件开发流程的目的。
本文在介绍C#相关技术和国内外发展现状的基础上,对“贪吃蛇”游戏的整个生命周期的各个开发阶段进行了详细地介绍。
首先,分析了开发本游戏软件的可行性,重点分析本设计所采用的技术的可行性。
其次,从游戏主界面等几方面,分析了本游戏的功能需求;从可使用性和安全性方面分析了属性需求。
然后,进行了游戏的概要设计和详细设计,这也是本文的重点。
本文还介绍了游戏软件的程序调试过程和功能测试结果。
关键词:C#;.NET Framework;“贪吃蛇”游戏目录第一章游戏开发环境 (1)1.1 开发工具 (1)1.2 应用环境 (2)第二章游戏需求分析 (2)2.1 需求分析 (2)2.2 可行性分析 (2)第三章程序概要设计 (2)3.1 设计目标 (2)3.2 程序功能模块 (3)第四章程序详细设计 (4)4.1 程序设计 (4)第五章游戏测试 (21)5.1 测试的意义 (21)5.2 测试过程 (21)5.3 测试结果 (21)参考文献 (22)第一章游戏开发环境1.1 开发工具C#(读做"C sharp")中文译音暂时没有.专业人士一般读"C sharp",现在很多非专业一般读"C井"。
C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。
它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。
C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。
并且C#成为ECMA与ISO标准规范。
C#看似基于C++写成,但又融入其它语言如Pascal、Java、VB等。
Microsoft在正式的场合把C#描述为一种简单、现代、面向对象、类型非常安全、派生于C和C++的编程语言。
大多数独立的评论员对其说法是“派生于C、C++和Java”。
这种描述在技术上是非常准确的,但没有涉及到该语言的真正有点。
从语法上看,C#非常类似于C和Java,许多关键字都是相同的,C#也使用类似于C和C++的块结构,并用括号({})来标识代码块,用分号分隔各行语句。
对C#代码的第一印象是它非常类似于C和Java代码。
但在这些表面上的类似性后面,C#学习起来要比C++容易得多,但比Java难一些。
其设计与现代开发工具的适应性要比其他语言更高,它同时具有Visual Basic的易用性、高性能以及C++的低级内存访问性。
C#包括以下一些特性:●完全支持类和面向对象编程,包括接口和继承、虚函数和运算符重载的处理。
●定义完整、一致的基本类型集。
●对自动生成XML文档说明的内存。
●自动清理动态分配的内存。
●可以用用户定义的特性来标记类或方法●对.NET基类库的完全访问权,并易于访问Windows API。
●可以使用指针和直接内存访问,但C#语言可以在没有它们的条件下访问内存。
●以VB的风格支持属性和事件。
●改变编译器选项,可以把程序编译为可执行文件或.NET组件库,该组件库可以用与ActiveX控件(COM组件)相同的方式由其他代码调用。
●C#可以用于编写动态Web页面和XML Web服务。
1.2 应用环境(1).操作系统:Windows NT、Windows XP、Windows 7(2). 应用软件:Microsoft Visual Studio 2008第二章游戏需求分析2.1 需求分析本游戏用户可以自己练习和娱乐。
本游戏需要满足以下几点要求:(1)利用方向键“W、A、S、D”来改变蛇的运行方向。
(2)空格键暂停游戏,并在随机的地方产生食物。
(3)吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
(4)用户可以根据需要暂停,以及根据水平选择不同的游戏难度。
2.2 可行性分析贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。
贪吃蛇的核心算法是如何实现蛇的移动和吃掉食物后如何变成新的蛇体。
没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效果。
而在吃到食物的时候,则只需把食物入队即可。
实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始及背景音乐的播放。
玩家可以根据自己的水平选择不同的级别进行游戏挑战。
当每个级别的分数达到200后,会提示玩家选择进入下一关进行更高难度的挑战。
第三章程序概要设计3.1 设计目标本软件是针对贪吃蛇小游戏的C#程序,利用方向键来改变蛇的运行方向,空格键暂停游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行,背景音乐可以暂停或播放。
3.2 程序功能模块游戏大体框架如下所示:图-1 游戏大体框架键盘控制蛇运动蛇吃食物吃一个加10分,当分数达到100时,提示进入下一关开始暂停蛇开始运动蛇暂停运动游戏启动界面 游戏主菜单 游戏窗口结束重新开始显示重新绘制蛇 显示分数结束游戏动下一关进入下一关第四章程序详细设计4.1 程序设计1.游戏启动窗口此窗口为进入游戏的欢迎界面,在任务栏上不显示图标。
窗口界面截图如下:图-2游戏启动窗口主要功能代码如下:private void启动窗口_Load(object sender, EventArgs e){//设臵启动窗体this.FormBorderStyle = FormBorderStyle.None;this.BackgroundImage = Image.FromFile("贪吃蛇.Jpg");this.timer1.Start();this.timer1.Interval = 1500;}private void timer1_Tick(object sender, EventArgs e){//关闭启动窗体this.Close();}private void启动窗口_FormClosed(object sender, FormClosedEventArgs e){//关闭定时器this.timer1.Stop();}2.游戏主菜单窗口此窗口为进入游戏与否及获取游戏帮助的界面,选择“帮助”按钮可以获得游戏相关操作的帮助,选择退出可直接退出游戏,选择进入游戏则可以开始游戏。
主菜单窗口和帮助窗口都会在任务栏上显示图标。
窗口界面截图如下:图-3主菜单窗口帮助窗口截图如下:图-4帮助窗口主要功能代码如下:private void btnStart_Click(object sender, EventArgs e) {MessageBox.Show("游戏即将开始!");this.DialogResult = DialogResult.OK;}private void btnExit_Click(object sender, EventArgs e) {this.Close();}private void btnHelp_Click(object sender, EventArgs e) {var frm_Help = new frmHelp();frm_Help.Show();}private void Form2_Load(object sender, EventArgs e){启动窗口myFlash = new启动窗口();myFlash.ShowDialog();}3.游戏主窗口此窗口为整个程序的主要部分,该窗口包含了游戏开始、暂停、重新开始、停止音乐、退出游戏、难度选择及分数显示等功能。
当进入游戏窗口后,开始按钮就会自动获得聚焦,只要玩家按下回车或点击“开始”按钮就可以开始游戏。
蛇的初始默认为左上角,颜色为蓝色;食物为随机产生,颜色为红色;游戏背景为轻绿色,整个游戏框架按红、蓝、绿三原色设计。
窗口截图如下所示:图-5游戏初始窗口游戏开始后,蛇通过蛇头headPoint获取下一个位臵,然后将下一个点绘制成蛇体新蛇头,而同时蛇尾则绘制成游戏框架GameFrame的一部分,从而实现了蛇体不断向前移动的效果。
当蛇遇到食物时,蛇头headPoint与食物foodPoint重合,使其绘制成为新的蛇头,然后又重新随机产生一个食物。
当蛇吃够20个食物时,也就是分数达到200时,游戏会暂停,提示玩家选择下一关进行游戏。
每一关游戏的速度都会按一定的比例递增增加,此功能的实现代码如下:switch (boBox1.SelectedIndex){case 0: this.timer1.Interval = 500; break;case 1: this.timer1.Interval = 400; break;case 2: this.timer1.Interval = 300; break;case 3: this.timer1.Interval = 200; break;case 4: this.timer1.Interval = 100; break;}窗口截图如下所示:图-6闯关成功窗口或者如果玩家想重新开始游戏,则点击“重新开始”按钮,此时会弹出一个对话框,要求玩家确认是否重新开始,如果选择“否”,则游戏继续进行,如果选择“是”,则此时游戏的基本框架会自动重新绘制,蛇体回到初始默认状态。
窗口截图如下所示:图-7重新开始窗口当蛇头碰到自身或是碰到墙壁时,则游戏暂停,系统提示玩家是否重新开始游戏。