零基础开发 era 游戏 #8 输入(互动)

INPUT 系列命令捕获的输入都会自动保存到 RESULT / RESULTS

INPUT / INPUTS#

最普通的输入,INPUT 对应数值,INPUTS 对应字符串。
可以有默认值,当指定了默认值时,输入空值(直接回车)视为输入默认值。

使用 INPUTS 系命令输入字符串时,兼容宏命令的缩写语法 (字符串)*重复次数
如果真的需要输入 () 半角圆括号本身,需要使用 \ 转义。

TINPUT / TINPUTS#

有时间限制的输入等待,TINPUT 对应数值,TINPUTS 对应字符串。

最多输入四个参数(带 * 的为必需项):

  1. * 「限时」:和 TWAIT 一样单位为毫秒(ms)。
  2. * 「默认值」:倒计时结束时若仍然没有输入则视为输入此值。
  3. 「是否显示剩余时间」:如为非零数值,显示(默认);若为 0,则不显示。
  4. 「超时提示的信息」:若为空,则清除倒计时,继续执行后面的命令。
@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:

  1. 按住鼠标右键不放,可以快速跳过不需要判定具体输入的 WAIT 命令。
  2. 在游戏根目录编辑 ./macro.txt 可以自定义「宏命令」,F1 等键位调用。

FORCEWAIT右键宏命令(预设的组合键)都无法跳过的强制等待。
执行到这个命令的时候会解除上述的「跳过Skip状态」。

一般用于关键的主线选择肢。

TWAIT#

顾名思义,带有延时的 WAIT 命令。

需要两个 数值 参数 —— 第一个为「等待的时间」;第二个为「是否强制等待」。

  1. 「启用强制等待(不等于 0)」:无论有没有输入,必须等到设定的延时结束。
  2. 「禁用强制等待(等于 0)」:只要检查到有输入就跳过等待,继续执行下去。
PRINTFORML %GETTIMES()% 你开始闭关
TWAIT 5000, 1
PRINTFORML %GETTIMES()% 10 年(5 秒)后

WAITANYKEY#

ONE 版本的 WAIT,鼠标点击也算。

lackbfun © 2021 - 2024