Crear contadores multiples en batch

Iniciado por RafaelTheHacker372, 23 Diciembre 2020, 20:30 PM

0 Miembros y 1 Visitante están viendo este tema.

RafaelTheHacker372

Hola este es mi primer post y quiera saber si me podian ayudar :P
Lo que estoy intentando hacer es que cuando un contador suba y llege a 20 empiece a bajar el otro contador. Este es el codigo que hice:

@echo off
set vida=30
set hambre=0
:inicio
cls
echo Vida: %vida%
echo Hambre:%hambre%
echo.
timeout /t 2 >nul
goto mashambre

:mashambre
set /a hambre= %hambre% + 3
if %hambre% EQU 20 (goto menosvida)
goto inicio

:menosvida
set /a vida= %vida% - 2
if %vida%  EQU 0 goto dead
goto inicio


:dead
exit

Pero el contador de hambre empieza a subir y el contador de vida no baja  :-( y queria saber si me podian ayudar en eso. Saludos!

Enderman_gray

Hola, buen día.

He revisado tu código y encontré lo siguiente.

En la linea de "mas hambre" tenemos el primer error:
...
if %hambre% EQU 20 (goto menosvida)
...

El código EQU significa "igual a", entonces, el hambre va subiendo en múltiplos de 3. Cuando llega a 18 y sube a 21, haciendo que el 20 nunca aparezca, y el comando dice "igual a 20".

Para solucionar esto, cambiemos el EQU por GEQ, que signica "mayor o igual a". Dejándolo así:
...
if %hambre% GEQ 20 (goto menosvida)
...

Aquí le decimos al programa que, cualquier número igual o superior a 20, el condicional se active.

Así, mientras el hambre sube y sube, la vida baja y baja y cuando llegue a 0, dirá que estás morido.

Y el resto del código está bien.

============

@echo off
set vida=30
set hambre=0
:inicio
cls
echo Vida: %vida%
echo Hambre:%hambre%
echo.
timeout /t 2 >nul
goto mashambre

:mashambre
set /a hambre= %hambre% + 3
if %hambre% GEQ 20 (goto menosvida)
goto inicio

:menosvida
set /a vida= %vida% - 2
if %vida%  EQU 0 goto dead
goto inicio


:dead
echo.
echo.
echo Muerto.
pause.
exit
Streuner Corporation.
CEO de USB File Resc.

Mudereded401

Cita de: Enderman_gray en 27 Diciembre 2020, 10:15 AM
Hola, buen día.

He revisado tu código y encontré lo siguiente.

En la linea de "mas hambre" tenemos el primer error:
...
if %hambre% EQU 20 (goto menosvida)
...

El código EQU significa "igual a", entonces, el hambre va subiendo en múltiplos de 3. Cuando llega a 18 y sube a 21, haciendo que el 20 nunca aparezca, y el comando dice "igual a 20".

Para solucionar esto, cambiemos el EQU por GEQ, que signica "mayor o igual a". Dejándolo así:
...
if %hambre% GEQ 20 (goto menosvida)
...

Aquí le decimos al programa que, cualquier número igual o superior a 20, el condicional se active.

Así, mientras el hambre sube y sube, la vida baja y baja y cuando llegue a 0, dirá que estás morido.

Y el resto del código está bien.

============

@echo off
set vida=30
set hambre=0
:inicio
cls
echo Vida: %vida%
echo Hambre:%hambre%
echo.
timeout /t 2 >nul
goto mashambre

:mashambre
set /a hambre= %hambre% + 3
if %hambre% GEQ 20 (goto menosvida)
goto inicio

:menosvida
set /a vida= %vida% - 2
if %vida%  EQU 0 goto dead
goto inicio


:dead
echo.
echo.
echo Muerto.
pause.
exit



  De hecho creo que al código le falta algo, ya que una vez se le baje la vida y nuevamente tenga más hambre, nunca más volvera a bajarle la vida ya que no se estableció que hambre fuera 0 nuevamente para volver a llegar al conteo. Aunque se podría calcular de manera un poco más compleja sacando los multiplos de 20. Por otra parte veo que hay un "goto" de más, que creo que es un poco innecesario .-.  Los GOTO extras le quitan aunque sean milisegundos de reacción en la ejecución, algo es algo xd.


@echo off
set vida=30
set hambre=0
set hambre_=0
:inicio
cls
echo Vida: %vida%
echo Hambre:%hambre%
echo.
timeout /t 2 >nul
goto mashambre

:mashambre
set/a hambre+=3
set/a hambre_+=3
if %hambre_% GEQ 20 (
set/a vida-=2
set hambre_=0
)
if %vida%==0 (goto dead)
goto inicio


:dead
echo.
echo.
echo Muerto.
pause>nul
exit


Saludos  ;D :rolleyes:
Pero aunque los que sepan me digan que no, yo sé muy bien que existe el lado oscuro del sol. – El lado soleado de la calle