本程序是一款基于 FXGL,javafx,netty 开发的类 Tetr.io 的支持双人局域网联机的俄罗斯方块对战游戏,采用 SRS 超级旋转系统 ,攻击方式和受击方式参考了 Tetr.io 的攻击方式 (但是不支持 Back-To-Back ),支持在设置中自定义参数,并保存在本地。
-
运行环境:JDK 21
-
程序的组成部分:文件夹 config,MyTetr.jar
-
安装步骤:
(1) 安装 JDK 21
(2) 下载文件夹 MyTetr 到电脑上
(3) 打开命令提示符窗口,输入以下命令:java -jar MyTetr.jar
或 在资源管理器中双击 MyTetr.jar,即可运行程序
原本是试图使用 exe4j 或者是手写 bat 命令来实现在无 jdk 环境下,仅依赖 jre 文件夹来运行的,但是都会报错:Java.lang.NoClassDefFoundError: sun/misc/Unsafe
- 代码行数:3,390 行(不含空行)
- 开发环境:IntelliJ 2024 + JDK 21
主菜单界面
1 Server 端
点击创建房间
玩家2 进入后,点击开始即可开始。
2 Client 端
输入房间 ip 后点击加入房间即可
进入房间后等待 玩家1 开始。
退出时会询问“是否保存修改”。
顶层是通过 Application 作为入口点,通过 GameApp 来管理游戏场景。
gameScenes 包中是所有出现的场景。
gameWorld 包是完成游戏主逻辑的,其中 PieceComponent 有一个基类是 OnePieceComponent ,所有的 PieceComponent 都继承自它。
netWork 包负责所有与网络通讯相关的功能。
有玩家对战中断开了与对方的网络通讯连接时:
-
本程序的技术关键点:
采用按需刷新的网络更新策略,对网络带宽要求小。采用 FXGL 的 Entity-Component 模式来设计,结构清晰。
-
遇到的技术难点及对应的解决方案:
项目初期,发现 FXGL 不支持多场景的游戏(如一个单人模式,一个多人模式),经过寻找发现了一个基于 FXGL 和 javafx 的拓展库 fxcity,支持多场景的切换,后续均使用 fxcity 作为底层。
FXGL 虽然是 java 中游戏引擎的领头羊,但是感觉还是有许多不足,比如没有多场景界面,Entity 和 Component 生命周期管理不清,因此不具备开发大型项目的潜质。网络上所有关于 FXGL 的项目均是小游戏性质的,以后应该不会再去碰 FXGL 了。相比之下,可能单纯使用 javafx 会更方便一些。
关于 Netty 方面,这是第一次接触网络通讯相关的编程,也是一路摸爬过来了,功能是搞定了,但是代码方面规范性欠缺,隔离性也欠佳。