利用java开发简易版扫雷游戏
1.简介
学了几周的java,闲来无事,写个乞丐版的扫雷,加强一下java基础知识。
2.编写过程
编写这个游戏,一共经历了三个阶段,编写了三个版本的游戏代码。
第一版:完成了扫雷游戏的基本雏形,实现了游戏的基本功能,游戏运行在cmd黑窗口中,以字符绘制游戏界面,无图形化窗口,通过控制台输入字符完成游戏控制。代码放置在一个java文件中,代码的可读性以及可扩展性都比较差。
第二版:在第一版实现基本功能的基础之上,对游戏代码进行重构,根据各部分的功能创建多个类,增加代码注释,提高代码的可读性以及可扩展性。
第三版:在第二版重构代码的基础之上给游戏增加了图形化界面,将用户从控制台输入命令控制游戏变为通过鼠标左右键点击操作控制游戏。
3.游戏运行逻辑
游戏运行逻辑图(第一版代码):
游戏运行逻辑图(第二版代码):
以上两个游戏流程图的运行是建立在从控制台读取数据的基础之上的,两者的执行逻辑大体相同,其本质区别在于修改游戏数据的时机不相同。前者是在通关判断之前修改数据,后者实在通关判断之后。两者在运行期间并没有什么区别,但是当玩家完成扫雷之后最后的画面打印就会出现问题,即游戏画面中最后一个进行操作的坐标点的字符的显示状态,在发生改变之前就会终止程序。通过对修改游戏数据以及通关判断这两个操作的执行顺序进行调整,即可修正这一显示错误。
游戏运行逻辑图(第三版代码):
这个运行流程图是基于第三版加了图形化界面之后的游戏代码,游戏控制流程与控制台输入控制的流程基本相同,只是将从控制台读取用户输入变成了监听用户的鼠标左键与右键的点击事件。并且,从控制台读取数据时要保证游戏结束前一直进行读取,因此需要设置while(true)循环以进行实现,游戏结束使用break跳出循环。而在图形化界面中,使用的是事件监听器,事件监听器在游戏结束前持续监听用户的鼠标点击事件,在游戏结束的弹窗弹出的同时移除监听器,结束鼠标对游戏的控制。
4.游戏相关数据存储与读取
以10x10x3的三维数组存储每个坐标点的信息(包括行号、列号、是否是地雷、当前显示的符号(未操作?、插旗#、地雷*)、周围地雷数)。
一维数组的下标表示行号,二维数组的下标表示列号,三维数组中存的第一个数据表示的是该位置是否是地雷(0-不是,1-是),第二个数据表示该位置当前显示的符号(0-?,1-#,2-*,3-显示地雷数),第三个数据表示该位置周围的地雷数。例如:
5.游戏代码
5.1 第一版
第一版的游戏代码写在一个类中,主要的作用是实现基本的游戏功能。代码如下:
5.2 第二版
这一版的代码实在第一版的基础上对代码进行重构,根据功能对代码进行分类,将其放入不同的类中,增加代码的可读性与可维护性、可扩展性。代码一共分为五个类:主程序类、设置类、地雷类、控制类、显示类。各部分代码各司其职,共同作用,共同完成游戏运行。
主程序类,游戏程序入口:
设置类,游戏相关设置数据:
地雷类,生成随机的地雷坐标数据:
控制类,控制游戏进程,以及游戏数据:
显示类,对游戏的相关画面进行打印:
5.3 第三版
在第二版的基础上,去除了显示类,增加了图片类、图形界面类、事件监听器类。
游戏运行主程序类:
设置类,提供游戏运行相关这是数据:
图片类,提供游戏相关图片:
地雷类,生成游戏中的类的相关数据:
游戏控制类,提供用于游戏控制的相关方法:
绘制图形化界面类,生成显示游戏的图形化界面:
事件监听器类,用于提供监听鼠标点击事件的监听器:
6.部分代码思路
6.1 生成随机的地雷坐标
创建random类的对象,使用相关方法,生成地雷行坐标与列坐标的随机数值,使用二维数组存储坐标点数据。由于没有做去重处理,因此有概率生成多个相同的坐标,所以地雷数最多为设置的生成数,最少为1(概率极低)。
生成随机坐标的代码如下:
6.2 测试地雷生成
代码如下:
运行结果如下:
将其转化为图像形式就是:
6.3 计算每格周围的地雷数目
思路:遍历目标坐标点周围的8个坐标点,每当发现一个地雷,则目标坐标点的游戏数据数组中的统计地雷的数值加1。
实现代码:
测试运行结果如下:
将其转换为图像表示:
7.游戏运行画面
7.1 踩中地雷
第一、二版:
第三版:
7.2 通关游戏
第一、二版:
第三版:
到此这篇关于利用java开发丐版扫雷游戏的文章就介绍到这了,更多相关java开发扫雷游戏内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!