if语句的多个可能的文本输入

问题描述 投票:0回答:2

我正在尝试使用批处理文件进行完全身临其境的文本冒险。

这是我的问题:我希望答案是一个文本输入,以便玩家输入一个响应,指示他们将去哪里。

对于很多问题,我需要有多种可能的输入。例如,当你遇到一个敌人时,你可以做很多不同的事情,但是我只能弄清楚如何让它识别一个输入。

换句话说,我希望系统接受用户输入并相应地执行操作。

到目前为止,这是我的本节代码:

:forest1

echo you awake in a forest, you do not know where you are or why you are there.

echo infront of you is a small goblin like creature

:recoil1

echo What do you do?

set /p answer=

if %answer%==run (

goto run1

) else (

if %answer%==attack (

goto attack1

) else ( 

if %answer%==befriend(

goto befriend1

) else (

if %answer%==scream(

goto scream1

) else ( 

if %answer%==dance (

goto dance1

) else (

echo Nothing happened

timeout /t 1

goto forest1

)
batch-file if-statement
2个回答
1
投票

你的方式应该像这样修改工作:

@echo off

rem Your code before the code you provided above ^^

:forest1
echo You awake in a forest, you do not know where you are or why you are there.
echo In front of you is a small goblin like creature
goto :recoil1

:recoil1
set /p "answer=What do you do? "
if "%answer%" == "run" (
    goto :run1
) else (
    if "%answer%" == "attack" (
        goto :attack1
    ) else ( 
        if "%answer%" == "befriend" (
            goto :befriend1
        ) else (
            if "%answer%" == "scream" (
                goto :scream1
            ) else ( 
                if "%answer%" == "dance" (
                    goto :dance1
                ) else (
                    echo Nothing happened.
                    timeout /t 1
                    goto :forest1
                )
            )
        )
    )
)

你看:这有点复杂;你错过了很多括号!

因此,使用choice命令进行一些修改:

@echo off

rem Your code before the code you provided above ^^

:forest1
echo You awake in a forest, you do not know where you are or why you are there.
echo In front of you is a small goblin like creature
goto :recoil1

:recoil1
echo What do you do? Here is a list of options:
echo r - run away
echo a - attack the goblin
echo b - be friend with the goblin
echo s - scream
echo d - dance
echo n - do nothing

choice /C:rabsdn /N

if errorlevel 6 (
    echo Nothing happened.
    timeout /t 1
    goto :forest1
)
if errorlevel 5 goto :dance1
if errorlevel 4 goto :scream1
if errorlevel 3 goto :befriend1
if errorlevel 2 goto :attack1
if errorlevel 1 goto :run1

哪个更清晰,更快速,更易读,不是吗?

注意:带有iferrorlevel应该按降序排列,因为if errorlevel n意味着errorlevel大于或等于n

修改选项以更适合您。


1
投票

为什么不尝试在if循环中使用for来完成这项工作?

@echo off
:forest1
cls & echo/ & if defined answer set answer=<nul
echo/  you awake in a forest, you do not know where you are or why you are there.
echo/  infront of you is a small goblin like creature

:recoil1
set /p "answer= What do you do? "
for %%i in (run attack befriend scream dance) do if /i "%answer%" == "%%i" goto :%answer%1

echo/ Nothing happened
timeout /t 1 & goto forest1

:run1 
echo/ Here I'm in Label run1 & exit /b

:attack1
echo/ Here I'm in Label attack1 & exit /b

:befriend1 
echo/ Here I'm in Label befriend1 & exit /b

:scream1 
echo/ Here I'm in Label scream1 & exit /b

:dance1
echo/ Here I'm in Label dance1 & exit /b
© www.soinside.com 2019 - 2024. All rights reserved.