跳到主要内容

Ruleset 开发

我们在 osu!lazer 入门指南中曾大概提过关于 Ruleset 的事情,相信玩过 osu!lazer 的大家应该也有一些基本的了解。

所谓 Ruleset 其实与 osu!stable 中的游戏模式 (Gamemode) 概念差不多。具体来讲:

  • Ruleset 定义了一个模式应有的“规则”(所以叫“规则集”)
  • Ruleset 让玩家可以使用其游玩,或是扩充一些功能
  • osu!lazer 内置了 4 个 Ruleset(经典的四个游戏模式)

基本组成

简而言之,一个 Ruleset 由如下的部分组成:

  • 基本信息(如名称、描述、图标、切换声音等)
  • 输入输出(如回放读取、谱面编辑等)
  • 交互判定(如按键绑定、判定类型、难度计算等)
  • 物件组成(如打击圈、滑条、转盘等)
  • 界面结构(如游玩区域)

这些部分将会在余下的文章中详细阐述。

项目结构

总体来说,一个 osu!lazer Ruleset 项目大多使用 C# 语言编写,基本结构如下:

说明

以下呈现的是一个 Ruleset 项目的基本(最小化)结构,如果想要扩展更多的功能,结构可能会更加复杂。

项目结构中的 _ 字符代表你的 Ruleset 的简称(可以自己定一个;例如 Ruleset 全名为 osu!typer,那么 _ 可以写成 Typer_Ruleset 就代表 TyperRuleset),这种命名方式多是出于开发方便。


在项目开发后期,你也可以考虑给项目写一写测试来帮忙排错,以及确认代码逻辑上的运行情况。

  • Beatmaps/
    • _BeatmapConverter.cs
  • Judgements/
    • _Judgement.cs
  • Mods/
    • _ModAutoplay.cs
    • ...(更多其他的模组)
  • Objects/
    • Drawables/
      • Drawable_HitObject.cs
    • _HitObject.cs
  • Replays/
    • _AutoGenerator.cs
    • _FramedReplayInputHandler.cs
    • _ReplayFrame.cs
  • Scoring/
    • _HitWindows.cs
  • UI/
    • Drawable_Ruleset.cs
    • _Playfield.cs
  • _DifficultyCalculator.cs
  • _InputManager.cs
  • _Ruleset.cs
创建方法

从头开始创建一个 Ruleset 的方法与创建 C# 类库项目的方法并无太大差别,建议使用你的编辑器的创建向导完成。

当然,你也可以从下面的项目中选一个模仿一下。

推荐项目

如果你觉得有些无从下手,可以看看下面的项目学习一下。