Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: RafaelTheHacker372 en 23 Diciembre 2020, 20:30 pm



Título: Crear contadores multiples en batch
Publicado por: RafaelTheHacker372 en 23 Diciembre 2020, 20:30 pm
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!


Título: Re: Crear contadores multiples en batch
Publicado por: 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:
Código:
...
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í:
Código:
...
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.

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

Código:
@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


Título: Re: Crear contadores multiples en batch
Publicado por: Mudereded401 en 29 Diciembre 2020, 17:55 pm
Hola, buen día.

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

En la linea de "mas hambre" tenemos el primer error:
Código:
...
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í:
Código:
...
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.

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

Código:
@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.

Código:
@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: