课程时长:120 分钟
技术栈:IntelliJ IDEA + Spigot API 1.21.1 + AI 助手 (Cursor/Claude)
核心目标:实现小游戏的核心逻辑闭环。学习使用状态机(State Machine)管理游戏阶段(等待、进行、结束),实践模块化编程(将逻辑拆分到不同的类中),利用 AI 快速生成高频触发的核心引擎代码。
一、 任务背景 (Mission Background)
蓝图已经绘就,今天我们要正式打下第一根地基。无论你的游戏是“岩浆上升”还是“职业大战”,它们都需要一个**“大脑”来告诉服务器:现在是大家准备的时间,还是互相战斗的时间,或者是宣布胜利者的时间。这就是我们要开发的游戏状态管理器(Game Manager)**。
二 : 学习路线图 (Technical Map)
-
编程技能:枚举类 (Enum) 定义状态、单例模式(初步接触)、定时任务 (BukkitRunnable) 的嵌套。
-
工程思维:解耦 (Decoupling) —— 为什么要把游戏逻辑从 Main 类里搬出来?流程控制 —— 确保游戏阶段不会跳变(如:没开始就结束了)。
-
AI 素养:利用 AI 生成“状态切换模板”,并针对特定的游戏规则进行逻辑微调。
三、 核心项目:游戏状态引擎 (Sprint 1: 50 min)
1. 定义游戏阶段 (The States)
我们需要明确你的游戏有哪些阶段。通常包括:LOBBY (大厅等待), STARTING (倒计时), ACTIVE (进行中), WON (结算)。
推荐 AI 提示词(构建引擎):
“我正在为 Minecraft 插件编写游戏引擎类 GameManager。
请定义一个枚举 GameState 包含:LOBBY, STARTING, ACTIVE, ENDED。
写一个方法 setGameState(GameState newState)。
当状态切换到 STARTING 时,开启一个 10 秒倒计时,并在屏幕显示 Title。
当倒计时结束,自动切换到 ACTIVE 模式并向所有玩家发送‘游戏开始’。
请确保代码是模块化的,方便我在主类中调用。”
2. 代码集成与类拆分
-
任务:不要把所有代码写在一个类里。创建一个 manager 包,把 GameManager.java 放进去。
-
Vibe Check:问问 AI,如果我在游戏进行中(ACTIVE)突然有新玩家加入,我该如何编写代码阻止他参与游戏,只能当观察者?
四、 多任务挑战:核心玩法触发 (Sprint 2: 40 min)
现在,我们要根据你的 MVP 计划,实现那个“最关键”的功能。
五、 工程思维:模块化与可维护性 (Engineering Logic: 15 min)
工程师的深度思考:
-
为什么不写在 Main 里?:如果你的代码有 1000 行且都在主类里,找一个 Bug 会像在大海捞针。模块化让你能精准定位:是“状态切换”坏了,还是“战斗逻辑”坏了?
-
数据安全:如果服务器在中途崩溃,你的游戏状态会重置吗?
-
AI 任务:询问 AI “如何确保服务器重启时,所有玩家自动退出游戏状态并清理生成的临时方块?”
-
六、 单元测试与 Debug (Testing: 15 min)
-
流程跑通测试:输入指令强制开始游戏,看看倒计时 -> 开始 -> 结束的流程是否顺滑。
-
边界值测试:在倒计时 1 秒时强制退出,看看倒计时任务是否被正确取消(Cancel),还是会继续跑完?
-
AI 纠错:如果倒计时 Title 不显示,请问 AI:“如何确保 sendTitle 的参数(淡入、停留、淡出时间)设置正确?”
七、 自学习与探究 (Self-Learning)
拓展思考:
-
自动化大厅:能否实现当在线人数达到 4 人时,自动从 LOBBY 切换到 STARTING?
-
地图清理:如果你的游戏会破坏地图(如 TNT 大战),如何在游戏结束后利用 AI 写一段代码,把方块全部恢复原状?
八、 成果交付 (Deliverables)
-
代码架构截图:展示你整齐的 manager 包和 listener 包。
-
动态演示:录屏或现场展示:游戏从等待到开始的核心流程,包括屏幕文字反馈。
-
Sprint 总结:记录你在构建状态机时,AI 帮你解决的最难的一个逻辑判断是什么。
九、 老师的 Vibe Tips (结语)
“今天你为世界安装了心脏。一个没有状态管理的程序只是乱码,而有了状态机,它就变成了‘游戏’。利用 AI 帮你处理那些繁琐的定时器取消和状态判断,你只需专注于设计:当心脏跳动时,这个世界会发生什么疯狂的事?”