Search code examples
batch-filenumpad

batch numberpad typing game error v2


I am creating a typing game for my office for whoever would like to try and improve their numberpad typing skill. My code keeps score, if the input is correct or incorrect, and with help from the stackoverflow community (the great Compo), my code has been improved. now I am trying to add difficulty options for the user. but I seem to be having a problem making the batch reference back to the entered difficulty and following the correct difficulty option. I know I can use IF and ELSE but im still getting used to how batch works.

version 1 of code before adding difficulty

@ECHO OFF

SET/A "correct=incorrect=0"

:START
CLS
COLOR 07
SET "num=%RANDOM%"
ECHO.
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
ECHO.
ECHO %num%
ECHO.
SET /P "INP= "
ECHO.
IF "%INP%"=="%num%" (
    COLOR 27
    ECHO CORRECT
    SET/A "correct+=1"
    PING -n 2 0.0.0.0 1>NUL
) ELSE (
    COLOR 47
    ECHO INCORRECT
    SET/A "incorrect+=1"
    PING -n 2 0.0.0.0 1>NUL
)
GOTO START

version 1 of code with difficulty option

@ECHO OFF

SET/A "correct=incorrect=0"

:STARTDIFF
ECHO DIFFICULTY?
ECHO.
ECHO EASY
ECHO HARD
ECHO.
SET /P "DIFF= "
IF "%DIFF%" EQU EASY GOTO STARTEASY
IF "%DIFF%" EQU HARD GOTO STARTHARD
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF

: STARTEASY
CLS
COLOR 07
SET "num=%RANDOM%"
GOTO TEST

: STARTHARD
CLS
COLOR 07
SET "num=%RANDOM%%RANDOM%"
GOTO TEST

: TEST
ECHO.
ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
ECHO.
ECHO %num%
ECHO.
SET /P "INP= "
ECHO.
IF "%INP%"=="%num%" (
    COLOR 27
    ECHO CORRECT
    SET/A "correct+=1"
    PING -n 2 0.0.0.0 1>NUL
) ELSE (
    COLOR 47
    ECHO INCORRECT
    SET/A "incorrect+=1"
    PING -n 2 0.0.0.0 1>NUL
)

ECHO %DIFF%>NUL
IF "%DIFF%" EQU EASY GOTO STARTEASY
IF "%DIFF%" EQU HARD GOTO STARTHARD
::IF "%DIFF%" NEQ EASY GOTO STARTDIFF

::GOTO START

how do tell the code to reference back to the set difficulty from the beginning and continue using that difficulty?

My apologies, I wish I new the correct terminology to better explain what I'm trying to do.


Solution

  • I'm not sure why you decided to completely change the structure back to a series of GOTO's:

    Try this:

    @ECHO OFF
    
    ECHO DIFFICULTY?
    ECHO.
    ECHO 1. EASY
    ECHO 2. HARD
    ECHO.
    CHOICE /C 12
    SET "LEVEL=%ERRORLEVEL%"
    SET/A "correct=incorrect=0"
    
    :START
    CLS
    COLOR 07
    IF "%LEVEL%"=="2" (Set "num=%RANDOM%%RANDOM%") ELSE SET "num=%RANDOM%" 
    ECHO.
    ECHO SCORE - CORRECT %correct%, INCORRECT %incorrect%
    ECHO.
    ECHO %num%
    ECHO.
    SET/P "INP= "
    ECHO.
    IF "%INP%"=="%num%" (
        COLOR 27
        ECHO CORRECT
        SET/A "correct+=1"
        TIMEOUT 1 1>NUL
    ) ELSE (
        COLOR 47
        ECHO INCORRECT
        SET/A "incorrect+=1"
        TIMEOUT 1 1>NUL
    )
    GOTO START