【开源】发布一个基于JavaFX的小游戏:CrazyAlpha
Features 基于JavaFX设计了游戏引擎XEngine 使用自行开发的游戏引擎XEngine实现完整游戏功能 游戏资源管理:字体、图片、音频管理 游戏地图管理,多地图切换 MVVM分层设计,代码解耦合,模块高内聚 Model模型系统设计,模块化设计 使用订阅者模式实现的消息系统和事件处理 使用Gradle构建 下载运行 首先,点击打开:CrazyAlpha下载页面 下载CrazyAlpha
目录13 个章节
Features
- 基于JavaFX设计了游戏引擎XEngine
- 使用自行开发的游戏引擎XEngine实现完整游戏功能
- 游戏资源管理:字体、图片、音频管理
- 游戏地图管理,多地图切换
- MVVM分层设计,代码解耦合,模块高内聚
- Model模型系统设计,模块化设计
- 使用订阅者模式实现的消息系统和事件处理
- 使用Gradle构建
下载运行
首先,点击打开:CrazyAlpha下载页面

下载CrazyAlpha的最新版本,例如图中的是1.0.1,文件名是:crazyalpha.jar
PS:由于游戏是使用Java编写的,所以没有安装Java的小伙伴请先下载Java,Windows版本的Java运行环境下载:点击下载
在安装完java环境之后,可以双击jar包运行,或者右键选择使用Java Runtime运行
当然也可以在命令行中执行
java -jar crazyalpha.jar
开源
Github项目地址:https://github.com/Deali-Axy/CrazyAlpha
PS:由于版权原因,Github代码中不包含游戏用到的图片、字体、声音等资源文件,所以要运行游戏的同学可以自行替换资源文件,或者联系我获取资源文件。
架构
Game.Engine:自行实现的游戏引擎包Annotation:引擎注解包,包含引擎定义的注解GameEventHandler:事件处理器注解GameManager:游戏中各类管理器的注解GameModel:模型注解GameObject:游戏对象注解GameView:视图注解,用于实现MVVM分层设计
Base:基础类包,包含了引擎定义的各种抽象基类BaseModel:基础模型ImageModel:基础图形模型ShapeModel:基础形状模型TextModel:基础文本模型
Enum:各类枚举的定义(略)Utils:其他工具(略)GameObject:游戏对象基类,所有对象都从这个类派生GameView:除了游戏主界面外的其他界面都由视图基类派生
Game.EventHandler:包含所有事件处理器Game.Manager:包含了各类管理器,地图、资源、数据、模型、事件等管理器Game.Object:包含所有游戏对象的定义Model:包含所有游戏模型的定义GameMap:游戏地图对象Generator:游戏事件发生器
Game.View:视图包,包含所有视图的定义Game:全局游戏对象,使用单例模式创建Main:游戏主类Render:核心渲染器,负责游戏的渲染工作
图形界面实现
为了开发这个游戏,我先开发了一个基于JavaFX的游戏引擎,引擎实现了从游戏资源管理、模型定义,到画面渲染等一系列功能,按照市面上现有的商业游戏引擎的设计思路进行设计,“麻雀虽小,五脏俱全”,虽然无法匹敌其他成熟的游戏引擎,但是就功能来说,是一应俱全的,能够满足大部分2D小游戏的开发需要。
界面截图
游戏启动画面:
左上方是游戏的logo,左下角显示最高分记录,下面是作者信息和版本。
右下角是两个按钮,一个启动游戏按钮,另一个退出按钮。

游戏主界面:
左上角是玩家头像,当前得分,以及生命值;正上方是当前关卡;
画面中央是大风车,大风车跟随音乐节奏发射字母,玩家需要在字母飞出屏幕之前按下对应的字母才能得分。

游戏暂停画面

游戏结束画面
左下方显示本局游戏得分,以及是否打破最高分记录。右下角显示返回主界面按钮。

开发心得
这是我第一次使用Java做游戏开发,之前对Java这门语言的理解仅限于JavaEE做Web开发这方面,最近学习了JavaFX,用了一下,才发现原来JavaFX这么好用,确实是专门为GUI设计的框架,只是用的人比较少,我在开发过程中遇到了很多问题,基本都找不到国内的资料,还好有万能的StackOverFlow,另外,Oracle官网的文档也是挺详细的,感谢~
对于我这样写习惯了Python这类动态语言的人来说,写大量Java代码的感受就是,很繁琐,但是很省心,不需要怎么动脑,不用纠结这个参数是什么类型,需不需要做强制类型检查,一切都由IDE和JVM安排的明明白白,不需要我再去操心类型的问题,另外因为Java语法比较死板,没有那么多灵活的写法,这既是缺点又是优点,缺点就是对于我这种喜欢炫技的人来说,写Java代码没有多少快感,但是优点是同样的功能,实现的代码基本都差不多,不同的人来实现也不会有多大的差别,这就保证了代码的可维护性,可能现在用Python写一个大项目,代码全都是挥洒飘逸,不拘一格,写的时候很爽,但是等到后面重构的时候,完蛋了,看不懂之前的代码了,尽管有注释,但不可能每一行代码都有注释吧,灵活的写法增加了理解难度,因此Java在大型项目的绝对统治地位不是空穴来风。
这次游戏开发也加深了我对Java这门语言的理解,比如说反射,比如说事件,一开始在做事件处理部分的时候,让我感到有点困惑的就是,Java既没有委托、也没有真正的“事件”这个概念,一切都是用接口和类实现,实现接口功能一般都是通过传入实现某个事件接口的匿名类(当然在Java8里可以使用lambda表达式),不过这也不是什么大问题,这些问题都有其他方法可以解决,只不过写起来比较繁琐而已。可能我之前写习惯了C#,所以写Java代码的时候总是不由自主拿来对比,但是其实这两种语言的可对比性不高,因为出生的年代都不一样,C#在语言设计上确实是比Java高明得多,近年来Java的新版本或有或无的在模仿C#多年前的特性,比如说Java8的lambda表达式,Java11的var定义变量等。
此外,此次开发小游戏让我对Java的体会就是,语法很简单,不像C#和C++那样多而复杂,所以对于初学者而言特别友好,因为一学就会,配合上最好的IDE:IDEA,轻轻松松写出各种项目,有一个说法是,因为Java语言本身的功能太少,所以出现了各种设计模式来补全Java语言的不足。
About

Learn more on my WeChat Official Account:DealiAxy
Every post was in my blog:blog.deali.cn
欢迎交流
交流问题请在微信公众号后台留言,每一条信息我都会回复哈~
_EOF_
【开源】发布一个基于JavaFX的小游戏:CrazyAlpha
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
小老板的账都在微信里,我做成了 AI 产品,然后…
一年了终于憋出第一篇文章,自称AI产品却干着ERP的活。核心就一句话:小老板不缺记账,缺的是“这单到底赚没赚”——还得靠AI把微信聊天变账本。最后成本压垮项目?醒醒,先想清楚卖给谁再谈开发。
2026-07-31 · Production · 约 1 分钟
【开源】发布一个Java课程设计BookManageSystem
JavaBookManageSystem Github主页:https://github.com/Deali-Axy/JavaBookManageSystem 介绍 使用Java编写的简易图书管理软件,Java课程的课设之一。 依赖 Mybatis 3.4.6 QFramework4J: About QFramework Sqlite-Jdbc 3.23.1 SwingSets3 数据库设计 Us
2021-12-18 · Production · 约 1 分钟
Linux玩家必备:Ubuntu完全配置指南
前言 笔者从14年接触Linux至今已有4年,一开始折腾各种发行版,从国产的StartOS、Deepin到Debian、Ubuntu、OpenSUSE、Fedora到Arch Linux,目前主力系统是Manjaro和Ubuntu16.04,本文适用于刚刚开始使用Linux,并且有一定命令行基础的新手玩家,根据我使用Linux的经验进行编写,所有软件和命令均在Ubuntu16.04系统上测试运行通
2025-10-27 · 安装笔记 · 约 1 分钟
写一写生活吧,人生不只是有学习和工作。
哈喽~ 今天没有想写技术文~~(其实是我也不知道有什么好写的)~~,不怎么耗时间的太简单,稍微有含金量一些的太耗费时间和精力,最近真的没有那么多的时间去写去整理这么一篇文章。(当你经营一个公众号之后就会觉得每次produce一篇文章都是一个壮举)。 最近一直在折腾系统,作为一名不怎么标准的极客,没有趁手的工具怎么干活,所以我一直秉承着“磨刀不误砍柴工”的理念去折腾(误。 (忠告:千万不要折腾,这是
2022-11-07 · 2018 · 约 1 分钟
讨论
共 0 条加载评论中…