Java扫雷游戏心得体会总结_Java扫雷游戏: JMine

本文介绍了JerryShen编写的Java扫雷程序JMine,它使用Swing构建界面,包括菜单、控制面板和雷区。游戏规则讲解了地图生成、递归消除和胜利检测等关键点。源代码可供学习者参考,加深对Java编程的理解。

JMine是用Java和Swing编写的扫雷程序。作者是Jerry Shen(火鸟),代码有一定年头了,最开始是作者的课程设计。阅读这种小程序对编程语言的学习挺有帮助。本文只简单介绍一些关键的地方,实现细节可直接参考源代码。项目地址:https://gitee.com/jerryshensjf/JMine

08164642eaff86dd31b12dbb94cdb61a.png

界面设计

游戏的主界面分为菜单、控制面板、雷区三个部分。控制面板左右是两个计数器,分别显示地雷数量和时间。中间的笑脸是一个按钮,点击笑脸会张开嘴,可以重开一局游戏。

bTest = new JButton(faceIcon[0]);

bTest.addMouseListener(this);

bTest.setPressedIcon(faceIcon[1]);

public void mouseClicked(MouseEvent e) {

if (e.getSource() == bTest) {

setNewGame(numMine);

return;

}

...

雷区是10x10的方阵,左键扫雷,右键插旗子。格子上可以显示数字、旗子、问号等信息。

public class JMineButton extends JButton {

private int col;

private int row;

private int flag = 0;

private boolean clickFlag = false;

...

可以看到虽然界面和交互比较简单,但有很多需要自定义的控件。

游戏规则

介绍几处重要的规则和细节。

地图生成

在地图上随机设置地雷的位置,需要注意第一个点击的位置一定没有地雷,地雷如果出现在这个地方需要跳过。

while (i < mineNum) {

col = (int)(Math.random()*100)%10;

row = (int)(Math.random()*100)%10;

if (mine[col][row]==0 && (row!=Outrow || col!=Outcol || Outrow==10 )) {

mine[row][col]=9;

i++;

}

}

递归消除

如果一个格子周围都没有地雷,即为空白方格,则自动探索并点亮周边的空白方格。这个算法可递归调用checkMine自身实现。

if (mine.mine[i][j] == 0&& mineButton[i][j].getClickFlag() == false) {

mineButton[i][j].setClickFlag(true);

showLabel(i, j);

for (int ii = i - 1; ii <= i + 1; ii++)

for (int jj = j - 1; jj <= j + 1; jj++)

checkMine(ii, jj);

}

胜利检测

胜利需满足如下条件:

所有地雷都被标记。

所有非地雷都不被标记。

所有非地雷被探测。

总结

这个版本的扫雷还原度还是蛮高的。唯一有些遗憾的是只能设置10x10的雷区。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值