瓦力四像门试营业

This commit is contained in:
chai2010
2025-10-26 02:58:56 +08:00
parent 6465acc5fc
commit 4e7bd2585c
14 changed files with 167 additions and 21 deletions

View File

@@ -6,6 +6,7 @@ import (
"strings"
"wa-lang.org/wa/internal/ast"
"wa-lang.org/wa/internal/token"
)
// 注释中的指令
@@ -53,44 +54,55 @@ func ParseCommentInfo(docList ...*ast.CommentGroup) (info CommentInfo) {
return
}
for _, comment := range doc.List {
if !strContainPrefix(comment.Text, "#wa:", "//wa:") {
if !strContainPrefix(comment.Text, token.K_X_wa, token.K_X_wz) {
continue
}
parts := strings.Fields(comment.Text)
switch parts[0] {
case "#wa:build", "//wa:build":
case token.K_X_wa_build, token.K_X_wz_build:
if len(parts) >= 2 {
info.BuildIgnore = parts[1] == "ignore"
switch parts[0] {
case token.K_X_wa_build:
if s := parts[1]; s == token.K_X_wa_build_arg_ignore {
info.BuildIgnore = true
}
case token.K_X_wz_build:
if s := parts[1]; s == token.K_X_wz_build_arg_ignore {
info.BuildIgnore = true
}
default:
panic("unreachable")
}
}
info.BuildTags = parts[1:]
case "#wa:linkname", "//wa:linkname":
case token.K_X_wa_linkname, token.K_X_wz_linkname:
if len(parts) >= 2 {
info.LinkName = strings.Join(parts[1:], " ")
}
case "#wa:export", "//wa:export":
case token.K_X_wa_export, token.K_X_wz_export:
if len(parts) >= 2 {
info.ExportName = parts[1]
}
case "#wa:import", "//wa:import":
case token.K_X_wa_import, token.K_X_wz_import:
if len(parts) >= 3 {
info.ImportName[0] = parts[1]
info.ImportName[1] = parts[2]
}
case "#wa:force_register", "//wa:force_register":
case token.K_X_wa_force_register, token.K_X_wz_force_register:
info.ForceRegister = true
case "#wa:runtime_getter", "//wa:runtime_getter":
case token.K_X_wa_runtime_getter, token.K_X_wz_runtime_getter:
info.RuntimeGetter = true
case "#wa:runtime_setter", "//wa:runtime_setter":
case token.K_X_wa_runtime_setter, token.K_X_wz_runtime_setter:
info.RuntimeSetter = true
case "#wa:runtime_sizer":
case token.K_X_wa_runtime_sizer, token.K_X_wz_runtime_sizer:
info.RuntimeSizer = true
case "#wa:generic":
case token.K_X_wa_generic, token.K_X_wz_generic:
info.Generic = append(info.Generic, parts[1:]...)
case "#wa:operator":
case token.K_X_wa_operator, token.K_X_wz_operator:
info.Operator = append(info.Operator, parts[1:])
case "#wa:embed":
case token.K_X_wa_embed, token.K_X_wz_embed:
if len(parts) >= 2 {
info.Embed = parts[1]
}

View File

@@ -9,6 +9,24 @@ const (
K_dot = "."
)
const (
K_X_wa = "#wa:"
K_X_wa_build = "#wa:build"
K_X_wa_linkname = "#wa:linkname"
K_X_wa_export = "#wa:export"
K_X_wa_import = "#wa:import"
K_X_wa_force_register = "#wa:force_register"
K_X_wa_runtime_getter = "#wa:runtime_getter"
K_X_wa_runtime_setter = "#wa:runtime_setter"
K_X_wa_runtime_sizer = "#wa:runtime_sizer"
K_X_wa_generic = "#wa:generic"
K_X_wa_operator = "#wa:operator"
K_X_wa_embed = "#wa:embed"
K_X_wa_build_arg_ignore = "ignore"
)
const (
K_break = "break"
K_case = "case"

View File

@@ -10,6 +10,24 @@ const (
K_注 = "注" // 注: 注释
)
const (
K_X_wz = "#凹:"
K_X_wz_build = "#凹:构建"
K_X_wz_linkname = "#凹:连接名"
K_X_wz_export = "#凹:导出"
K_X_wz_import = "#凹:引入"
K_X_wz_force_register = "#凹:强制寄存器"
K_X_wz_runtime_getter = "#凹:运行时获取器"
K_X_wz_runtime_setter = "#凹:运行时设置器"
K_X_wz_runtime_sizer = "#凹:运行时度量"
K_X_wz_generic = "#凹:泛型"
K_X_wz_operator = "#凹:运算符"
K_X_wz_embed = "#凹:嵌入"
K_X_wz_build_arg_ignore = "忽略"
)
const (
K_引入 = "引入" // import

View File

@@ -16,14 +16,14 @@ const (
global ui: *UI = nil
//wa:export start
#wa:export start
func Start {
seed := u32(478194671)
ui = NewUI(game.New(seed), palettes.IceCreamGB)
}
//wa:export update
#wa:export update
func Update {
ui.frame++
ui.show()

View File

@@ -0,0 +1 @@
/output

View File

@@ -0,0 +1,9 @@
# 版权 @2025 wasm4-hello-wz 作者。保留所有权利。
run:
go run ../../../main.go run .
dev:
go run ../../../main.go build .
clean:

View File

@@ -0,0 +1,4 @@
# WASM4 中文编程例子
https://wasm4.org/docs/

View File

@@ -0,0 +1,28 @@
// 版权 @2025 瓦力四像门-入门 作者。保留所有权利。
引入 "门阀/瓦力四像门"
全局·笑脸 = [8]字节{
0b11000011,
0b10000001,
0b00100100,
0b00100100,
0b00000000,
0b00100100,
0b10011001,
0b11000011,
}
#凹:导出 update
函数·更新:
瓦力四像门·设置绘图颜色(2, 0, 0, 0)
瓦力四像门·绘制文本("Hello from Wa-lang!", 10, 10)
游戏手柄 := 瓦力四像门·读取控制键1()
如果 游戏手柄&瓦力四像门·按键1 != 0:
瓦力四像门·设置绘图颜色(4, 0, 0, 0)
完毕
瓦力四像门·位图块传输(笑脸[:], 76, 76, 8, 8, 瓦力四像门·每像素1位)
瓦力四像门·绘制文本("Press X to blink", 16, 90)
完毕

View File

@@ -0,0 +1,5 @@
# @2024 w4-hello
name = "w4app"
pkgpath = "w4app"
target = "wasm4"

View File

@@ -190,10 +190,14 @@ var stdPkgs = []string{
}
var wzStdPkgs = []string{
"菠萝", // apple
"书", // fmt
"图像", // image
"图像/颜色", // image/color
"数学/随机数", // math/rand
"假死门/画布", // js/canvas
"菠萝", // apple
"书", // fmt
"图像", // image
"图像/颜色", // image/color
"数学/随机数", // math/rand
"假死门/画布", // js/canvas
"门阀/阿多一诺门", // syscall/arduino
"门阀/假死门", // syscall/js
"门阀/瓦力四像门", // syscall/wasi
"门阀/瓦斯门", // syscall/wasm4
}

View File

@@ -0,0 +1,2 @@
注: Copyright (C) 2025 武汉凹语言科技有限公司
注: SPDX-License-Identifier: MIT

View File

@@ -0,0 +1,41 @@
注: Copyright (C) 2025 武汉凹语言科技有限公司
注: SPDX-License-Identifier: MIT
引入 "syscall/wasm4"
常量:
按键1 = wasm4·BUTTON_1
按键2 = wasm4·BUTTON_2
左键 = wasm4·BUTTON_1
右键 = wasm4·BUTTON_RIGHT
按键起 = wasm4·BUTTON_UP
按键落 = wasm4·BUTTON_DOWN
鼠标左键 = wasm4·MOUSE_LEFT
鼠标右键 = wasm4·MOUSE_RIGHT
鼠标中键 = wasm4·MOUSE_MIDDLE
完毕
函数·设置绘图颜色(甲, 乙, 丙, 丁: 微正整):
wasm4·SetDrawColors(甲, 乙, 丙, 丁)
完毕
函数·绘制文本(文: 字串, 甲, 乙: 普整型):
wasm4·Text(文, 甲, 乙)
完毕
函数·读取控制键1 => 微正整:
返回 wasm4·GetGamePad1()
完毕
常量:
每像素1位 = wasm4·BLIT_1BPP
每像素2位 = wasm4·BLIT_2BPP
左右翻转 = wasm4·BLIT_FLIP_X
上下翻转 = wasm4·BLIT_FLIP_Y
旋转 = wasm4·BLIT_ROTATE
完毕
函数·位图块传输(精灵: []字节, 经, 纬, 宽, 高, 控制位: 整型):
wasm4·Blit(精灵, 经, 纬, 宽, 高, 控制位)
完毕

View File

@@ -0,0 +1,2 @@
注: Copyright (C) 2025 武汉凹语言科技有限公司
注: SPDX-License-Identifier: MIT

View File

@@ -0,0 +1,2 @@
注: Copyright (C) 2025 武汉凹语言科技有限公司
注: SPDX-License-Identifier: MIT