2013-08-25 3 views
0

Я искал этот сайт для моего вопроса, но не нашел решения для моей проблемы.Сравнение двух чисел в пакетном файле

Система дает случайное число для игрока, и для компьютера, от 2 до 12.

Это имеет 3 части, если X больше, чем Y, если X меньше, чем Y, и, когда Х является такой же, как Y.

Когда я начинаю .bat, он отлично работает, я выбираю Play Game, я вхожу в ставку (например, 20), но когда я запускаю этот процесс, окно закрывается, и я не могу прочитать, что он написал , Я вижу некоторый проблесковый текст, я видел «Ваш» и «синтаксис», но он исчезает очень быстро.

Я действительно уверен, что это сработало, потому что, когда я удаляю вещи, они показывают мои деньги, ставку, статистику и все остальное, и я могу даже уменьшить или увеличить его с помощью «читов», которые я написал.

Итак, вот оно:

set /p setbet=Please type a number to select bet: 
if "%setbet%"=="1" set bet=20 
if "%setbet%"=="2" set bet=50 
if "%setbet%"=="3" set bet=100 
if "%setbet%"=="4" set bet=150 
if "%setbet%"=="5" set bet=200 
if "%setbet%"=="6" set bet=250 
if "%setbet%"=="7" set bet=300 
echo. 
echo Your bet is %bet%. 
echo. 
pause 
cls 
set /a money-=bet 
set /a playernum=%random% %%12 +2 
set /a enemynum=%random% %%12 +2 
echo. 
echo You roll:  %playernum% 
echo Enemy rolls:  %enemynum% 
echo. 
if %playernum% LSS %enemynum% 
(
echo Enemy wins. Please try again. 
echo Your current money is %money%. 
echo You lost %bet% money. 
echo. 
pause 
goto INTRO 
) 
if %enemynum% LSS %playernum% 
(
set /a money+=bet*2 
echo You win. 
echo Your current money is %money%. 
echo You won %bet% money. 
echo. 
pause 
goto INTRO 
) 
if %enemynum% EQU %playernum% 
(
set /a money+=bet 
echo It's a tie. 
echo You won the bet (%bet%), but your money didn't changed. 
echo Your money is now %money%. 
echo. 
pause 
goto INTRO 

Спасибо!

ответ

3

1) Вы забыли закрыть вашу последнюю скобку

2) Ошибка синтаксиса здесь:

if %enemynum% EQU %playernum% 
(

Оно должно быть: if %enemynum% EQU %playernum% (

3) Значение переменной воли денег быть неправильным при отображении.

Это связано с двумя фактами: -> Внутри FOR или IF переменные «расширены» до и не во время выполнения команды. (расширенный = переменная перемещается по ее значению)

Чтобы изменить значение переменной и использовать ее в том же цикле, вы должны использовать замедленное выражение.

Вы должны написать SETLOCAL ENABLEDELAYEDEXPANSION в начале вашего кода, а переменную, расширение которой следует отложить, должно быть окружено восклицательными знаками вместо знаков процента.

Так echo Your current money is %money%. стать echo Your current money is !money!.

4) Вы должны избежать вашей скобку в случае равенства: echo You won the bet ^(%bet%^) but your money didn't changed.

5) Вы не поставили метку INTRO, так что ваш goto INTRO потерпит неудачу

+0

Спасибо, это был действительно полезный ответ, и он решил проблемы. (goto INTRO был в коде, но, к сожалению, я забыл его скопировать) – 64x

0

вы должны найти delayed expansion (setlocal enabledelayedexpansion) и считать ваши скобки: каждая открывающая скоба нуждается в закрытии (есть исключения, которые я знаю, но не здесь). Открывающий кронштейн после if должен находиться на той же линии, что и if. Парсер if остановится здесь: %bet%), потому что это первая закрывающая скобка после последнего открытия.

+0

Спасибо , этот ответ Жюльена очень помог. Спасибо, Эндоро! – 64x

Смежные вопросы