“Se” instruções não funcionam como exigido em lote, e matemática não está funcionando corretamente

1

Quando o seguinte trecho de código é executado no meu jogo Batch para uma briga, não importa qual seja a entrada, ele sempre atacará e irá para FIGHTPROCESSORLOOP, e me dirá "Parêntese não balanceado", enquanto logicamente com uma instrução IF. deve acontecer quando a entrada não é necessária, certo? Os códigos "Viagem" e "Menu" funcionam perfeitamente, então por que o "Luta" não funciona tão bem?

:CHOICEPROCESSOR
set /P choice=^>
if /i "%type%"=="travel" (
    if /i "%choice%"=="%choice1%" goto %TRAVELLINGPROCESSOR%
    if /i "%choice%"=="%choice2%" goto %TRAVELLINGPROCESSOR%
    if /i "%choice%"=="%choice3%" goto %TRAVELLINGPROCESSOR%
    if /i "%choice%"=="%choice4%" goto %TRAVELLINGPROCESSOR%
    if /i "%choice%"=="%choice5%" goto %TRAVELLINGPROCESSOR%
)
if /i "%type%"=="menu" (
    if /i "%choice%"=="%choice1%" goto %exec1%
    if /i "%choice%"=="%choice2%" goto %exec2%
    if /i "%choice%"=="%choice3%" goto %exec3%
    if /i "%choice%"=="%choice4%" goto %exec4%
    if /i "%choice%"=="%choice5%" goto %exec5%
)
if /i "%type%"=="fight" (
    if /i "%choice%"=="%weapon%" (
        set /a rsdmg=!ehp!-!atk!
        set /a rsedmg=!hp!-(!eatk!/!def!)
        set /a ehp=!ehp!-!atk!
        set /a hp=!hp!-(!eatk!/!def!)
        if hp GTR bhp set hp=%bhp%
        goto FIGHTPROCESSORLOOP
    )
)
echo Huh?
echo.
goto CHOICEPROCESSOR
    
por Mathys Oliveira 01.02.2016 / 23:25

1 resposta

1

Muito obrigado pela sua ajuda, DavidPostill. Aqui está o que eu estava fazendo de errado:

Em vez de tentar palavras diferentes, eu apenas verificaria a declaração IF deixando minha "Escolha" vazia, significando que eu teria o valor original toda vez. Nada de errado com isso, então.

Quanto à matemática, não sei ao certo como consegui fazê-lo, mas simplesmente referir-me às páginas de Rob Van der Woude sobre o assunto me ajudou a reescrever um código funcionando corretamente. Em vez de usar todas essas variáveis, acabei de deletar tudo e fiz uma abordagem muito mais simples:

if /i "%type%"=="fight" (
    if /i "%choice%"=="%weapon%" (
        set /a ehp = ehp - atk
        set /a hp = hp - eatk
        goto FIGHTPROCESSORLOOP
    )
)
    
por 02.02.2016 / 00:10

Tags