Search code examples
batch-filesysteminternal

Batch file internal data


I am trying to give my memory game a high score option that will save your score in itself and be call all the saved scores when you visit the "high score" section of the program. The code i have so far is here:

@echo off
REM Produced by Calder Hutchins
REM This is a game
title Memory Game
:begin
set point=0
cls
echo.
echo Memeory Game
echo ------------------
echo 1) Play
echo 2) Instructions
echo 3) High Scores
echo ------------------
set /p pick=^>
if %pick%==1 goto one
if %pick%==2 goto two
if %pick%==3 goto three
goto begin
:one
cls
REM Determines the number
if %point% LSS 6  set /a rand=%random% %% (100 - 1 + 1)+ 1
if %point% LSS 12 if %point% GTR 5 set /a rand=%random% %% (500 - 100 + 1)+ 100
if %point% LSS 18 if %point% GTR 11 set /a rand=%random% %% (1000 - 500 + 1)+ 500
if %point% LSS 24 if %point% GTR 17 set /a rand=%random% %% (2000 - 1000 + 1)+ 1000
if %point% LSS 30 if %point% GTR 23 set /a rand=%random% %% (9000 - 1500 + 1)+ 1500
if %point% LSS 36 if %point% GTR 29 set /a rand=%random% %% (19000 - 5000 + 1)+ 5000
if %point% LSS 42 if %point% GTR 35 set /a rand=%random% %% (32000 - 10000 + 1)+ 10000
if %point% LSS 48 if %point% GTR 41 set /a rand=%random% %% (999 - 100 + 1)+ 100
if %point% LSS 48 if %point% GTR 41 set /a randtwo=%random% %% (999 - 100 + 1)+ 100
if %point% GTR 47 set /a rand=%random% %% (9999 - 1000 + 1)+ 1000
if %point% GTR 47 set /a randtwo=%random% %% (9999 - 1000 + 1)+ 1000
echo.
REM  Prints the number  
if %point% LSS 42 echo %rand% 
if %point% GTR 41 set rand=%rand%%randtwo%
if %point% GTR 41 echo %rand%
echo.
ping localhost -n 3 >nul
cls
echo.
echo.
echo.
set /p yourOption=Guess:
REM Determines correct or wrong
if %youroption%==%rand% set /a point=%point% +1 & goto one
cls
echo.
echo You scored: %point%
echo.
set /p name=Type name:
echo %name%  -  %point% >> E:\Scripts\Batch\memoryGame\score.txt
goto begin
:two
cls
echo. 
echo The objective of the game is to get as many points as possible.  To get points you must correctly retype the numbers that appear on the screen.  The numbers show for a short period of time.  As you get more points the numbers get longer!  When you have lost you will be prompted to enter your name.  You can view the highscores too!  
echo. 
pause
goto begin
:three
cls
echo.
sort E:\Scripts\Batch\memoryGame\score.txt
echo.
pause
goto begin

The one above just saves to a file but i want it to save internally if it is possible. I was given a script that i have modified but can find no way to implement in my game. The code for the script is:

@echo off
for /f "tokens=1 delims=:" %%D in ('findstr /R /N "storedData" "%~f0"' ) do set end_batch=%%D
echo Make data

echo echo data entry 4^>^>"%~f0"
echo(>>"%~f0"
echo data entry ^4>>"%~f0"

echo Print Data
type "%~f0" | more +%end_batch%
exit /b 0


:storedData

Any suggestions on how i can get it to work?


Solution

  • Hmm.. I have a better idea than my previous answer - alternate data streams(works only on NTFS):

        echo You scored: %point%
        echo.
        set /p name=Type name:
        echo %name%  -  %point% >>"%~f0:scores"
        goto begin
        :two
        cls
        echo. 
        echo The objective of the game is to get as many points as possible.  To get points you must correctly retype the numbers that appear on the screen.  The numbers show for a short period of time.  As you get more points the numbers get longer!  When you have lost you will be prompted to enter your name.  You can view the highscores too!  
        echo. 
        pause
        goto begin
        :three
       cls
       echo.
       more<"%~f0:scores" | sort
       echo.
       pause
       goto begin
    

    But this will be literal sorting...

    EDIT:

    @echo off
    REM Produced by Calder Hutchins
    REM This is a game
    title Memory Game
    :begin
    set point=0
    cls
    echo.
    echo Memeory Game
    echo ------------------
    echo 1) Play
    echo 2) Instructions
    echo 3) High Scores
    echo ------------------
    set /p pick=^>
    if %pick%==1 goto one
    if %pick%==2 goto two
    if %pick%==3 goto three
    goto begin
    :one
    cls
    REM Determines the number
    if %point% LSS 6  set /a rand=%random% %% (100 - 1 + 1)+ 1
    if %point% LSS 12 if %point% GTR 5 set /a rand=%random% %% (500 - 100 + 1)+ 100
    if %point% LSS 18 if %point% GTR 11 set /a rand=%random% %% (1000 - 500 + 1)+ 500
    if %point% LSS 24 if %point% GTR 17 set /a rand=%random% %% (2000 - 1000 + 1)+ 1000
    if %point% LSS 30 if %point% GTR 23 set /a rand=%random% %% (9000 - 1500 + 1)+ 1500
    if %point% LSS 36 if %point% GTR 29 set /a rand=%random% %% (19000 - 5000 + 1)+ 5000
    if %point% LSS 42 if %point% GTR 35 set /a rand=%random% %% (32000 - 10000 + 1)+ 10000
    if %point% LSS 48 if %point% GTR 41 set /a rand=%random% %% (999 - 100 + 1)+ 100
    if %point% LSS 48 if %point% GTR 41 set /a randtwo=%random% %% (999 - 100 + 1)+ 100
    if %point% GTR 47 set /a rand=%random% %% (9999 - 1000 + 1)+ 1000
    if %point% GTR 47 set /a randtwo=%random% %% (9999 - 1000 + 1)+ 1000
    echo.
    REM  Prints the number  
    if %point% LSS 42 echo %rand% 
    if %point% GTR 41 set rand=%rand%%randtwo%
    if %point% GTR 41 echo %rand%
    echo.
    ping localhost -n 3 >nul
    cls
    echo.
    echo.
    echo.
    set /p yourOption=Guess:
    REM Determines correct or wrong
    if %youroption%==%rand% set /a point=%point% +1 & goto one
    cls
    echo.
    echo You scored: %point%
    echo.
    set /p name=Type name:
    echo %name%  -  %point% >>"%~f0:scores"
    goto begin
    :two
    cls
    echo. 
    echo The objective of the game is to get as many points as possible.  To get points you must correctly retype the numbers that appear on the screen.  The numbers show for a short period of time.  As you get more points the numbers get longer!  When you have lost you will be prompted to enter your name.  You can view the highscores too!  
    echo. 
    pause
    goto begin
    :three
    cls
    echo.
    more<"%~f0:scores" | sort
    echo.
    pause
    goto begin