当前位置:网站首页 > Java教程 > 正文

java 扫雷 教程



学了几周的Java,闲来无事,写个乞丐版的扫雷,加强一下Java基础知识。

编写这个游戏,一共经历了三个阶段,编写了三个版本的游戏代码。

第一版:完成了扫雷游戏的基本雏形,实现了游戏的基本功能,游戏运行在cmd黑窗口中,以字符绘制游戏界面,无图形化窗口,通过控制台输入字符完成游戏控制。代码放置在一个java文件中,代码的可读性以及可扩展性都比较差。

第二版:在第一版实现基本功能的基础之上,对游戏代码进行重构,根据各部分的功能创建多个类,增加代码注释,提高代码的可读性以及可扩展性。

第三版:在第二版重构代码的基础之上给游戏增加了图形化界面,将用户从控制台输入命令控制游戏变为通过鼠标左右键点击操作控制游戏。

游戏运行逻辑图(第一版代码):

流程图1

游戏运行逻辑图(第二版代码):

流程图2

以上两个游戏流程图的运行是建立在从控制台读取数据的基础之上的,两者的执行逻辑大体相同,其本质区别在于修改游戏数据的时机不相同。前者是在通关判断之前修改数据,后者实在通关判断之后。两者在运行期间并没有什么区别,但是当玩家完成扫雷之后最后的画面打印就会出现问题,即游戏画面中最后一个进行操作的坐标点的字符的显示状态,在发生改变之前就会终止程序。通过对修改游戏数据以及通关判断这两个操作的执行顺序进行调整,即可修正这一显示错误。

游戏运行逻辑图(第三版代码):

流程图3

这个运行流程图是基于第三版加了图形化界面之后的游戏代码,游戏控制流程与控制台输入控制的流程基本相同,只是将从控制台读取用户输入变成了监听用户的鼠标左键与右键的点击事件。并且,从控制台读取数据时要保证游戏结束前一直进行读取,因此需要设置while(true)循环以进行实现,游戏结束使用break跳出循环。而在图形化界面中,使用的是事件监听器,事件监听器在游戏结束前持续监听用户的鼠标点击事件,在游戏结束的弹窗弹出的同时移除监听器,结束鼠标对游戏的控制。


以10x10x3的三维数组存储每个坐标点的信息(包括行号、列号、是否是地雷、当前显示的符号(未操作?、插旗#、地雷*)、周围地雷数)。

一维数组的下标表示行号,二维数组的下标表示列号,三维数组中存的第一个数据表示的是该位置是否是地雷(0-不是,1-是),第二个数据表示该位置当前显示的符号(0-?,1-#,2-*,3-显示地雷数),第三个数据表示该位置周围的地雷数。例如:

三维数组

第一版的游戏代码写在一个类中,主要的作用是实现基本的游戏功能。代码如下:

这一版的代码实在第一版的基础上对代码进行重构,根据功能对代码进行分类,将其放入不同的类中,增加代码的可读性与可维护性、可扩展性。代码一共分为五个类:主程序类、设置类、地雷类、控制类、显示类。各部分代码各司其职,共同作用,共同完成游戏运行。

主程序类,游戏程序入口:

设置类,游戏相关设置数据:

地雷类,生成随机的地雷坐标数据:

控制类,控制游戏进程,以及游戏数据:

显示类,对游戏的相关画面进行打印:

在第二版的基础上,去除了显示类,增加了图片类、图形界面类、事件监听器类。

游戏运行主程序类:

设置类,提供游戏运行相关这是数据:

图片类,提供游戏相关图片:

地雷类,生成游戏中的类的相关数据:

游戏控制类,提供用于游戏控制的相关方法:

绘制图形化界面类,生成显示游戏的图形化界面:

事件监听器类,用于提供监听鼠标点击事件的监听器:

创建Random类的对象,使用相关方法,生成地雷行坐标与列坐标的随机数值,使用二维数组存储坐标点数据。由于没有做去重处理,因此有概率生成多个相同的坐标,所以地雷数最多为设置的生成数,最少为1(概率极低)。

生成随机坐标的代码如下:

代码如下:

运行结果如下:

代码运行数据

将其转化为图像形式就是:

随机生成的地雷位置

思路:遍历目标坐标点周围的8个坐标点,每当发现一个地雷,则目标坐标点的游戏数据数组中的统计地雷的数值加1。

实现代码:

测试运行结果如下:

计算周边地雷数

将其转换为图像表示:

周边地雷图示

第一、二版:

踩雷

第三版:

踩雷2.0

第一、二版:

通关

第三版:

通关2.0

关于使用Java来实现一款简单的扫雷小游戏的文章就介绍到此结束了,有兴趣的小伙伴可以尝试一下。如果还想要了解更多关于Java相关的小游戏制作,请多多关注W3Cschool其他相关内容的文章如今。

  • 上一篇: 珍妮java版教程
  • 下一篇: java数据编排教程
  • 版权声明


    相关文章:

  • 珍妮java版教程2024-11-26 11:26:02
  • 菜鸟教程java基础2024-11-26 11:26:02
  • java扫雷教程视频2024-11-26 11:26:02
  • java教程例子2024-11-26 11:26:02
  • java编程运算教程2024-11-26 11:26:02
  • java数据编排教程2024-11-26 11:26:02
  • java爬虫程序教程2024-11-26 11:26:02
  • java写个系统教程2024-11-26 11:26:02
  • java opc ua 开发教程2024-11-26 11:26:02
  • webkit java 开发教程2024-11-26 11:26:02