terminal语言基础

在这些文档中,我们将 CSL 与围绕它的运行时/平台交替使用称呼

此页面是 CSL 的“数据建模”部分:原语、结构体/类,以及用于清晰表示游戏状态的模式。

circle-info

如果你是全新开始,请从 CSL 入门开始。本页假定你已经知道如何声明变量和编写 proc/method.

原始类型

数字和布尔值

  • 有符号整数: s8, s16, s32, s64 (别名: int == s64)

  • 无符号整数: u8, u16, u32, u64 (别名: uint == u64)

  • 浮点数: f32 (别名: float), f64

  • 布尔值: b8 (别名: bool), b16, b32, b64

health: int = 100;
speed: float = 6.5;
is_dead: bool = false;

字符串

string 常用于 ID、名称和格式化。

item_id := "sword";
log_info("picked up %", {item_id});

向量

v2, v3, v4 是内建的数学/数据类型:

枚举

枚举非常适合可读的“模式/状态”字段:

circle-info

当编译器能推断出枚举类型时,枚举值通常用简写引用为 .VALUE

结构体(值类型)

对要廉价复制的“纯数据”使用结构体(配置、小状态块、描述符)。

何时使用结构体

  • 描述符/配置对象(*_Desc)

  • 想按值复制的小型、自包含的状态

  • 想嵌入到另一个类型中的数据

何时不使用结构体

  • 跨多个系统共享的大型可变状态(使用类)

  • “身份”对象(玩家、物品、长生命周期对象)(使用类)

类(引用类型)

类是引用类型。使用以下方式创建实例 new(...).

继承

你可以从其他结构体/类继承:

circle-exclamation

数组、切片和动态数组

你会看到三种常见形式:

  • 固定数组: [N]T (编译时大小)

  • 切片 / 管理数组: []T (数组的视图)

  • 动态数组: [..]T (可调整大小的列表)

示例:

完整指南见 数组和集合.

按引用传递(ref)

如果过程需要修改一个值,请使用 ref:

这对逐步裁剪/缩小矩形的“布局式” API 特别有用:

类型转换

使用 expr.(T):

类型多态(类似泛型的过程)

CSL 使用以下方式支持多态过程 $ 以在调用处推断类型:

类型作为值(typeid)

typeid 是在运行时和/或用于多态调用时表示类型的值:

实用建模指南

  • 每个玩家的状态存放在 Player. 如果它在玩家之间应有所不同,就不应是全局的。

  • 偏好使用小型结构体作为描述符 并将运行时状态存储在类/组件中。

  • 保持服务器权威数据的权威性。 如果它影响游戏玩法,不要只在客户端计算它。

有关玩家特定模式,请参见 添加玩家逻辑。对于世界的 ECS 方面,请参见 实体与组件.

最后更新于