Java扫雷小游戏解析



 

 

代码来源

https://www.oschina.net/code/snippet_115076_8995

 

MainFrame类

privatevoid initDiamond()初始化方块

初始化每个方格类,与周围的方格建立联系,随机设置十个雷(用HashSet避免产生重复的雷。)

publicvoid launchFrame()初始化方框

设置边框属性,创建两个Panel,mainPanel用来装游戏区域,使用表格格局。statePanel用来装显示剩余雷数的区域。然后为每个方块添加鼠标监听,并将每个方块添加到mainPanel的每个表格里。再将两个Panel添加到Frame窗口中,并设置窗口监听。

内部类public class MymouseListener implements MouseListener

public void mouseClicked(MouseEvent e)鼠标点击

左键点击两下,还原方块颜色(在mousePressed中方块颜色被更改了)并检查该方块周围玩家已标注的雷,若该方块周围原本存在雷的方格都被标注了,则翻开剩下未翻开的方块,翻开过程中检查是否方块周边雷数为0,是则连翻。

左键点击一下,如果不是雷且该方块周围周边雷数为0,则翻开该方块并连翻。如果触雷,则停止计时,并将该方格标记为绿色,其他九个雷的方格标记为蓝色,再弹出游戏结束窗口,并重新开始游戏。

public void mousePressed(MouseEvent e)鼠标按压(当发生鼠标点击事件时,此函数先于mouseClicked(MouseEvent e)发生)

当鼠标左键点击两下时,对该方块周围方块进行颜色变换。

public void mouseReleased(MouseEvent e)鼠标释放

当鼠标释放时,首先检查游戏是否已开始,若未开始则开启定时,并启动进程。

如果点击的是右键,则检查该方格是否已被翻开,没有则检查该方格是否已被标记,再根据显示内容改变其内容和剩余雷数

判断是否胜利(所有原本为雷的方格被标注,且不是雷的方格没有被标注)。如果胜利停止计时并将剩下的方格翻开,并显示胜利窗口并开始新的游戏。

public void run()计时

检查游戏是否开始,开始则计时(将自己休眠一秒)

 

 

­­main()主程序

游戏入口。

 

 

 

Diamond类

publicBoolean change()翻格子

翻开方格,如果是雷返回false,不是雷则显示周围雷数并返回true。

publicint getNearBombNo()附近雷数

求出给方格附近的雷数。

publicDiamond getNearDimaond(int i)得到附近方格

与周围的方格建立连接。若附近无方格则返回null。

publicvoid moveon(Set<Diamond> set)递归连翻

如果翻开的方格周围雷数为0,则进行连翻。连翻即将周围方格自动翻开。注意,这里需要建立一个HashSet来存放已连翻的方格,避免重复翻开格子,进入死循环。因为HashSet是内容不可重复的Set,故使用HashSet。

 

 

 

简单的解析到此结束。如果有错误望大家指出,我会再慢慢改进。

该代码中我也有少部分不理解,如果大家有问题提出来,我不懂的,还望大神帮忙解析。

 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值