这是一篇关于在 MIT 第一学期结束后用 Zig 语言编写一个简单 Scrabble 游戏的博客文章,包含了对 Zig 语言的介绍、代码实现的细节以及作者的一些思考,主要内容如下:
- 关于 Zig 语言:作者关注 Zig 语言已有一段时间,认为其语言设计很有趣,如通过
comptime
函数实现泛型,目标是成为增量式“实时”编译器,工具链也很强大,如交叉编译和build.zig
。还提到了 TigerBeetle 的TigerStyle
文档,对代码组织方式有启发。 Scrabble 游戏代码实现:
- 代码结构:项目主要代码在
main.zig
文件中,约 500 行,通过const
和@import
进行导入,在编译时处理。还嵌入了静态资源,如图片和声音文件。 - 数据结构:将游戏状态组织为几个不同的结构体,如
Grid
、Tile
、Rack
、Bag
和Button
。Grid
是泛型结构体,用于表示固定大小的方格网格。 - 动画实现:自然地实现了瓷砖动画,通过更新每个瓷砖的位置和悬停高度,使其向目标位置移动。还使用类似的技巧实现了瓷砖跟随鼠标的效果。
- 随机数和袋子:使用一个包含所有 Scrabble 瓷砖的字符串来表示袋子,通过随机打乱字符串来实现随机抽取瓷砖的功能。
- 主函数
main
:是代码的核心,设置窗口、加载资源、进行游戏状态更新和绘制。使用defer
来确保资源的正确释放。
- 代码结构:项目主要代码在
- 最终思考:作者享受使用 Zig 和 raylib 编写游戏的过程,觉得尝试新工具很有趣,虽然 Zig 没有模式匹配,但有相关讨论和可能的库。还提到可能会添加在线多人功能和 CRDT 库,下次再写关于
build.zig
的内容,以及对 jujutsu 的使用感受。最后祝大家圣诞快乐。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。