零基础开发 era 游戏 #8 输入(互动)
INPUT
系列命令捕获的输入都会自动保存到RESULT
/RESULTS
。
INPUT / INPUTS#
最普通的输入,INPUT
对应数值,INPUTS
对应字符串。
可以有默认值,当指定了默认值时,输入空值(直接回车)视为输入默认值。
使用 INPUTS
系命令输入字符串时,兼容宏命令的缩写语法 (字符串)*重复次数
。
如果真的需要输入 ()
半角圆括号本身,需要使用 \
转义。
TINPUT / TINPUTS#
有时间限制的输入等待,TINPUT
对应数值,TINPUTS
对应字符串。
最多输入四个参数(带 *
的为必需项):
- * 「限时」:和
TWAIT
一样单位为毫秒(ms)。 - * 「默认值」:倒计时结束时若仍然没有输入则视为输入此值。
- 「是否显示剩余时间」:如为非零数值,显示(默认);若为
0
,则不显示。 - 「超时提示的信息」:若为空,则清除倒计时,继续执行后面的命令。
@SYSTEM_TITLE CALL DEFUSE_A_BOMB QUIT @DEFUSE_A_BOMB #DIM answer answer = RAND:3 PRINTL 你要剪哪根线? SETCOLORBYNAME Red PRINTBUTTON "红色的线", 0 PRINT_SPACE 100 SETCOLORBYNAME Green PRINTBUTTON "绿色的线", 1 PRINT_SPACE 100 SETCOLORBYNAME Blue PRINTBUTTON "蓝色的线", 2 RESETCOLOR TINPUT 9999, -1, 1, "倒计时结束,炸弹爆炸了!" CLEARLINE 1 IF RESULT == answer PRINTL 你成功拆除了炸弹! PRINTL 获得成就「拆弹专家」。 ELSEIF RESULT != -1 PRINTL 你剪错了线,炸弹提前爆炸了! PRINTL 无人幸存。 ELSE PRINTL 无人幸存。 ENDIF
ONEINPUT / ONEINPUTS#
只接受 一个字符 的输入,得到后立即执行(无需回车确认)。
- 使用粘贴(Ctrl+V)等方式一次性输入多个字符时,只取第一个字符。
- 类似
INPUT
/INPUTS
,可以指定输入空值(直接回车)时应用的默认值。
当ONEINPUT
输入负值,或ONEINPUTS
指定了空字符串时,参数会失效,与没有输入值的行为相同。 - 对
ONEINPUT
输入非数字字符(包括空值)时,会要求重新输入。 - 理论上 和
INPUT
/INPUTS
一样支持宏命令(./macro.txt
)。
TONEINPUT / TONEINPUTS#
参数及作用和 TINPUT
/ TINPUTS
相同。
可以视为 ONE
版的 TINPUT
/ TINPUTS
。
INPUTMOUSEKEY#
断句是 INPUT
-MOUSE
-KEY
,捕获鼠标 / 键盘输入的命令。
支持输入一个参数作为时间限制,当值 <= 0
时视为「不限制超时」。
这个命令可以捕获到 ONEINPUT
等命令检测不到的操作,比如方向键、PageUp 等。
由于其广泛的捕获范围,因此 Esc、右键、宏命令等功能都会失效。
@SYSTEM_TITLE $INPUT_LOOP INPUTMOUSEKEY 2000 PRINTSL ANALYSE_INPUT() GOTO INPUT_LOOP @ANALYSE_INPUT #FUNCTIONS #DIMS res SELECTCASE RESULT:0 CASE 1 res = 鼠标点击({RESULT:0}) CASE 2 res = 鼠标滚轮({RESULT:0}) CASE 3 res = 键盘按键({RESULT:0}) CASEELSE res = 等待输入超时 ENDSELECT IF RESULT:0 == 2 res += @" 滚动位移({RESULT:1})" ELSEIF RESULT:0 < 4 SELECTCASE RESULT:1 CASE 0x100000 res += @" 鼠标左键({RESULT:1})" CASE 0x200000 res += @" 鼠标右键({RESULT:1})" CASE 0x400000 res += @" 鼠标中键({RESULT:1})" CASE 0x800000 res += @" 鼠标侧键1({RESULT:1})" CASE 0x1000000 res += @" 鼠标侧键2({RESULT:1})" CASEELSE ; 枚举值来自 https://docs.microsoft.com/ZH-CN/dotnet/api/system.windows.forms.keys res += @" 键位({RESULT:1})" ENDSELECT ENDIF IF RESULT:0 < 3 res += @" 屏幕座标({RESULT:2}, {RESULT:3})" SELECTCASE RESULT:4 CASE -1 res += @" 未获取到颜色({RESULT:4})" CASEELSE ; 由 CBGSETBMAPG 命令决定 格式为 0xAARRGGBB res += @" 获取到颜色(0x%TOLOWER(TOSTR(RESULT:4, "X8"))%)" ENDSELECT ENDIF RETURNF res
FORCEWAIT#
游玩小 Tips:
- 按住鼠标右键不放,可以快速跳过不需要判定具体输入的
WAIT
命令。- 在游戏根目录编辑
./macro.txt
可以自定义「宏命令」,F1 等键位调用。
而 FORCEWAIT
是 右键 和 宏命令(预设的组合键)都无法跳过的强制等待。
执行到这个命令的时候会解除上述的「
一般用于关键的主线选择肢。
TWAIT#
顾名思义,带有延时的 WAIT
命令。
需要两个 数值 参数 —— 第一个为「等待的时间」;第二个为「是否强制等待」。
- 「启用强制等待(不等于
0
)」:无论有没有输入,必须等到设定的延时结束。 - 「禁用强制等待(等于
0
)」:只要检查到有输入就跳过等待,继续执行下去。
PRINTFORML %GETTIMES()% 你开始闭关 TWAIT 5000, 1 PRINTFORML %GETTIMES()% 10 年(5 秒)后
WAITANYKEY#
ONE
版本的 WAIT
,鼠标点击也算。