扫雷项目总结(2)
时间:2025-02-26
时间:2025-02-26
用双击无效。若数字周围有标错的地雷,则游戏结束,标错的地雷上会显示一个“ ×”。(摘自百度百科)
项目核心
我们从零做起,重载了Java的java.swing.JFrame类用来做界面,并重载了java.swing.JButton类来做按钮。因为界面和win的扫雷很相似所以无需过多的描述。有一点不同是我们为了照顾新手加入了新的内容,就是在不易判断是不是地雷的时候使用菜单里的提示并点击一个没有点过的按钮可以自动把旗子标上,这是一个很像作弊的设定所以我们在一局中只能使用三次。并且每用一次时间就会加30秒。
首先我们来看一些重要的算法。第一便是生成雷,怎样生成指定的地雷数呢?我们经过考虑和实践,决定声明一个重载按钮类的二维数组,用Random函数随机生成数字来指定地雷。用一个循环语句来确定地雷分布。因为有可能随机到一个相同的按钮,所以我们用了一个递归来解决重复问题。
第二便是解决获得格子周围雷数的算法。我们在按钮类里加入了一个整数值,在生成雷的时候把这个整数值设为-1,然后再用循环遍历了不是雷的方格。将数字记录下来,根据数字来决定怎么显示点击后的图片。
第三就是按钮类的实现了。我们需要在进行游戏时对按钮左击,右击和同时点击的事件设计不同的监听器并对其响应,还有新加入的辅助功能。因为事件颇多,所以在这方面下了很多功夫,调试出了很多bug,比如有一个bug就是我们运行程序的时候竟然没有绘出方格,原因是没有把引用类型的变量实例化,这也是常见的错误,估计很多C++学过的人都会犯这种错。还有就是在判断是否点击过我们发生了分歧,一个想法是新加入一个boolean类型的成员变量visted,另一个是直接使用之前用来记录周围地雷数的int变量。两种方法各有优劣,为了简单方便并且直观地编程,我们最后选择了boolean类型的visited。
项目难点
项目过程中有一个非常困扰我们的事,就是怎么实现按钮只能按一次的效果。经过讨论,我们决定把指针正常,按下和悬浮的Icon都设置了为点击过的,这样就形成了一种没办法再点的错觉。同时我们当然也把事件的原监听器移除了,改成了笑脸的变化,这样一来就出现了无法点击的效果,但其实那是可以点击的。其中还有一个大麻烦就是设置旗子之后按钮还是可以触发地雷,我们最后决定把上述思路也做了调整,把右键点击的监听器也做了修改。
所以,总的来说,这个项目最大的难度就在于一堆Button的属性应该怎么改变还有监
下一篇:两级压边轮