零基础开发 era 游戏 #7 输出
这里主要指 era 游戏的核心:文本输出。(至于图像输出的细节,之后再来探索吧)
即「PRINT
系列命令」。
PRINT 系#
解析修饰符 |V|S|FORM|FORMS
#
@TEST_PRINT #DIM num = 123 #DIMS text = "ABC" PRINT 所见即所得。 PRINTL PRINTV num PRINTL PRINTS text PRINTL PRINTFORM 按格式解析后的所见即所得 num={num} text=%text% PRINTL PRINTFORMS "按格式解析后的一个完整字符串 num={num} text=%text%"
样式修饰符 |K|D
#
K(Kana)
首先介绍 FORCEKANA
这个命令,指定强制输出的
0
:不进行转换1
:将平假名(ひらがな)转换为片假名(カタカナ)2
:将 全角的 片假名(カタカナ)转换为平假名(ひらがな)3
:无论全角还是半角一律 将片假名(カタカナ)转换为平假名(ひらがな)
@TEST_PRINTK PRINT 未进行转换时: PRINTK あいうえお / アイウエオ PRINTL PRINT 平假名自动转换为片假名: FORCEKANA 1 PRINTK あいうえお / アイウエオ PRINTL PRINT 片假名自动转换为平假名: FORCEKANA 2 PRINTK あいうえお / アイウエオ
D(Default)
无视 SETCOLOR
命令设置的新颜色,仍然显示为配置文件中设定的
换行修饰符 |L|W
#
L(Line)
打印后自动换行。
W(Wait)
打印后自动换行,同时运行一次 WAIT
命令(输入任意指令以继续)。
PRINTSINGLE 系#
可以使用
|V|S|FORM|FORMS
和|K|D
修饰符。
(由于会自动换行,所以不需要|L|W
。)
永远独占一行,超出屏幕绘制区域宽度的多余内容会被直接丢弃(不会渲染),而不是在之后的下一行继续打印。
PRINTC 系#
可用的修饰符顺序依次为
|FORM
/C|LC
/|K|D
。
自动补齐(使用半角空格)到指定长度(由配置项 PRINTCの文字数
决定,默认为 25
)的打印,C
是右对齐(左边补空格),LC
是左对齐(右边补空格)。
PRINTDATA 系#
可用的修饰符顺序依次为
|K|D
/|L|W
。
无需 IF
+ RAND
的组合就能随机打印文本:
@LOTTERY #DIM rand_res #DIMS coin = "币" WHILE 1 PRINTDATA rand_res DATA 0. 钻石 × 5 DATAFORM 1. 金%coin% × 10 DATAFORM 2. 银%coin% × 10 DATAFORM 3. 铜%coin% × 10 DATALIST DATA 4. 一对剑盾: DATA 〇 短剑 DATAFORM 〇 雕刻了货%coin%图案的小木盾 ENDLIST ENDDATA PRINTL PRINTFORML 随机结果={rand_res} INPUTMOUSEKEY PRINTL WEND
PRINTBUTTON 系#
可用的修饰符为
|C|LC
。
打印一个可以交互的按钮。有两个参数,分别是:
按钮显示的内容
:只能为字符串按钮的值
:可以为数值或字符串
@TEST_PRINT_BUTTON WHILE 1 PRINTL DRAWLINE PRINT << PRINTBUTTON "这是一个按钮", "一个按钮" PRINT >> PRINT << PRINTBUTTON "这是另一个按钮", "另一个按钮" PRINT >> PRINTL PRINT << PRINTBUTTONLC "左对齐的按钮A", 101 PRINT >> PRINT << PRINTBUTTONC "右对齐的按钮A", 201 PRINT >> PRINTL PRINT << PRINTBUTTONLC "左对齐的按钮B", 102 PRINT >> PRINT << PRINTBUTTONC "右对齐的按钮B", 202 PRINT >> PRINTL INPUTS WEND
PRINTPLAIN 系#
可用的修饰符为
|FORM
。
有一个隐藏的特性是:当你打印的内容里有 [数字]
这样的格式、当前屏幕又存在 INPUT
系列命令(输入等待)时,会被自动识别为按钮,方括号里面的内容就是按钮的值。
PRINT [1] 被解析为按钮了 PRINTL PRINT [2] 被解析为按钮了 PRINTL PRINTPLAIN [3] 不会被解析为按钮 INPUT
而 PRINTPLAIN
可以强制只打印原本的内容(不会被错误地解析)。
其他#
CUSTOMDRAWLINE#
以自定义的内容作为分割线:
CUSTOMDRAWLINE *--- DRAWLINE
DRAWLINEFORM#
解析自定义的内容后作为分割线:
@TEST_DIVIDER #DIMS char = "=-=" DRAWLINEFORM *-%char%- DRAWLINE
REUSELASTLINE#
参数可以接受类似
FORM
修饰符的内容。
在当前的 最后一行 添加一段 临时 信息。
在这条命令之后的任何其他输出都会让这段临时信息消失。
$INPUT_LOOP INPUT IF RESULT != 0 CLEARLINE 1 REUSELASTLINE 输入的指令无效,请输入 0 退出。 GOTO INPUT_LOOP ENDIF
CLEARLINE#
删除在这条命令之前打印的、指定行数的内容。
一般配合 LINECOUNT
(当前总共已经打印的合计行数)实现清屏效果。
或是在 INPUT
系列命令后直接 CLEARLINE 1
清除上一行(自动回显的输入结果)。
简单的图像输出#
PRINT_IMG#
打印指定图像。
在此之前需要先通过 ./resources/
目录下的 *.csv
文件加载对应图片。
(此时指定的「图像」也被称作「sprite」。)
PRINT_IMG "SpriteName"
与执行
HTML_PRINT
打印<img>
标签效果相同。
PRINT_RECT#
绘制矩形图像。
- 当仅指定一个参数时,参数为指定的
宽度 (高度 自动填满行高)。 - 当指定四个参数时,参数分别为起点的
(x, y)
座标 /宽度 /高度 。
PRINT_RECT 1000 PRINTL PRINT 一二三四五六七八九十 PRINTL PRINT_RECT 0, 0, 1000, 500 REPEAT 6 PRINTL REND
与执行
HTML_PRINT
打印<shape type='rect'>
标签效果相同。
PRINT_SPACE#
打印指定长度的空白(占位符)。
PRINT 《余 PRINT_SPACE 100 PRINT 裕》
与执行
HTML_PRINT
打印<shape type='space'>
标签效果相同。