第一阶段:设计与规划
定位&目标
- 用途: 游戏脚本, 高性能, 易嵌入
- 目标用户: 游戏开发者, 或其他快速一次性脚本
- 核心特性: 动态类型, OOP, 协程
- 差异化: 语言独特价值(暂时没想好)
- 宿主环境: 独立解释器或内嵌(zig / c / c++)
核心语法
- 基础结构:
- 变量声明:
var x
- 赋值:
x = 10
- 基本数据类型
- 注释
// 注释
- 表达式:
- 算术运算符
+ - * / %
- 移位运算符
>> <<
- 比较运算符
> >= < <= != ==
- 逻辑运算符
and or not
- 位运算符
& | ~ ^
- 控制流:
if/elif/else
while/for/continue/break
- 函数:
- 声明函数(传参/返回值):
fn add(a, b) int
- 调用函数
x = add()
- 数据结构:
- 数组:
[1, 2, "hello"]
- 哈希表(map/set):
{1: "s", "d": 1}
- 示例代码(前期实现):
// ------------------------------基础结构------------------------------
// 变量声明(动态类型)
var health = 100 // 数字(自动识别为int/double)
var name = "Player1" // 字符串
var isAlive = true // 布尔
var item = null // 空值
enum Dir { UP, DOWN } // 枚举
var pos = (x: 1, y: 2) // 元组(轻量级数据结构)
var user = ("John", 18) // 匿名元组
// 这是单行注释 // 单行注释
var damage = attack * (1 + criticalBonus) - defense
// 位运算(适合游戏状态标志)
var flags = COLLISION_FLAG | RENDER_FLAG
var hasFlag = (flags & REQUIRED_FLAG) != 0
// 空值安全操作
var itemName = inventory?.getSelected()?.name ?? "Empty"
// 三元表达式
var status = health > 0 ? "Alive" : "Dead"
// ------------------------------控制流------------------------------
// 循环控制
for (var i in 0..enemies.count) {
enemies[i].update()
}
// 容器迭代
for (enemy in enemies) {
enemy.render()
}
// 普通while
while (condition) {
// do something
// continue / break
}
// 带标签的break(适合嵌套循环)
outer: while (condition) {
while (innerCond) {
if (shouldExit) break outer
}
}
// ------------------------------函数设计------------------------------
// 基本函数
fn calculateDamage(attacker, defender) -> int {
return attacker.attack - defender.defense
}
// 带默认参数和命名参数
fn spawnEnemy(type = "Orc", position = (0,0,0), health = 100) -> void {
// ...
}
spawnEnemy(position: (10,5,3), type: "Dragon") // 函数调用
// 函数作为一等公民
var combatHandlers = [
melee: (a, b) -> void { /* 近战逻辑 */ },
ranged: (a, b) -> void { /* 远程逻辑 */ }
]
// ------------------------------数据结构------------------------------
// 数组
var enemies = [Enemy(), Enemy(), Enemy()]
enemies.push(BossEnemy()) // 动态扩容
// 哈希表(字典)
var weaponStats = {
"sword": { damage: 15, speed: 1.2 },
"bow": { damage: 10, speed: 0.8 }
}
// 集合
var activePlayers = Set()
待定语法
// ------------------------------面向对象------------------------------
class GameObject {
// 字段
var position = (x: 0.0, y: 0.0)
var isActive = true
// 构造函数
init(position) {
this.position = position
}
// 方法
fn update(deltaTime) -> void {
// 虚方法,可重写
}
// 析构函数(资源清理)
deinit {
releaseResources()
}
}
// 继承(单继承+接口)
class Player : GameObject, Damageable {
var health = 100
// 重写方法
override fn update(deltaTime) -> void {
processInput()
super.update(deltaTime)
}
// 接口实现
fn takeDamage(amount) -> void {
health -= amount
}
}
// 接口协议
interface Damageable {
fn takeDamage(amount) -> void
}
// ------------------------------协程设计------------------------------
// 协程定义(游戏序列常用)
coroutine fn enemySpawnSequence() -> void {
yield waitSeconds(2.0) // 等待2秒
for (i in 0..5) {
spawnEnemy(type: "Orc")
yield waitFrames(30) // 等待30帧
}
spawnBoss()
}
// 在游戏循环中驱动协程
fn gameLoop() -> void {
while running {
// 更新所有协程
CoroutineScheduler.updateAll()
// ...
}
}
// 异步操作(加载资源)
async fn loadLevelAssets() -> Tuple {
var textures = await ResourceLoader.loadTextures()
var models = await ResourceLoader.loadModels()
return (textures, models)
}