Как запросить пользователя с помощью set / p во время выполнения других команд? - PullRequest
0 голосов
/ 10 мая 2019

Я делаю игру с пакетными файлами (я знаю, что это не совсем для игр). Мне нужно запустить set /p, чтобы попросить пользователя выбрать, какой вариант делать, в то время как он добавляет определенную сумму к игровым деньгам каждую секунду, но я не могу понять, как запустить его одновременно.

Я пытался использовать его в цикле for, но не могу заставить его работать.

Вот пример:

:do
::echo choices and ask user which option to do 
echo choice 1
echo choice 2
echo choice 3
set /p choice= what to do: 
if "%choice%" == "1" goto c1
if "%choice%" == "2" goto c2
if "%choice%" == "3" goto c3
::add money
set /a "money=%money%+10"
::wait one second
ping localhost -n 2 >NUL
::do it all again
goto do

Я хочу, чтобы он давал им деньги, даже если они не выбирают вариант, поэтому они получают свои деньги каждую секунду.

1 Ответ

1 голос
/ 11 мая 2019

Возможно, вам придется использовать CHOICE, потому что SET /P будет читать ввод пользователя, пока вы не введете новую строку.

CHOICE имеет параметр /T, который может сообщить вам, что через n секунд будет выбран вариант по умолчанию (используйте /D <default key>, чтобы установить выбор по умолчанию). Например, choice /c 123y /t 1 /d y будет ожидать ввода в течение 1 секунды и будет выбирать только последний вариант (который равен y), если пользователь ничего не нажимает в течение 1 секунды. Вы также можете отобразить сообщение с приглашением, добавив /M "<message>", поэтому ваша полная команда:

choice /c 123y /t 1 /d y /m "what to do:"

%ERRORLEVEL% где команда CHOICE выдает результат. Он начинается с 1 до последнего индекса символа (в этом случае y будет 4):

if "%errorlevel%"=="1" goto c1
if "%errorlevel%"=="2" goto c2
if "%errorlevel%"=="3" goto c3
rem The last one, which is 4, but because it's the only last option, so you don't need another if statement

И в конце цикла вы можете добавить деньги:

rem Instead of "set /a money=%money% + 10", why you don't use += instead?
set /a money+=10
goto theBeginOfTheLoop

Объедините эти операторы вместе, у нас будет простой цикл goto:

:theBeginOfTheLoop
echo money: %money%
echo choice 1 [1]
echo choice 2 [2]
echo choice 3 [3]
choice /c 123y /t 1 /d y /m "what to do: "
if "%errorlevel%"=="1" goto c1
if "%errorlevel%"=="2" goto c2
if "%errorlevel%"=="3" goto c3

set /a money+=10
goto theBeginOfTheLoop

Хорошего дня с партией:)

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