TappyPlane 开发日志:状态机、开始界面与代码重构


引言

大家好,我是老李,今天我想与大家分享一下我在开发 TappyPlane 游戏项目过程中的一些经验和进展。

尽管TappyPlane是一个超小型项目,但我依然希望能够使用更规范的开发流程和项目结构。因此近期我进行了如下调整:

本次开发主要集中在三个方面:使用有限状态机(Finite State Machine)管理游戏流程、添加一个开始界面(MenuForm)以及整理项目结构和重构代码。

使用有限状态机管理游戏流程

在游戏开发中,有限状态机是一种非常有效的管理游戏状态的方法。

在 TappyPlane 项目中,我使用状态机来管理游戏的各个阶段,如“开始菜单”、“游戏进行中”和“游戏结束”等。

这样做的好处是,可以清晰地定义每个状态下游戏应有的行为,以及如何从一个状态转换到另一个状态。

实现细节

  • 实现了一个简单的有限状态机,并且封装成addons可以在项目间通用
  • 通过继承方式实现GameStateMachine,并且维护多个GameState,这些GameState继承自BaseState,是RefCounted的子类(也可以使用Resource,看你的需求)
  • 外部通过改变状态机的参数控制状态机的状态切换,状态机提供了set_value和get_value方法。

添加开始界面(MenuForm)

为了提供更完善的用户体验,我添加了一个开始界面,也就是 MenuForm。这个界面包括“开始游戏”、“设置”、“排行榜”和“退出”等选项。

实现细节

  • 使用godot提供的control及其子节点制作MenuForm场景
  • UILayer作为UI管理器和所有UI场景的父节点,处理UI层和实际游戏层之间的相互调用
  • UI层通过signal实现对外部的通信

整理项目结构和重构代码

随着项目逐渐变大,代码的组织和可维护性成为了不能忽视的问题。因此,我花了一些时间来整理项目结构和重构代码。

实现细节

  • 将与特定游戏状态相关的代码移动到相应的状态类中。
  • 重构了一些复用性高但结构不清晰的代码,使其更易于理解和维护。
  • 使用了一些设计模式,如单例模式,以提高代码的可扩展性。

总结

通过使用有限状态机,我成功地将游戏的不同阶段进行了有效管理。添加的开始界面提供了更好的用户交互,同时,代码重构也使项目更加健壮和可维护。这些改进不仅提高了游戏的质量,也为后续的开发打下了坚实的基础。

感谢大家的关注,我是老李,下次开发日志再见!

Files

TappyPlane_web.zip Play in browser
Sep 13, 2023
TappyPlane_PC.zip 25 MB
Sep 13, 2023

Leave a comment

Log in with itch.io to leave a comment.