Несколько возможных текстовых вводов с помощью операторов if - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь сделать полностью захватывающее текстовое приключение, используя пакетный файл.

Вот моя проблема: я хочу, чтобы ответы были текстовым вводом, чтобы игроки набирали ответ, который определяет гдеони уйдут.

Для многих вопросов мне нужно иметь несколько возможных входов.Например, когда вы попадаете на врага, вы можете сделать множество разных вещей, но я могу только выяснить, как заставить его распознавать один вход.

Другими словами, я хочу, чтобы система принимала пользовательский ввод.и выполните соответствующие действия.

Вот мой код для этого раздела:

: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

)

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Почему бы не попробовать использовать 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
0 голосов
/ 02 марта 2019

Ваш путь должен быть изменен следующим образом:

@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

, что яснее, быстрее и удобочитаемее, не так ли?

Примечание: if с errorlevel должно быть в порядке убывания, потому что if errorlevel n означает, что errorlevel больше или равно до n!

Измените параметры, чтобы они лучше подходили для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...