基于JAVA的扫雷游戏课程设计
基于 JAVA 的扫雷小游戏 一、引言 本次课程设计目的在于设计开发一个类似 windows 自带扫雷游戏的小游戏, 实现基 本的扫雷面板及扫雷的游戏功能、游戏数据存储、游戏计时等功能。设计采用 Windows 下的 eclipse 开发工具由本人独立完成。 二、系统设计 本游戏采用快速原型模型的软件开发方法设计, 总共经历了八个版本的修改最终完 成设计要求。 在第一个版本中,实现如下功能 基于基于 JFrameJFrame 的扫雷框架的建立的扫雷框架的建立 使用 JFrame 建立起如图的所示的程序框架,雷区为 12*12,添加 JPanel 和 JButton,采用 setBounds 的布局方式而非内置的布局方法。 基于基于 RandomRandom 方法的虚拟雷盘的建立和动态修改方法的虚拟雷盘的建立和动态修改 通过 Random 产生出一个 14*14 的数组,其中,二维数组边缘对应边框标记值 为 2,产生的雷点标记为 1,普通点标记为 0。再次建立一个 12*12 的数组对应实 际的游戏面板,初始值为 0,遍历 14*14 的数组中非边缘的元素,将每个格子周围 的地雷数目赋值给对应的 12*12 数组,地雷仍然用-1 来表示,最后遍历 12*12 的 数组同时把数组中非 0 非-1 的数绘制到 JPanel 上, 值为-1 的元素向面板对应位置 添加一个地雷的图片(注地雷图片来自 Windows7 自带扫雷游戏的截图) 。 基于基于 ButtonButton 的雷区覆盖面板建立以及虚拟雷盘的的雷区覆盖面板建立以及虚拟雷盘的 ActionListenerActionListener 的连接的连接 将生成好的底板覆盖上 12*12 的 Button 并且为每个 Button 添加 ActionListener,实现点击后隐藏对应的 Button 功能。结果如下图 重新开始及其按键功能的实现重新开始及其按键功能的实现 通过“重新开始”按键重新生成雷区以及重新覆盖 Button 到所有格子。 关于按键及其功能关于按键及其功能 通过“关于”按键弹出一个 MessageDialog。 在第二个版本中,实现如下功能 新增利用递归算法实现的一次点开一片区域功能新增利用递归算法实现的一次点开一片区域功能 通过数据结构中的走迷宫算法在按键监听中加入了连锁点亮的算法, 点亮 该格,然后依次遍历 12*12 表的周围 9 格,发现为空格即递归调用遍历算法, 发现数字即点亮该格并 return,初步实现了如图所示的功能 新增虚拟访问判定表的建立和刷新及修改新增虚拟访问判定表的建立和刷新及修改 即通过查找已标记的正确的雷并且计数, 如果达到了设定了雷的最大值即 执行游戏结束的方法。 新增失败提示框和自动刷新功能新增失败提示框和自动刷新功能 即点亮了地雷的区域后, 自动弹出对话框提示失败并且执行游戏结束的方 法。 对原对原 boomboom 表进行了改动表进行了改动,解决了虚拟表和实际表的下标错位问题,解决了虚拟表和实际表的下标错位问题 将原 12*12 的数组扩充到 14*14。 在第三个版本中,实现如下功能 修复了一个导致重新开始后第一行雷点位置不变的修复了一个导致重新开始后第一行雷点位置不变的 BUGBUG 重写游戏结束的算法, 改变循环的起始点, 使其可以正确生成虚拟的雷点。 新增了右键标记、取消雷点的功能新增了右键标记、取消雷点的功能 为每个 Button 添加了 MouseListener 从而实现了当点击鼠标右键时可以 修改 Button 上文字, 显示为雷, 并且当该 Button 已经显示了雷的时候再次右 键该 Button 可以取消文字显示。 在第四个版本中,实现如下功能 调整了按键监听的调整了按键监听的点亮区域算法,当且仅当点击处周围没有地雷时才会触发点亮区域算法,当且仅当点击处周围没有地雷时才会触发 openButtonopenButton算法,否则仅显示当前区域,提高了游戏性算法,否则仅显示当前区域,提高了游戏性 重写了 Button 的 ActionListener,按条件区分是否执行递归点亮算法,当且 仅当单击区域为空的时候才执行点亮算法,否则仅点亮该区域。 新增了基于新增了基于 System.currentTimeMillisSystem.currentTimeMillis的计时器功能,计时器与重新开始的计时器功能,计时器与重新开始 游戏对应同步更新游戏对应同步更新 通过在游戏开始时获取一个 currentTimeMillis以及实时监控并刷新计时 器窗口的值为当前时间减去初始时间除以 1000,为节约内