凹语言中文版重新起航!
- 时间:2025-10-23
- 撰稿:凹语言开发组
- 转载请注明原文链接:https://wa-lang.org/smalltalk/st0089.html
凹语言在立项之初就把改善中文支持放在了首位,从最初的和Go语言不一样的中文名字导出规则、到2022年7月开源开始就内置了中文关键字,中间更经历过更加激进的中文语法设计,现在这版的中文语法设计是前进一步后退半步的结果。
1. 你好世界
废话少说,先看看“你好世界”的素颜照:

作为母语的码农,看代码的函数应该就能猜到大概意思了,代码已经自解释。
2. 中文编程语言实现生命游戏
“你好世界”的程序太简单,我们可以用凹语言中文语法实现一个简单的生命游戏。生命游戏的全称是康威生命游戏(Game of Life),剑桥大学约翰·何顿·康威设计的计算机程序。具体规则大家可以去网上查,这里就不展开了。
先看看主控.wz主函数:
注: 版权 @2025 life 作者。保留所有权利。
引入 "假死门/画布"
函数·主控:
输出("你好,凹语言中文版!")
画布对象, _ := 画布·查询画布("canvas")
画布上下文, _ = 画布对象·获取平面上下文()
完毕
核心逻辑是从网页中查询一个名字为“canvas”的画布,然后保存到画布上下文全局变量中。游戏的核心逻辑在生命游戏.wz文件实现。
注: 版权 @2025 life 作者。保留所有权利。
引入 "image"
引入 "image/color"
引入 "js/canvas"
引入 "数学/随机数"
引入 "洪荒"
全局:
宽度 :整型 = 0
高度 :整型 = 0
暂停中 :布尔 = 假
细胞状态甲 :*image·Gray = 空
细胞状态乙 :*image·Gray = 空
细胞状态快照 :*image·RGBA = 空
画布上下文 :canvas·Context2D
完毕
最开始是定义一组全局变量和游戏的状态。然后是游戏初始化函数:
函数·初始化(宽, 高, 随机火种: 整型):
宽度 = 宽
高度 = 高
细胞状态甲 = image·NewGray(宽, 高)
细胞状态乙 = image·NewGray(宽, 高)
细胞状态快照 = image·NewRGBA(宽, 高)
随机数·点火(长整型(随机火种))
循环 i := 0; i < 宽度*高度; i++:
如果 (随机数·整数() % 2) != 0:
细胞状态甲·Pix[i] = color·Gray(1)
否则:
细胞状态甲·Pix[i] = color·Gray(0)
完毕
完毕
完毕
然后是游戏的进化迭代函数:
函数·进化迭代:
如果 细胞状态快照 == 空:
返回
完毕
如果 !暂停中:
生命进化()
完毕
循环 横 := 0; 横 < 宽度; 横++:
循环 竖 := 0; 竖 < 高度; 竖++:
如果 细胞状态甲·Pix[竖*宽度+横] != 0:
细胞状态快照·SetRGBA(横, 竖, 0xFF0000FF)
否则:
细胞状态快照·SetRGBA(横, 竖, 0xFFFFFFFF)
完毕
完毕
完毕
注: 绘制到 Canvas
画布上下文·PutImageData(
洪荒·原生(细胞状态快照·Pix), 0, 0, 0, 0,
单精(宽度), 单精(高度),
)
完毕
生命进化函数是进化过程中如何进行弱肉强食的处理:
结构·方向:
横: 整型
竖: 整型
完毕
全局·四面八方 = [...]方向{
{-1, -1}, {0, -1}, {1, -1}, {-1, 0}, {1, 0}, {-1, 1}, {0, 1}, {1, 1},
}
函数·生命进化:
循环 竖 := 0; 竖 < 高度; 竖++:
循环 横 := 0; 横 < 宽度; 横++:
邻居数量 := 0
循环 位 := 0; 位 < 8; 位++:
邻横 := (横 + 四面八方[位]·横 + 宽度) % 宽度
邻竖 := (竖 + 四面八方[位]·竖 + 高度) % 高度
如果 细胞状态甲·Pix[邻竖*宽度+邻横] != 0:
邻居数量++
完毕
完毕
如果 细胞状态甲·Pix[竖*宽度+横] != 0:
找辙 邻居数量:
有辙 2, 3:
细胞状态乙·Pix[竖*宽度+横] = color·Gray(1)
没辙:
细胞状态乙·Pix[竖*宽度+横] = color·Gray(0)
完毕
否则:
找辙 邻居数量:
有辙 3:
细胞状态乙·Pix[竖*宽度+横] = color·Gray(1)
没辙:
细胞状态乙·Pix[竖*宽度+横] = color·Gray(0)
完毕
完毕
完毕
完毕
注: 交换 细胞状态甲 和 细胞状态乙
细胞状态甲, 细胞状态乙 = 细胞状态乙, 细胞状态甲
完毕
根据四面八方的细胞生命数量判断死活。完整的代码在这里:https://gitcode.com/wa-lang/wa/tree/master/waroot/examples/life-game-wz/src
在项目的根目录(有wa.mod文件的那个目录),执行wa run即可编译并执行,最后自动打开浏览器页面试玩游戏。效果如下:

3. 结语
网上始终存在很多污化和诋毁中文编程语言的声音,其实生命本身或许也是没有意义的,但是作为说中文母语的码农总得找点事情做。我们知道生命游戏最终总会进入一个环中,但即使是环依然展示了很多有趣的动画过程,甚至据说可以通过生命游戏构造出一个图灵机来。
中文编程语言的探索,恰如在生命游戏的循环中寻找有意思的过程,因为过程才是生命的意义。通过凹语言中文版实现生命游戏,让我们重新开启变幻莫测的生命进化!