美国太空探索技术公司(SpaceX)新一代重型运载火箭"星舰"当日发射升空。这是"星舰"第五次试飞,将首次尝试用发射塔的机械臂在半空中捕获助推器以实现回收。
为了致敬SpaceX在星舰的最新实验成果,我们用凹语言移植(山寨)一个马斯克星舰小游戏。原始的游戏是TinyGo实现,代码在:https://github.com/venlinz/simple-game-wasm4。用凹语言移植后的效果:
在线地址:https://wa-lang.org/wa/w4-rocket/
星舰小游戏代码
代码在主仓库的waroot/examples/w4-rocket
目录:
// 版权 @2024 W4-rocket 作者。保留所有权利。
import "syscall/wasm4"
global rocket = [13]byte{
0b00111100,
0b01111110,
0b11111111,
0b11111111,
0b11000011,
0b11000011,
0b11111111,
0b11111111,
0b01111110,
0b11111111,
0b11111111,
0b00111100,
0b00011000,
}
global rocket_unthrust = [13]byte{
0b00111100,
0b01111110,
0b11111111,
0b11111111,
0b11000011,
0b11000011,
0b11111111,
0b11111111,
0b01111110,
0b11111111,
0b11111111,
0b00000000,
0b00000000,
}
global car_pos_x = 0
global car_pos_y = 0
func init {
frameBuffer := wasm4.GetFramebuffer()
for i := range frameBuffer {
frameBuffer[i] = 1 | (1 << 2) | (1 << 4) | (1 << 6)
}
}
#wa:export update
func Update {
wasm4.SetPalette2(0xff0000)
wasm4.SetDrawColorsU16(0x31)
wasm4.Blit(rocket_unthrust[:], car_pos_x, car_pos_y, 8, 13, wasm4.BLIT_1BPP)
gamepad := wasm4.GetGamePad1()
if gamepad&wasm4.BUTTON_LEFT != 0 {
if car_pos_x > 0 {
car_pos_x--
}
wasm4.Blit(rocket_unthrust[:], car_pos_x, car_pos_y, 8, 13, wasm4.BLIT_1BPP)
}
wasm4.Text("<", 0, 150)
if gamepad&wasm4.BUTTON_RIGHT != 0 {
if car_pos_x < 150 {
car_pos_x++
}
wasm4.Blit(rocket_unthrust[:], car_pos_x, car_pos_y, 8, 13, wasm4.BLIT_1BPP)
}
wasm4.Text(">", 152, 150)
if gamepad&wasm4.BUTTON_UP != 0 {
if car_pos_y > 0 {
car_pos_y--
}
wasm4.Blit(rocket[:], car_pos_x, car_pos_y, 8, 13, wasm4.BLIT_1BPP)
}
if gamepad&wasm4.BUTTON_DOWN != 0 {
if car_pos_y < 150 {
car_pos_y++
}
wasm4.Blit(rocket_unthrust[:], car_pos_x, car_pos_y, 8, 13, wasm4.BLIT_1BPP)
}
}
主要是通过方向键控制星舰的飞行,游戏虽然简单但也是凹语言星辰大海幻想的第一步。Let's dive!