Java扫雷小游戏解析



代码来源

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

MainFrame

privatevoid initDiamond()初始化方块

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

publicvoid launchFrame()初始化方框

设置边框属性,创建两个PanelmainPanel用来装游戏区域,使用表格格局。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

 

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

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

 

 

猜你喜欢

转载自blog.csdn.net/qq_36415969/article/details/80645267