How to create snake game in NOTEPAD

 First copy the texts given below and paste them in Windows Notepad. Then, go to files and click  'save as' and save the file as a BATCH FILE,


@echo off

if "%~1" == "startGame" goto :game

if "%~1" == "startController" goto :controller



::---------------------------------------------------------------------

:: setup some global variables used by both the game and the controller


setlocal disableDelayedExpansion

:getSession

if defined temp (set "tempFileBase=%temp%\") else if defined tmp set "tempFileBase=%tmp%\"

set "tempFileBase=%tempFileBase%Snake%time::=_%"

set "keyFile=%tempFileBase%_key.txt"

set "cmdFile=%tempFileBase%_cmd.txt"

set "gameLock=%tempFileBase%_gameLock.txt"

set "gameLog=%tempFileBase%_gameLog.txt"

set "signal=%tempFileBase%_signal.txt"

set "saveLoc=%userprofile%\Snake"

set "userPref=%saveLoc%\SnakeUserPref.txt"

set "hiFile=%saveLoc%\Snake!growth!Hi"

set "keyStream=9"

set "cmdStream=8"

set "lockStream=7"



::------------------------------------------

:: Lock this game session and launch.

:: Loop back and try a new session if failure.

:: Cleanup and exit when finished


call :launch %lockStream%>"%gameLock%" || goto :getSession

del "%tempFileBase%*"

exit /b



::------------------------------------------

:launch the game and the controller


call :fixLogs

copy nul "%keyFile%" >nul

copy nul "%cmdFile%" >nul

start "" /b cmd /c ^""%~f0" startController %keyStream%^>^>"%keyFile%" %cmdStream%^<"%cmdFile%" 2^>nul ^>nul^"

cmd /c ^""%~f0" startGame %keyStream%^<"%keyFile%" %cmdStream%^>^>"%cmdFile%" ^<nul^"

echo(



::--------------------------------------------------------------

:: Upon exit, wait for the controller to close before returning


:close

2>nul (>>"%keyFile%" call )||goto :close

if not exist "%~dp0CursorPos.exe" (

  echo Game play can be improved by installing

  echo Aacini's CursorPos.exe, available at

  echo http://goo.gl/hr6Kkn

  echo(

  echo %cmdcmdline%|find /i "%~f0">nul&&pause

)

exit /b 0



::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:game

title %~nx0

cls


::---------------------------------------

:: Playfield size

:: max playing field: (width-2)*(height-2) <= 1365


set "width=40"   max=99

set "height=25"  max=99


::----------------------------

:: resize the console window


set /a cols=width+1, lines=height+10, area=(width-2)*(height-2)

if %area% gtr 1365 (

  echo ERROR: Playfield area too large

  %sendCmd% quit

  exit

)

if %lines% lss 14 set lines=14

if %cols% lss 46 set cols=46

mode con: cols=%cols% lines=%lines%



::----------------------------

:: define variables


set "configOptions=diffCode difficulty growth moveKeys up down left right"

set "configOptionCnt=9"


set "moveKeys=4"


set "up=W"

set "down=S"

set "left=A"

set "right=D"

set "pause=P"


set "space= "

set "bound=#"

set "food=+"

set "head=@"

set "body=O"

set "death=X"


set "growth=1"


if exist "%userPref%" for /f "usebackq delims=" %%V in ("%userPref%") do set "%%V"


set "spinner1=-"

set "spinner2=\"

set "spinner3=|"

set "spinner4=/"

set "spinner= spinner1 spinner2 spinner3 spinner4 "


set "delay1=20"

set "delay2=15"

set "delay3=10"

set "delay4=7"

set "delay5=5"

set "delay6=3"


set "desc1=Sluggard"

set "desc2=Crawl"

set "desc3=Slow"

set "desc4=Normal"

set "desc5=Fast"

set "desc6=Insane"


set "spinnerDelay=3"


set /a "width-=1, height-=1"


:: define LF as a Line Feed (newline) character

set ^"LF=^


^" Above empty line is required - do not remove


:: define CR as a Carriage Return character

for /f %%A in ('copy /Z "%~dpf0" nul') do set "CR=%%A"


:: define BS as a BackSpace character

for /f %%A in ('"prompt $H&for %%B in (1) do rem"') do set "BS=%%A"


set "upper=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"

set "invalid=*~="



::---------------------------

:: define macros


if exist "%~dp0CursorPos.exe" (

  set "cls=CursorPos 0 0"

  set "ClearLine=echo(                                   &CursorPos 0 -1"

  set "ClearPrev=CursorPos 0 -0&echo(                                   "

) else (

  set "cls=cls"

  set "ClearLine="

  set "ClearPrev="

)


:: define a newline with line continuation

set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"


:: setErr

:::  Sets the ERRORLEVEL to 1

set "setErr=(call)"


:: clrErr

:::  Sets the ERRORLEVEL to 0

set "clrErr=(call )"



:: sendCmd  command

:::  sends a command to the controller

set "sendCmd=>&%cmdStream% echo"



:: getKey  [ValidKey]  [ValidKey...]

::: Check for keypress from the controller. Only accept a ValidKey.

::: Token delimiters and poison characters must be quoted.

::: Accept any key if no ValidKey specified.

::: Return result in Key variable. Key is undefined if no valid keypress.

set getKey=%\n%

for %%# in (1 2) do if %%#==2 (%\n%

  set key=%\n%

  set inKey=%\n%

  set keyTest=%\n%

  ^<^&%keyStream% set /p "inKey="%\n%

  if defined inKey (%\n%

    set inKey=!inKey:~0,-1!%\n%

    for %%C in (!args!) do set /a keyTest=1^&if /i !inKey! equ %%~C set key=!inKey!%\n%

  )%\n%

  if not defined keyTest set key=!inKey!%\n%

) else set args=



:: draw

:::  draws the board

set draw=%\n%

set screen=%\n%

for /l %%Y in (0,1,%height%) do set screen=!screen!!line%%Y!!LF!%\n%

set screen=!screen!Speed = !Difficulty! !replay!!LF!Growth Rate = !growth!   HighScore = !hi!!LF!Score = !score!   Time = !m!:!s!%\n%

if defined replay if not defined replayFinished (%\n%

  set screen=!screen!!LF!!LF!Press a key to abort the replay%\n%

)%\n%

%cls%^&echo(!screen!


:: test  X  Y  ValueListVar

:::  tests if value at coordinates X,Y is within contents of ValueListVar

set test=%\n%

for %%# in (1 2) do if %%#==2 (for /f "tokens=1-3" %%1 in ("!args!") do (%\n%

  for %%A in ("!line%%2:~%%1,1!") do if "!%%3:%%~A=!" neq "!%%3!" %clrErr% else %setErr%%\n%

)) else set args=



:: plot  X  Y  ValueVar

:::  places contents of ValueVar at coordinates X,Y

set plot=%\n%

for %%# in (1 2) do if %%#==2 (for /f "tokens=1-3" %%1 in ("!args!") do (%\n%

  set "part2=!line%%2:~%%1!"%\n%

  set "line%%2=!line%%2:~0,%%1!!%%3!!part2:~1!"%\n%

)) else set args=



::--------------------------------------

:: start the game

setlocal enableDelayedExpansion

if not exist "%saveLoc%\" md "%saveLoc%"

set "replay= Aborting... "

set "replayAvailable="

call :loadHighScores

call :mainMenu



::--------------------------------------

:: main loop (infinite loop)

for /l %%. in () do (


  %=== check for and process abort signal if in replay mode ===%

  if defined replay if exist "%signal%" (

    del "%signal%"

    set "replayFinished=1"

    %draw%

    echo(

    %ClearLine%

    <nul set /p "=Aborting... "

    findstr "^" >nul <&%keyStream%

    for %%A in (!configOptions!) do set "%%A=!%%ASave!"

    call :mainMenu

  )


  %=== compute time since last move ===%

  for /f "tokens=1-4 delims=:.," %%a in ("!time: =0!") do set /a "t2=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100, tDiff=t2-t1"

  if !tDiff! lss 0 set /a tDiff+=24*60*60*100


  if !tDiff! geq !delay! (

    %=== delay has expired, so time for movement ===%

    set /a t1=t2


    %=== compute game time ===%

    if not defined gameStart set "gameStart=!t2!"

    set /a "gameTime=(t2-gameStart)"

    if !gameTime! lss 0 set /a "gameTime+=24*60*60*100"

    set /a "gameTime=(gameTime-pauseTime)/100, m=gameTime/60, s=gameTime%%60"

    if !m! lss 10 set "m=0!m!"

    if !s! lss 10 set "s=0!s!"


    %=== get keypress ===%

    %getKey% !keys!

    if /i !key! equ !pause! (


      %=== pause game ===%

      echo(

      call :ask "PAUSED - Press a key to continue..."

      %ClearPrev%

      %sendCmd% go

      for /f "tokens=1-4 delims=:.," %%a in ("!time: =0!") do set /a "t2=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100, tDiff=t2-t1"

      if !tDiff! lss 0 set /a tDiff+=24*60*60*100

      set /a pauseTime+=tDiff


    ) else (


      %=== establish direction ===%

      if not defined replay (echo(!key!.) >>"!gameLog!"

      for %%K in (!key!) do if !moveKeys! equ 2 (

        set /a "xDiff=xTurn%%K*!yDiff!, yDiff=yTurn%%K*!xDiff!"

      ) else if "!%%KAxis!" neq "!axis!" (

        set /a "xDiff=xDiff%%K, yDiff=yDiff%%K"

        set "axis=!%%KAxis!"

      )


      %=== erase the tail ===%

      set "TX=!snakeX:~-2!"

      set "TY=!snakeY:~-2!"

      set "snakeX=!snakeX:~0,-2!"

      set "snakeY=!snakeY:~0,-2!"

      %plot% !TX! !TY! space


      %=== compute new head location and attempt to move ===%

      set /a "X=PX+xDiff, Y=PY+yDiff"

      set "X= !X!"

      set "Y= !Y!"

      set "X=!X:~-2!"

      set "Y=!Y:~-2!"

      (%test% !X! !Y! playerSpace) && (


        %=== move successful ===%


        %=== remove the new head location from the empty list ===%

        for %%X in ("!X!") do for %%Y in ("!Y!") do set "empty=!empty:#%%~X %%~Y=!"


        %=== eat any food that may be present ===%

        (%test% !X! !Y! food) && (

          %=== initiate growth ===%

          set /a grow+=growth


          %=== locate and draw new food ===%

          if defined replay (

            <&%keyStream% set /p "F="

          ) else (

            set /a "F=(!random!%%(emptyCnt-1))*6+1"

            (echo !F!) >>"!gameLog!"

          )

          for %%F in (!F!) do (%plot% !empty:~%%F,5! food)

        )


        if !grow! gtr 0 (

          %=== restore the tail ===%

          %plot% !TX! !TY! body

          set "snakeX=!snakeX!!TX!"

          set "snakeY=!snakeY!!TY!"

          set /a emptyCnt-=1


          %=== manage score ===%

          set /a "score+=1, grow-=1"

          if not defined replay if !score! gtr !hi! set /a "hi+=1, newHi=1"


        ) else (

          %=== add the former tail position to the empty list ===%

          set "empty=!empty!#!TX! !TY!"

        )


        %=== draw the new head ===%

        if defined snakeX (%plot% !PX! !PY! body)

        %plot% !X! !Y! head


        %=== Add the new head position to the snake strings ===%

        set "snakeX=!X!!snakeX!"

        set "snakeY=!Y!!snakeY!"

        set "PX=!X!"

        set "PY=!Y!"


        %draw%


      ) || (


        %=== failed move - game over ===%

        set "replayFinished=1"

        %plot% !TX! !TY! body

        call :spinner !PX! !PY! death

        %draw%

        if defined newHi (

          echo(

          echo New High Score - Congratulations^^!

          set "hi!diffCode!=!score!"

          copy "!gameLog!" "%hiFile%!diffCode!.txt" >nul

          >>"%hiFile%!diffCode!.txt" echo ::!score!

        )

        echo(

        %ClearLine%

        call :ask "Press a key to continue..."

        for %%A in (!configOptions!) do set "%%A=!%%ASave!"

        call :mainMenu

      )

    )

  )

)



::-------------------------------------

:getString  Prompt  Var  MaxLen

:: Prompt for a string with max lengh of MaxLen.

:: Valid keys are alpha-numeric, space, underscore, and dash

:: String is terminated by Enter

:: Backspace works to delete previous character

:: Result is returned in Var

set /a "maxLen=%3"

set "%2="

%sendCmd% prompt

<nul set /p "=%~1 "

call :purge

:getStringLoop

(%getKey% !upper! 0 1 2 3 4 5 6 7 8 9 " " _ - {Enter} !BS!)

if defined key (

  if !key! equ {Enter} (

    echo(

    exit /b

  )

  if !key! neq !BS! if !maxLen! gtr 0 (

    set /a maxLen-=1

    <nul set /p "=.!BS!!key!"

    set "%2=!%2!!key!

  )

  if !key! equ !BS! if defined %2 (

    set /a maxLen+=1

    <nul set /p "=!BS! !BS!"

    set "%2=!%2:~0,-1!"

  )

)

if defined inKey %sendCmd% one

goto :getStringLoop



::-------------------------------------

:ask  Prompt  ValidKey [Validkey]...

:: Prompt for a keypress.

:: Wait until a ValidKey is pressed and return result in Key variable.

:: Token delimiters, ), and poison characters must be quoted.

%sendCmd% prompt

<nul set /p "=%~1 "

(set validKeys=%*)

(set validKeys=!validKeys:%1=!)

call :purge

:getResponse

(%getKey% !validKeys!)

if not defined key (

  if defined inKey %sendCmd% one

  goto :getResponse

)

exit /b



:purge

set "inKey="

for /l %%N in (1 1 1000) do (

  set /p "inKey="

  if "!inKey!" equ "{purged}." exit /b

)<&%keyStream%

goto :purge



::-------------------------------------

:spinner  X  Y  ValueVar

set /a d1=-1000000

for /l %%N in (1 1 5) do for %%C in (%spinner%) do (

  call :spinnerDelay

  %plot% %1 %2 %%C

  %draw%

)

call :spinnerDelay

(%plot% %1 %2 %3)

exit /b



::-------------------------------------

:delay  centiSeconds

setlocal

for /f "tokens=1-4 delims=:.," %%a in ("!time: =0!") do set /a "spinnerDelay=%1, d1=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100"

:: fall through to :spinnerDelay


::-------------------------------------

:spinnerDelay

for /f "tokens=1-4 delims=:.," %%a in ("!time: =0!") do set /a "d2=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100, dDiff=d2-d1"

if %dDiff% lss 0 set /a dDiff+=24*60*60*100

if %dDiff% lss %spinnerDelay% goto :spinnerDelay

set /a d1=d2

exit /b



::-------------------------------------

:mainMenu

cls

set "loadAvailable="

echo Growth rate = !growth!

echo(

echo Main Menu:

echo(

echo   N - New game

if defined replayAvailable echo   R - Replay previous game

if defined saveAvailable   echo   S - Save a game

if exist *.snake.txt       echo   L - Load and watch a saved game&set "loadAvailable=L"


echo   C - Control options

echo   G - Graphic options

echo   Q - Quit

echo(

set "hiAvailable="

for /l %%N in (1 1 6) do if defined hi%%N (

  if not defined hiAvailable (

    echo Replay High Score:

    echo(

  )

  set "desc=!desc%%N!........"

  set "hiAvailable=!hiAvailable! %%N"

  echo   %%N - !desc:~0,8! !hi%%N!

)

if defined hiAvailable echo(

set "keys=N C G Q !hiAvailable! !replayAvailable! !saveAvailable! !loadAvailable!"

call :ask ">" !keys!

if /i !key! equ Q (

  %sendCmd% quit

  cls

  exit

)

if /i !key! equ N (

  set "replay="

  set "replayAvailable=R"

  set "saveAvailable=S"

  goto :initialize

)

if /i !key! equ S (

  if defined replayAvailable (

    call :ask "HighScore # or P for Previous:" !hiAvailable! P

  ) else (

    call :ask "HighScore #:" !hiAvailable!

  )

  echo !key!

  if /i !key! equ P (set "src=!gameLog!") else set "src=%hiFile%!key!.txt"

  call :getString "Save file name:" file 20

  copy "!src!" "!file!.snake.txt"

  call :ask "Press a key to continue..."

)

if /i !key! equ L (

  call :getString "Load file name:" file 20

  if exist "!file!.snake.txt" (

    set "replay=!file!.snake.txt"

    goto :initialize

  )

  echo Error: File "!file!.snake.txt" not found

  call :ask "Press a key to continue..."

)

if /i !key! equ R (

  set "replay=!gameLog!"

  goto :initialize

)

if !key! geq 1 if !key! leq 6 (

  set "replay=%hiFile%!key!.txt"

  goto :initialize

)

if /i !key! equ C call :controlOptions

if /i !key! equ G call :graphicOptions

goto :mainMenu



::-------------------------------------

:controlOptions

cls

set "keys={Enter} T L R P"

if !moveKeys! equ 4 set "keys=!keys! U D"

                    echo Control Options:

                    echo(

                    echo   T - Type... = !moveKeys! keys

                    echo(

                    echo   L - Left... = !left!

                    echo   R - Right.. = !right!

if !moveKeys! equ 4 echo   U - Up..... = !up!

if !moveKeys! equ 4 echo   D - Down... = !down!

                    echo(

                    echo   P - Pause.. = !pause!

                    echo(

                    echo   {Enter} - Return to Main Menu

                    echo(

call :ask ">" !keys!

if !key! equ {Enter} goto :saveUserPrefs

if /i !key! equ T (

  if !moveKeys! equ 2 (set "moveKeys=4") else set "moveKeys=2"

  goto :controlOptions

)

set "option= LLeft RRight UUp DDown PPause"

for /f %%O in ("!option:* %key%=!") do (

  call :ask "Press a key for %%O:"

  for %%K in (0 1 2) do if "!key!" equ "!invalid:~%%K,1!" goto :controlOptions

  for %%C in (!upper!) do set "key=!key:%%C=%%C!"

  set "%%O=!key!"

)

goto :controlOptions



::-------------------------------------

:graphicOptions

cls

echo Graphic Options:

echo(

echo   B - Border...... = !bound!

echo   E - Empty space. = !space!

echo   H - snake Head.. = !head!

echo   S - Snake body.. = !body!

echo   F - Food........ = !food!

echo   D - Death....... = !death!

echo(

echo   G - Growth rate. = !growth!

echo(

echo   {Enter} - Rturn to Main Menu

echo(

call :ask ">" B E H S F D G {Enter}

if !key! equ {Enter} goto :saveUserPrefs

if /i !key! equ G (

  call :ask "Press a digit for growth rate (0 = 10)" 0 1 2 3 4 5 6 7 8 9

  if !key! equ 0 set "key=10"

  set "growth=!key!"

  call :loadHighScores

) else (

  set "option=-BBorder:bound:-EEmpty Space:space:-HSnake Head:head:-SSnake Body:body:-FFood:food:-DDeath:death:"

  for /f "tokens=1,2 delims=:" %%A in ("!option:*-%key%=!") do (

    call :ask "Press a key for %%A"

    for %%K in (0 1 2) do if "!key!" equ "!invalid:~%%K,1!" goto :graphicOptions

    set "%%B=!key!"

  )

)

goto :graphicOptions



::------------------------------------

:saveUserPrefs

(for %%V in (moveKeys up down left right space bound food head body death pause growth) do echo %%V=!%%V!) >"%userPref%"

exit /b



::-------------------------------------

:initialize

cls

if defined replay (

  echo Replay Speed Options:

) else (

  echo Speed Options:

)

echo                       delay

echo    #   Description  (seconds)

echo   ---  -----------  ---------

for /l %%N in (1 1 6) do (

  set "delay=0!delay%%N!"

  set "desc=!desc%%N!           "

  echo    %%N   !desc:~0,11!    0.!delay:~-2!

)

echo(

call :ask "Pick a speed (1-6):" 1 2 3 4 5 6

set "difficulty=!desc%key%!"

set "delay=!delay%key%!"

set "diffCode=%key%"

echo %key% - %difficulty%

echo(

<nul set /p "=Initializing."

set "axis=X"

set "xDiff=+1"

set "yDiff=+0"

set "empty="

set /a "PX=1, PY=height/2, FX=width/2+1, FY=PY, score=0, emptyCnt=0, t1=-1000000"

set "gameStart="

set "m=00"

set "s=00"

set "snakeX= %PX%"

set "snakeY= %PY%"

set "snakeX=%snakeX:~-2%"

set "snakeY=%snakeY:~-2%"

for /l %%Y in (0 1 %height%) do (

  <nul set /p "=."

  set "line%%Y="

  for /l %%X in (0,1,%width%) do (

    set "cell="

    if %%Y equ 0        set "cell=%bound%"

    if %%Y equ %height% set "cell=%bound%"

    if %%X equ 0        set "cell=%bound%"

    if %%X equ %width%  set "cell=%bound%"

    if %%X equ %PX% if %%Y equ %PY% set "cell=%head%"

    if not defined cell (

      set "cell=%space%"

      set "eX= %%X"

      set "eY= %%Y"

      set "empty=!empty!#!eX:~-2! !eY:~-2!"

      set /a emptyCnt+=1

    )

    if %%X equ %FX% if %%Y equ %FY% set "cell=%food%"

    set "line%%Y=!line%%Y!!cell!"

  )

)

for %%A in (!configOptions!) do set "%%ASave=!%%A!"

set "replayFinished="

if defined replay (

  %sendCmd% replay

  %sendCmd% !replay!

  call :waitForSignal

  set "replay=(REPLAY at !difficulty!)"

  set "read=1"

  <&%keyStream% (

    for /l %%N in (1 1 !configOptionCnt!) do if defined read (

      set /p "ln="

      if "!ln!" equ "END" (set read=) else set "!ln!"

    )

  )

  set "keys="

  set "hi=0"

  for /f "delims=:" %%A in ('findstr "^::" "%hiFile%!diffCode!.txt" 2^>nul') do set "hi=%%A"

  (%draw%)

  call :delay 100

) else (

  if defined hi%diffCode% (set "hi=!hi%diffCode%!") else set "hi=0"

  (%draw%)

  >"!gameLog!" ( 

    for %%A in (!configOptions!) do (echo %%A=!%%A!)

    (echo END)

  )

  echo(

  if !moveKeys! equ 4 (

    echo Controls: !up!=up !down!=down !left!=left !right!=right !pause!=pause

  ) else (

    echo Controls: !left!=left !right!=right !pause!=pause

  )

  echo Avoid running into yourself (!body!!body!!head!^) or wall (!bound!^)

  echo Eat food (!food!^) to grow.

  echo(

  call :ask "Press a key to start..."

  %sendCmd% go

)

set "pauseTime=0"

set "xDiff!up!=+0"

set "xDiff!down!=+0"

set "xDiff!left!=-1"

set "xDiff!right!=+1"

set "yDiff!up!=-1"

set "yDiff!down!=+1"

set "yDiff!left!=+0"

set "yDiff!right!=+0"

set "!up!Axis=Y"

set "!down!Axis=Y"

set "!left!Axis=X"

set "!right!Axis=X"

set "xTurn!left!=1"

set "xTurn!right!=-1"

set "yTurn!left!=-1"

set "yTurn!right!=1"

set "playerSpace=!space!!food!"

set ^"keys="!left!" "!right!" "!pause!"^"

set "newHi="

set "grow=0"

if !moveKeys! equ 4 set ^"keys=!keys! "!up!" "!down!"^"

if exist "%~dp0CursorPos.exe" if not defined replay (

  cursorpos 0 -4

  for /l %%N in (1 1 5) do (echo(                                             )

)

exit /b



::-------------------------------------

:waitForSignal

if not exist "%signal%" goto :waitForSignal

del "%signal%"

exit /b



::-------------------------------------

:loadHighScores

set "saveAvailable="

for /l %%N in (1 1 6) do (

  set "hi%%N="

  for /f "delims=:" %%A in ('findstr "^::" "%hiFile%%%N.txt" 2^>nul') do (

    set "hi%%N=%%A"

    set "saveAvailable=S"

  )

)

exit /b



::-------------------------------------

:fixLogs

setlocal enableDelayedExpansion

for %%F in (*.snake) do (

  ren "%%F" "%%F.txt"

  call :fixLog "%%F.txt"

)

pushd "%SaveLoc%"

for /f "delims=" %%F in ('dir /b SnakeHi*.txt 2^>nul') do (

  set "file=%%~nF"

  set "file=Snake1Hi!file:~-1!.txt"

  ren "%%F" "!file!"

  call :fixLog "!file!"

)

popd

exit /b


:fixLog  filePath

>"%~1.new" (

  <"%~1" (

    for %%A in (diffCode difficulty moveKeys up down left right) do (

      set /p "val="

      (echo %%A=!val!)

    )

  )

  (echo growth=1)

  (echo END)

  more +7 "%~1"

)

move /y "%~1.new" "%~1" >nul

exit /b



::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:controller

:: Detects keypresses and sends the information to the game via a key file.

:: The controller has various modes of input that are activated by commands sent

:: from the game via a cmd file.

::

:: Modes:

::

::   hold   - No input, wait for command

::

::   go     - Continuously get/send key presses

::

::   prompt - Send {purged} marker to allow game to purge input buffer, then

::            get/send a single key press and hold

::

::   one    - Get/send a single key press and hold

::

::   replay - Copy a game log to the key file. The next line in cmd file

::            specifies name of log file to copy. During replay, the controller

::            will send an abort signal to the game if a key is pressed.

::

::   quit   - Immediately exit the controller process

::

:: As written, this routine incorrectly reports ! as ), but that doesn't matter

:: since we don't need that key. Both <CR> and Enter key are reported as {Enter}.

:: An extra character is appended to the output to preserve any control chars

:: when read by SET /P.


setlocal enableDelayedExpansion

for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"

set "cmd=hold"

set "inCmd="

set "key="

for /l %%. in () do (

  if "!cmd!" neq "hold" (

    for /f "delims=" %%A in ('xcopy /w "%~f0" "%~f0" 2^>nul') do (

      if not defined key set "key=%%A"

    )

    set "key=!key:~-1!"

    if !key! equ !CR! set "key={Enter}"

  )

  <&%cmdStream% set /p "inCmd="

  if defined inCmd (

    if !inCmd! equ quit exit

    set "cmd=!inCmd!"

    if !inCmd! equ replay (

      <&%cmdStream% set /p "file="

      type "!file!" >&%keyStream%

      copy nul "%signal%"

    )

    set "inCmd="

  )

  if defined key (

    if "!cmd!" equ "prompt" (echo {purged}.)

    if "!cmd!" equ "replay" (

      copy nul "%signal%" >nul

      set "cmd=go"

    ) else (echo(!key!.)

    if "!cmd!" neq "go" set "cmd=hold"

    set "key="

  )>&%keyStream%

)


WARNING=DO NOT EDIT ANY WORD FROM THE TEXTS YOU COPIED

Is the game awesome? mention your idea in the comments box below.



Comments

  1. Really helpful for people who are busy in their day-today life. Even I play this game after spending a few minutes for the setup. Good post. Post more as useful as this.☺☺

    ReplyDelete
  2. Wow, it's helpful for mee as well. Thank You InfoSpot

    ReplyDelete
  3. Yes, it was helpful for me as well. Thank you InfoSpot

    ReplyDelete

Post a Comment

Popular Posts