1、 算法设计与分析课程设计 扫雷游戏设计 班 级 计科 1003 班 姓 名 指 导 教 师 开 发 时 间 2012.12.18 湖南涉外经济学院 信息科学与工程 学 院 2012 年 12 月 摘 要 扫雷游戏是 Windows 操作系统自带的一个小游戏,过去的几年里 Windows操作系统历经数次换代,变得越来越庞大、复杂,但这个可爱的小游戏在任何版本的 Windows 操作系统里去地依然保持着原貌。但几乎每个电脑使用者都接触过它,并且深爱着这款小游戏。 游戏 上手极其简单,但是要熟练地掌握其中的操作及找出雷的技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款
2、游戏都无法相比的。 游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示标示疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“ 3”,则表示以其为中心的周边方块内藏有 3 个地雷。当按下的方块 不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。 扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法和语言实现,如 C, C+, VB, Jave, C#等。本
3、论文研究的是以 java 为开发环境,设计并开发一款扫雷游戏,其功能类似于 Windows 操作系统自带的扫雷游戏。论文首先介绍了制作游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为重要 ,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作。 关键词: java;扫雷;课程设计; 第 1 页 目 录 第一章 引言 . 2 1.1 课题背景及意义 . 2 1.2 开发的目的以及意义 . 2 1.3 关于本课题 . 3 第二章 游戏的总体分析 . 4 2.1
4、 游戏功能简介 . 4 2.2 扫雷游戏的基本要求 . 4 2.3 功能需求分析 . 5 第三章 游戏的具体分析 . 6 3.1 总体功能图 . 6 3.2 主要功能设计流程 . 7 3.2.1 总体流程图 . 7 图 3-2-1 总体流程图 . 7 3.2.2 雷区设计流程图 . 8 3.2.3 排行榜设计流程图 . 9 3.3 各个类的详细介绍与关键代码 . 9 3.3.1 类之间关系图 . 9 3.3.2 MainFrame 类 .10 3.3.3 LEDNumber 类 .12 3.3.4 MineGrid 类 .13 3.3.5 AboutDialog 类 .13 3.3.6 Cus
5、tomDialog 类 .14 3.3.7 ImageFactory 类 .15 3.3.8 UserDialog 类 .15 3.3.9 LevelInfo 类 .15 3.3.10 LogDialog 类 .17 第四章 游戏的实现 .19 4.1 游戏的初级界面 .19 4.2 游戏的中级界面 .20 4.3 游戏的高级界面 .21 4.3 游戏的打包发布过程 .22 第五章 结 论 .24 参考文献 .25 第 2 页 第一章 引言 1.1 课题背景及意义 扫雷最原始的版本可以追溯到 1973 年一款名为 “方块 ”的游戏。不久之后,“方块 ”被改写成了游戏 “Rlogic”。在 “R
6、logic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆 安德森在 “Rlogic”的基础上又编写出了游戏 “地雷 ”,由此奠定了现代扫雷游戏的雏形。 1981 年, 微软公司的罗伯特 杜尔和卡特 约翰逊两位工程师在 Windows 3.1 系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。 在计算机逐步渗入社会生活各个层面的今天,计算机已经成为了人们日常生活中的一部分,越来越多的人使用计算机办公、娱乐等等。 在这其中,系统自带的小游戏也占据 了相当重要的地位,与那些网络游戏和 3D 游戏相比,它有编写简单容易上手等特点
7、 ,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。这些小游戏包括扫雷,弹球,纸牌等等。而本课题就是扫雷游戏的设计。 1.2 开发的目的以及意义 大学以来各门专业课程的学习,让我综合知识全面提升了很多。为了提高自己的动手能力,将知识灵活的运用,此次我设计了一个扫雷程序。希望将书本上所学的理论知识与实际相结合,通过本次的程序设计使自己在程序的开发和设计上有新的认识并能有所提高。也对于我们以后工作能力的培养具有重要意义。 第 3 页 1.3 关于本课题 至少需实现的主要功能(也可以加上一些扩展功能): (1)
8、用户可以自定义级别并且可以任意输入雷数; (2) 具有计时功能; (3) 可以查看英雄榜。 可以不实现的功能: (4) 可以不做问号; (5) 可以不做鼠标左右两键同时操作; (6) 可以不做鼠标移动。 第 4 页 第二章 游戏的总体分析 2.1 游戏功能简介 扫雷游戏的基本功能: 点击鼠标左键于雷区,如果雷区有雷 ,显示所有的地雷后游戏结束。若无雷,则显示周围雷数。如果周围没雷的话,则查看 周围八个区域是否有雷直到有雷为止并显示,这其实是一个递归过程。点击鼠标右键于雷区,则将其置为有雷而不管是否真的有雷。用户可选择初、中、高三级也可自定义雷数和区域大小。雷区左上角显示总雷数减去被标明有雷区域
9、的数目。雷区右上角显示扫雷的时间。 将雷全部扫清或失败后显示成功或失败的对话框。 下面是该游戏的几大功能: 开局:首先选择游戏等级,然后生成不同等级的雷区界面。游戏等级分为三级:各等级方块数为 初级、中级、高级;雷区每个方块下面或埋藏有 1 个地雷,或者没有地雷; 挖雷:将光标移到某个方块,可挖开它;若所揭方 块下有雷,则踩雷,此时所有含地雷的块都标记 该局游戏失败 );如果方块上出现数字,它代表在它周围的 8 个方块中共有多少颗地雷; 标记地雷:在光标所在的某个方块上右击,则标记此块下埋着地雷(有可能也是误标)。每标记一个地雷,地雷数减少 1; 2.2 扫雷游戏的基本要求 Windows 2
10、000/XP 系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用 Java 语言编写一个与其类似的扫雷游戏。具体要求如下: (1) 扫雷游戏分为初级、中级和高级三个级别。单击游戏菜单可以选择“初级”、“中级”和“高级”。 第 5 页 (2) 选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击“开始”便启动计时器。 (3) 用户要揭开某个方块,可左键单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的 8 个方块中共有多少颗雷。 (4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记
11、。用户每标记出一个扫雷标记 (无论用户的标记是否正确 ),程序将显示的剩余雷数减少一个。 (5)当用户点中雷时,将有“你输了”的提示出现,胜利时,将有“你赢 了”的提示出现。 2.3 功能需求分析 本程序为 java 课程设计。参考 Windows 自带的扫雷游戏做了简化。用 java编写,采用了 Swing 界面。实践了 java 课程多方面的内容。 本程序实现了主要游戏的主要方面,单游戏固定为 10 x 10 格,难度三级:12, 24, 36。主要实现了如下算法:单击某行某列后产生不在单击处引爆的地图。出现空格后引发递归的清空算法。检测是否所有地雷都被标记,且没有多标的胜利检测算法。控制
12、一个计数器产生计时效果的计时器算法。等侯用户单击返回的线程。以及可区分用户鼠标左键,右 键和左右两键单击的事件处理方法。 程序设计主要考虑了程序的完整性和规范性。界面符合 Windows 常规,主要通过菜单和按钮与用户交互。所有菜单项都实现了响应功能。且主界面多用图标示意,较美观。 第 6 页 第三章 游戏的具体分析 3.1 总体功能图 图 3-1 总体功能图 第 7 页 3.2 主要功能设计流程 3.2.1 总体流程图 图 3-2-1 总体流程图 开始 定义并初始化按钮,菜单等 事件处理 菜单 按钮 重新开始 方块 开局 初级 高级 中级 自定义 英雄榜 退出 展示相应效果 N 是否点中雷 结束 Y 算法课程设计 -扫雷游戏 第三章 游戏的具体分析 第 8 页 3.2.2 雷区设计流程图 开 始开 始定 义 并 初 始 化M i n e G r i d 类获 取 相 应 的 设置 , 并 为 方 块 产生 随 机 数 字 赋 值计 数 器 数 小 于 等 级 雷 数存 放 赋 值 雷区 , 计 数 器 加 1鼠 标 是 否 点 击处 理 周 围 信 息 ,并 显 示 相 应 效 果YNYN图 3-2-2 雷区设计流程图