无聊的周末用Java写个扫雷小游戏

周末无聊,用 Java 写了一个扫雷程序,说起来,这个应该是在学校的时候,写会比较好玩,毕竟自己实现一个小游戏,还是比较好玩的。说实话,扫雷程序里面核心的东西,只有点击的时候,去触发更新数据这一步。

源码的地址: https://github.com/Damaer/Game/tree/main/SweepMine

下面讲讲里面的设计:

在这个程序里面,为了方便,使用了全局的数据类 Data 类来维护整个游戏的数据,直接设置为静态变量,也就是一次只能有一个游戏窗口运行,否则会有数据安全问题。(仅仅是为了方便)

有以下的数据(部分代码):

需要维护的数据如下:

  • 游戏状态:是否开始,结束,成功,失败等等
  • 模式:简单,中等或者困难,这个会影响自动生成的雷的数量
  • 雷区的大小:16*16的小方块
  • 雷的数量:与模式选择有关,是个随机数
  • 标识每个方块是否有雷:最基础的数据,生成之后需要同步更新这个数据
  • 标识每个方块是否被扫过:默认没有扫过
  • 每个方块周边类雷的数量:生成的时候同步计算该结果,不想每次点击后再计算,毕竟是个不会更新的数据,一劳永逸
  • 标识方块是否被标记:扫雷的时候我们使用小旗子标记方块,表示这里是雷,标识完所有的雷的时候,成功
  • 上次访问的方块坐标:这个其实可以不记录,但是为了表示爆炸效果,与其他的雷展示不一样,故而记录下来

尽量遵循一个原则,视图与数据或者数据变更分开,方便维护。我们知道 Java 里面是用 Swing 来画图形界面,这个东西确实难画,视图写得比较复杂但是画不出什么东西。

视图与数据分开,也是几乎所有框架的优秀特点,主要是方便维护,如果视图和数据糅合在一起,更新数据,还要操作视图,那就会比较乱。(当然我写的是粗糙版本,只是简单区分了一下)

在这个扫雷程序里面基本都是点击事件,触发了数据变更,数据变更后,调用视图刷新,视图渲染的逻辑与数据变更的逻辑分开维护。

每个小方块都添加了点击事件, Data.visit(x, y) 是数据刷新, repaintBlocks() 是刷新视图,具体的代码就不放了,有兴趣可以 Github 看看源代码:

这里很遗憾的一点是每个方块里面还有一个背景的“url`没有抽取出来,这个是变化的数据,不应该放在视图里面:

重新设置方块背景,需要居中处理,重新绘制,重写 void paintComponent(Graphics g) 方法即可:

BFS ,也称为广度优先搜索,这算是扫雷里面的核心知识点,也就是点击的时候,如果当前方块是空的,那么就会触发扫描周边的方块,同时周边方块如果也是空的,会继续递归下去,我用了广度优先搜索,也就是先将它们放到队列里面,取出来,再判断是否为空,再将周边符合的方块添加进去,进行一一处理。

广度优先搜索在这里不展开,其本质是优先搜索与其直接关联的数据,也就是方块周围的点,这也是为什么需要队列的原因,我们需要队列来保存遍历的顺序。

值得注意的是,周边的点,如果它的周边没有雷,那么会继续拓展,但是只要周边有雷,就会停止拓展,只会显示数字。

当挖到雷的时候,就失败了,同时会将所有的雷暴露出来,为了展示我们当前挖到的点,有爆炸效果,我们记录了上一步操作的点,在刷新视图后,弹窗提示:

判断成功则需要将所有的雷遍历一次,判断是否被标记出来,这是我简单想的规则,忘记了扫雷是不是这样了,或者可以实现将其他所有非雷区都挖空的时候,成功,也是可以的。

扫雷,一个简单的游戏,无聊的时候可以尝试一下,但是 JavaSwing 真的难用,想找一个数据驱动视图修改的框架,但是貌似没有,那就简单实现一下。其实大部分时间都在找图标,测试 UI ,核心的代码并没有多少。

有了这个开源 Java 项目,开发出炫酷的小游戏好像不难?

本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 的游戏。

本文作者:HelloGitHub-秦人

HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款开源 Java 游戏框架项目—— FXGLGames

项目源码地址:https://github.com/AlmasB/FXGLGames

一、项目介绍

都说 Java 语言无处不能,可以做桌面程序,可以做后台开发,可以做手机应用,也可以做游戏开发。本篇我们就重点讲一下一款 Java 游戏框架 FXGL,它无需安装或设置,开箱即用,只需本地安装 jdk8+ 即可。游戏可轻松打包为可执行的 *.jar 文件,一行命令即可运行。

二、运行项目2.1 前提

  • 安装 Jdk8 或者更高版本,全称 Java Development Kit,它是 Java 的库函数,是编译、运行 Java 程序的工具包。
  • 安装 Maven3 环境,进行项目构建和项目依赖包管理。
  • 安装开发工具,例如:Idea,Eclipse,Spring Tool Suite 等。
  • 安装 Git 工具,使用 GitBash 工具进行下载,提交代码等操作。

2.2 下载项目

执行如下代码,将项目下载到本地。

2.3 运行项目2.3.1 运行可执行文件

项目 binaries 目录下是已经构建好的游戏。

本地执行下面命令,就可以运行项目了。

2.3.2 源码构建项目

通过源码构建项目,这些项目都是 maven 项目,执行下面代码就可构建并运行项目。

2.3.3 游戏运行效果展示

1. GeometryWars 这个游戏已有构建好的可执行文件,在 binaries 目录,运 行效果如下图:

2. Mario(马里奥) 这个游戏需要源码打包,参考上面步骤即可。注:此项目需要将 jdk 版本升级到 11,才可以构建和运行项目。运行效果如下图:

3. Pacman 这个游戏已有构建好的可执行文件,在 binaries 目录,运行效果如下图:

5. BattleTanks 这个游戏需要源码打包,参考上面步骤即可。运行效果如下图:

6. SpaceInvaders 这个游戏已有构建好的可执行文件,在 binaries 目录,运行效果如下图:

三、项目入门

接下来通过构建一个简单的例子,我们来看看进行游戏开发需要怎么开始。

3.1 本地创建 maven 项目

pom.xml 文件添加依赖:

3.2 添加入口类

创建 BasicGameApp.java,文件内容如下:

3.3 运行效果

在开发工具直接右键 运行 入口类 BasicGameApp.java 即可,运行效果如下图:

四、最后

Java 无所不能是真的!本篇将的项目你 get 到了吗?Java 开发小游戏还是相当炫酷的!学习英语可以听英文歌曲、看英文视频等等方式。学习编程我想也可以通过开发一款游戏的方式来增加学习兴趣,感受编码的魅力。有了直观的视觉冲击可能更加能激发你的学习和动手能力!通过我内容分享,能让更多的朋友们感受到开源项目的魅力,由而对编程产生兴趣,是我最大的乐趣!

教程至此,你应该也能快速运行游戏项目了。编程是不是也特别有意思呢?快邀请你的小伙伴一起加入到 Java 游戏开发乐趣中吧~

五、参考资料

  • FXGL 入门教程
  • FXGL 视频教程

『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎联系我(微信:xueweihan,备注:讲解)加入我们,让更多人爱上开源、贡献开源~

Java练手小项目,3个小时带你做出一个俄罗斯方块游戏

学完Java基础,一直想找一个项目实战,俄罗斯方块就是一个不错的实战项目,它原理实现比较简单。

话虽如此,我一开始还是毫无头绪,直到看到一个俄罗斯方块的视频才有了思路。俄罗斯方块还是比较适合新手练习的。

项目视频教程中会带着大家一步一步地实现这个俄罗斯方块游戏的各个功能,为了提高兴趣度,该项目也提供了图形界面。

使用到的知识点主要是JavaSE的知识,这个项目也是为了筑牢你所学的JavaSE基础,如果你也跟着一步一步完成这个项目案例,我相信你的JavaSE基本功、编码能力、分析问题解决问题的能力都会有一个大的提升;

  • JDK8.0
  • IntelliJ IDEA

小方块

游戏背景图片

•001.课程导读

•002.准备工作

•003.所使用素材

•004.编写小方块类

•005.编写四方格父类

•006.创建7个不同的形状

•007.编写俄罗斯方块主类

•008.初始化7个不同形状的位置

•009.随机生成四方格

•010.创建游戏场景

•011.绘制游戏背景

•012.绘制游戏

•013.绘制游戏主区域

•014.绘制正在下落的四方格

•015.绘制下一个将要下落的四方格

•016.绘制游戏得分

•017.绘制游戏状态

•018.判断方块是否出界

•019.判断方块是否重合

•020.按键一次四方格左移一次

•021.按键一次四方格右移一次

•022.四方格变形

•023.初始化7个形状相对位置

•024.旋转状态1

•025.旋转状态2

•026.旋转状态3

•027.顺时针旋转四方格

•028.判断游戏是否结束

•029.消行并积分

•030.判断四方格能否下落

•031.按键一次四方格下落一个

•032.瞬间下落

•033.编写逆时针旋转四方格方法

•034.创建顺时针旋转

•035.开启键盘监听事件

•036.根据按键做相应事情

•037.将俄罗斯方块窗口设置为焦点

•038.编写四方格自动下落

•039.将start方法添加到main方法中

•040.俄罗斯方块最终效果

俄罗斯方块游戏资料源码下载:

http://www.bjpowernode.com/?toutiao

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。