【数据结构课设】扫雷 (java实现)

目录

一、问题描述

二、逻辑结构设计

三、存储结构设计

三、主要操作设计

四、技术难点与解决方法

五、实现与展示

六、详细代码

七、游戏内图片


一、问题描述

设计实现经典扫雷游戏,要求如下:

(1) 分初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出所有地雷

且用时最少者。

(2) 选择级别后出现相对应级别的扫雷区域,用户使用鼠标左键单击雷区中任一方块便启动

计时器。

(3) 单击方块,若所揭方块下有雷,则 Game Over;若所揭方块下无雷,则显示一个数字,

该数字代表方块周围 8 个方块中共有多少颗雷。如果数字为 0,则程序自动揭开方块周

围方块,直到找到非 0 数字的方块。

(4) 用户可以右键单击标记雷,无论用户标记是否正确,程序都将显示剩余雷数少一。

(5) 胜利后,用时少于排行榜最末成绩,则弹窗提示保存成绩

[测试数据]

参照原版设计:win7 或者 winXP 系统下自带扫雷游戏,或者扫雷游戏网页版 -

Minesweeper

[实现提示]

可能用到数组、排序、递归等。

二、逻辑结构设计

 图2.1扫雷操作流程图

  首先GameStart类中进行程序,调用MineSweeping的构造方法来绘制窗口与基本组件,然后在MineSweeping类中调用GamePanel来绘制雷区,绘制雷区时用了两层for循环遍历,并用if方法判断地雷是否被埋在重复的位置。绘制完毕后便可以开始游戏。

  用户点击任意格子后会先进行判断,若为雷,游戏失败。若为数字,不会翻开周围的格子。若为空,则会递归调用翻开周围3*3的格子。

  若游戏失败,则结束游戏,用户可以点击顶部的笑脸重新开始游戏。若胜利,则输入名称,并生成一个Hero对象存入到ArrayList当中,排序并显示英雄榜。

三、存储结构设计

  该课程设计的类主要包含两个大部分。一个是绘制扫雷地图与组件的类,另一个是存储获胜用户信息的类。在绘制扫雷地图中,包括GamePanel、GameUtils、MineSweeping类等。在存储用户信息及英雄榜排名中,包括Hero、HeroDialog。

 图3.1绘制地图uml类图

  (1)GameStart是整个游戏开始的入口,从这里开始运行程序。

  (2)其中GameUtils存储了绘制扫雷地图时所需要的变量,比如地图的宽、高,地的偏移量、地雷的数量等。并将这些变量全部设置为静态变量,以此能在不同类中很好的调用。

  (3) GamePanel绘制雷区的部分,利用randomBomb()和writeNumber()来随机生成地雷与数字,open()与subOpen()来绘制地雷翻开的动作。因为雷区是一个矩阵,因此将地雷与按钮存储到一个二维数组当中,同时在此类中判断游戏是否胜利。

 (4)MineSweeping绘制了地图其他组件,将笑脸,倒计时,剩余雷数以及排行榜添加到窗口当中。并对调用GamePanel类,将扫雷地图进行组装,最后实现出扫雷的效果。

 图3.2 排行榜制作uml类图

  (5)当用户在VistoryDialog中输入名称后,用Hero类来new一个对象,因为考虑到后续的插入操作,在这里使用数组的效率会更高一些,因此将这些对象存入到ArrayList当中

三、主要操作设计

  扫雷窗口与雷区生成后

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天的命名词

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值