GameLisp:用于Rust游戏开发的脚本语言

2020-12-21 19:06:12

GameLisp是用于Rust游戏开发的脚本语言。它是在《火焰城堡》上工作时创建的。

没有垃圾收集暂停。 GameLisp具有专门用于游戏开发的独特垃圾回收器。它每帧每帧运行一次,而不会引起任何延迟峰值。

无缝Rust API。得益于Rust强大的类型系统,将GameLisp轻松集成到Rust代码库中非常容易。安装非常简单-只是一个箱子!

内存安全。 GameLisp完全在Rust中实现,几乎没有依赖关系。默认情况下,其实现根本不使用不安全的方法。

功能丰富。 GameLisp具有现代语言可能带来的所有便利功能。模式匹配,迭代器,协程,宏...

简单的实体脚本。 GameLisp具有围绕状态机和混合器构建的独特对象系统,专为脚本化游戏实体而设计。

(defstruct Rect xywh(甲基重叠?(other-rect)(让[xywh] other-rect)(和(< @x(+ xw))(< x(+ @x @w))(< @ y(+ yh))(< y(+ @y @h)))))(def paddle-speed 220)(def paddle-height 40)(def paddle-start-y(-> play:height( -桨高(/ 2)))(def左桨(Rect(x 10)(y桨开始-y)(w 6)(h桨高)))(def右桨(Rect( x(-play:width 16))(y paddle-start-y)(w 6)(h paddle-height)))(def ball-start-x(-> play:width(/ 2)(-3 )))(def ball-start-y(-> play:height(/ 2)(-3)))(def ball(Rect(x ball-start-x)(y ball-start-y)(w 6)(h 6)))(def ball-dx 0)(def ball-dy 0)(defn play:update(dt);更新`(((~~的(paddle上调键)左桨ws)(〜右桨向上下))(when(play:down?up-key)(dec![paddle' y](* dt paddle-speed)))( down?down-key)(inc![paddle' y](* dt paddle-speed)))(clamp![paddle' y] 0(-play:height paddle-height))));更新球(当(和(== ball-dx ball-dy 0)(是吗?播放:按下? '(ws向上向下)))(= ball-dx(*(rand-select -1 1)(rand 170210))))(= ball-dy(*(rand-select -1 1)(rand 50 100)))))(inc![ball' x](* dt ball-dx))(inc![ball' y](* dt ball-dy))(当(< [ ball' y] 0)(= ball-dy(abs ball-dy)))(((> =(+ [ball' y] [ball' h])播放:高度)(= ball-dy(-(abs ball-dy))))(当(或(和(和(.overlaps球左桨)(< ball-dx 0))(和(.overlaps球右-桨)(> ball-dx 0)))(= ball-dx(-(* ball-dx(rand 1.03 1.08)))))(inc!ball-dy(rand 50 -50))(clamp!ball- dy(-(abs ball-dx))(abs ball-dx)))(除非(< = 0 [ball' x] play:width)(= [ball' x] ball-start -x)(= [ball' y] ball-start-y)(= ball-dx 0)(= ball-dy 0));渲染(让midnight-blue'(25 25 112))(让turquoise'(64 224 208))(play:fill 0 0 play:width play:height ..midnight-blue)(play: fill .. [ball'(xywh)] ..turquoise)(播放:fill .. [left-paddle'(xywh)] ..turquoise)(play:fill .. [right-paddle& #39;(xywh).. turquoise))