前几天老师布置了个控制台扫雷游戏,就是自己输入坐标,然后在打印一下扫雷盘(扫雷界面).做好以后,总觉得这种控制台的界面看着不舒服,自己又会一些GUI界面的知识,然后就做了个这么个小游戏.(本程序全部源代码已上传,需要的可以去下载)
编程最重要的是思路,让我们先把思路理清楚:
首先是了解一下扫雷规则,10 * 10 的是有10个雷,这10个雷是随机生成的,当然你也可以要15个,这个也不一定按照常规来,可以设计你自己的扫雷游戏.然后其余90个格子不是数字就是空白(数字为0时,就打印空白),每个格子周围有几个雷,它就打印什么数字.你点击你个格子,如果是雷,则游戏结束,如果是数字,则直接打印数字,如果是空白,则要判断它周围的格子,周围格子也已这种方法判断下去,最后还剩10个没有被点开就赢了.
然后再想想怎么实现这些功能,看到 10 * 10 ,则可以用个数组来表示格子,数组值表示储存它要打印的什么,10个雷也直接随机生成,注意不要生成重复的.最后点开后的处理可以用递归的方法解决.
最后就是把这个思路和图形界面结合在一起:
先定义个MyPanel类,用来画每个格子,给好属性,
![](https://img-blog.csdn.net/20180508220549584?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
然后重写paint方法,刚开始全部格子都不能被看见里面的showStr,所以先全部用个颜色填充了,
![](https://img-blog.csdn.net/20180508220942500?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
颜色自己设置,可以设基础色,也可以用RGB设置,showStr里的数据最后打印,注意是0的话就不打印,
![](https://img-blog.csdn.net/20180508221132522?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
showStr里的数据在添加点击事件后,会根据你点的情况而改变.
写扫雷盘类,自定义DrawBong类继承JFrame,设置布局为GridLayout,然后添加100个MyPanel进入DrawBong,同时给MyPanel添加鼠标事件.
![](https://img-blog.csdn.net/20180508221903727?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
然后初始化雷.
![](https://img-blog.csdn.net/20180508221957404?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
最后初始化其他MyPanel(即设置它们showStr的数据).
![](https://img-blog.csdn.net/2018050822212692?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
然后把事件类写了,定义BongEvent继承MouseAdapter类,在类里面写一个Deal方法处理点开后的展开
![](https://img-blog.csdn.net/20180508222508848?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](https://img-blog.csdn.net/2018050822254161?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](https://img-blog.csdn.net/20180508222609697?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
最后可以根据自己的爱好加输赢界面,不想加就直接退出.
全做完后写个运行类就可以运行了
这是开始界面:
![](https://img-blog.csdn.net/2018050822293963?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
点了一个有数字后的效果:
![](https://img-blog.csdn.net/20180508223054997?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
点到空白后的效果:
![](https://img-blog.csdn.net/20180508223150248?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
然后加了右键提示是雷的效果
![](https://img-blog.csdn.net/20180508223253836?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
这是扫雷成功的界面:
![](https://img-blog.csdn.net/20180508223433836?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
这是扫雷失败的界面
![](https://img-blog.csdn.net/20180508223516484?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01YQ19NWEM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
到这里整个扫雷小游戏就全部做完了,如果需要完整可以去下载,我已经上传了.