Skapa Program för orm (2 / 4 steg)
Steg 2: Sedan kopiera och klistra in denna kod på anteckningar
om "% ~ 1" == "startGame" goto: spel
om "% ~ 1" == "startController" goto: controller
::---------------------------------------------------------------------
:: setup vissa globala variabler används av både spelet och controller
SETLOCAL disableDelayedExpansion
: getSession
om definieras temp (ange "tempFileBase=%temp%\") annat om definierat som tmp "tempFileBase=%tmp%\"
Ange "tempFileBase = % tempFileBase % orm % tid:: = _ %"
Ange "keyFile=%tempFileBase%_key.txt"
Ange "cmdFile=%tempFileBase%_cmd.txt"
Ange "gameLock=%tempFileBase%_gameLock.txt"
Ange "gameLog=%tempFileBase%_gameLog.txt"
Ange "signal=%tempFileBase%_signal.txt"
Ange "saveLoc=%userprofile%\Snake"
Ange "userPref=%saveLoc%\SnakeUserPref.txt"
Ange "hiFile=%saveLoc%\Snake!growth! Hej"
::------------------------------------------
:: Lås denna spelomgång och lanseringen.
:: Loop tillbaka och prova en ny session om misslyckande.
:: Rensning och avsluta när du är klar
ring: starta 7 > "% gameLock %" || gå till: getSession
del "% tempFileBase % *"
Exit /b
::------------------------------------------
: starta spelet och controller
ring: fixLogs
Kopiera nul "% nyckelfil %" > nul
Kopiera nul "% cmdFile %" > nul
starta "" /b cmd/c ^ "" % ~ f0 "startController 9 ^ > ^ >"% nyckelfil %"8 ^ <"% cmdFile %"2 ^ > nul ^ > nul ^"
cmd/c ^ "" % ~ f0 "startGame 9 ^ <"% nyckelfil %"8 ^ > ^ >"% cmdFile %"^ echo ()
::--------------------------------------------------------------
:: Vid utloggning, vänta för den registeransvarige att stänga innan du återvänder
: Stäng
2 > nul (>> "% nyckelfil %" samtal) || gå till: Stäng
om det inte finns "% ~ dp0CursorPos.exe" ()
ECHO spelet kan förbättras genom att installera
ECHO Aacini's CursorPos.exe, tillgänglig på
ECHO http://goo.gl/hr6Kkn
ECHO)
ECHO % cmdcmdline % |find /i "% ~ f0" > nul & & pausa
)
Exit b 0
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: spel
title % ~ nx0
CLS
::---------------------------------------
:: Spelplanen storlek
:: max spelplan: (width-2)*(height-2) < = 1365
Ange "bredd = 40" max = 99
Ange "höjd = 25" max = 99
::----------------------------
:: ändra storlek på fönstret
Ange/a cols = bredden + 1, rader = höjd + 10, area=(width-2)*(height-2)
om % området % gtr 1365 ()
ECHO fel: spelplanen område för stor
% sendCmd % sluta
Exit
)
om % linjer % lss 14 set rader = 14
om % cols % lss 46 set cols = 46
läget con: cols = % cols % rader = % linjer %
::----------------------------
:: definiera variabler
Ange "configOptions = diffCode svårighet tillväxt moveKeys upp ner vänster höger"
Ange "configOptionCnt = 9"
Ange "moveKeys = 4"
Ange "upp = W"
Ange "ner = S"
Ange "vänster = en"
Ange "höger = D"
Ange "paus = P"
Ange "utrymme ="
Ange "bunden = #"
Ange "mat = +"
Ange "huvud =
Ange "kroppen = O"
Ange "döden = X"
Ange "tillväxt = 1"
om det finns "% userPref %" för f "usebackq delims =" % % i ("% userPref %") ställer in "%% V"
Ange "spinner1 =-"
Ange "spinner2 = \"
Ange "spinner3 = |"
Ange "spinner4 = /"
Ange "spinner = spinner1 spinner2 spinner3 spinner4"
Ange "delay1 = 20"
Ange "delay2 = 15"
Ange "delay3 = 10"
Ange "delay4 = 7"
Ange "delay5 = 5"
Ange "delay6 = 3"
Ange "desc1 = trögdjur"
Ange "desc2 = Crawl"
Ange "desc3 = långsam"
Ange "desc4 = Normal"
Ange "desc5 = snabb"
Ange "desc6 = Insane"
Ange "spinnerDelay = 3"
Ange/a "bredd-= 1, höjd-= 1"
:: definiera LF som karaktär radmatning (ny rad)
ställa in ^ "LF = ^
^ "Framför tomma line är krävs - ta inte bort
:: definiera CR som en vagnretur karaktär
för f % % i (' kopiera /Z "% ~ dpf0" nul ") ställer in" CR = %% A "
:: definiera BS som ett backsteg tecken
för f % % i (' "snabb $H & för % % i (1) rem" ") ställer in" BS = %% A "
Ange "övre = en 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"
Ange "ogiltig = * ~ ="
::---------------------------
:: definiera makron
om det finns "% ~ dp0CursorPos.exe" ()
Ange "cls = CursorPos 0 0"
Ange "ClearLine = echo (& CursorPos 0 -1"
Ange "ClearPrev = CursorPos 0-() 0 & echo"
) annat ()
Ange "cls = cls"
Ange "ClearLine ="
Ange "ClearPrev ="
)
:: definiera en ny rad med linje fortsättning
ställa in ^ "\n=^^^%LF%%LF%^%LF%%LF%^^"
:: setErr
::: Sätter ERRORLEVEL till 1
Ange "setErr=(call)"
:: clrErr
::: Sätter ERRORLEVEL till 0
Ange "clrErr = (call)"
:: sendCmd-kommandot
::: skickar ett kommando till styrenheten
Ange "sendCmd = > & 8 echo"
:: getKey [ValidKey] [ValidKey...]
::: Kontrollera knapptryckning från registeransvarige. Bara acceptera en ValidKey.
::: Token avgränsare och gift tecken ska anges.
::: Acceptera någon nyckel om inga ValidKey anges.
::: Returnera resultat i nyckel variabel. Nyckeln är odefinierad om ingen giltig tangenttryckning.
ställa in getKey=%\n%
för %% # i (1 2) göra om %% #== 2 (%\n%
ställa in key=%\n%
ställa in inKey=%\n%
ställa in keyTest=%\n%
^ < ^ & 9 ange /p "inKey="%\n%
om definierat inKey (%\n%
ställa in inKey=!inKey:~0,-1!%\ n %
för % % i (! args!) ställer in /a keyTest = 1 ^ & om /i! inKey! EQU %% ~ C Ställ in key=!inKey!%\ n %
)%\n%
om inte definierade keyTest ställa key=!inKey!%\ n %
) annat set args =
:: Rita
::: drar styrelsen
ställa in draw=%\n%
ställa in screen=%\n%
för/l % % (0,1, % höjd %) ställer in skärmen =! skärmen! linje %% Y! LF!%\ n %
Ställ in skärmen =! skärmen! Hastighet =! Svårigheten!! repris!! LF! Tillväxt =! tillväxt! HighScore =! Hej! LF! Poäng =! poäng! Tid =! m!:!s!%\ n %
om definitionen repris om inte definieras replayFinished (%\n%
Ställ in skärmen =! skärmen! LF! LF! Tryck på en för att avbryta replay%\n%
)%\n%
cls % ^ & echo(!screen!
:: testa X Y ValueListVar
::: tester om värdet på koordinater X, Y är inom innehållet i ValueListVar
ställa in test=%\n%
för %% # i (1 2) göra om %% #== 2 (för f "tokens = 1-3" % % i ("! args!") göra (%\n%
för % % i ("! linje %% 2: ~ %% 1,1!") göra om "! %% 3: %% ~ A =!"neq"! %% 3!" % clrErr % annat %setErr%%\n%
)) annat set args =
:: Rita X Y ValueVar
::: placerar innehållet i ValueVar vid koordinater X, Y
ställa in plot=%\n%
för %% # i (1 2) göra om %% #== 2 (för f "tokens = 1-3" % % i ("! args!") göra (%\n%
Ange "part2=!line%%2:~%%1!"%\ n %
Ange "linje %% 2 =! linje %% 2: ~ 0, %% 1! %%3!! part2:~1!"%\ n %
)) annat set args =
::--------------------------------------
:: starta spelet
SETLOCAL enableDelayedExpansion
om det inte finns "% saveLoc%\" md "% saveLoc %"
Ange "replay = skulle... "
Ange "replayAvailable ="
ring: loadHighScores
ring: huvudmeny
::--------------------------------------
:: huvudloop (oändlig loop)
för/l %%. gör i ())
% === Kontrollera och process avbryta signal om i Reprisläge === %
om definierat repris om finns "% signal %" ()
del "% signal %"
Ange "replayFinished = 1"
Rita %
ECHO)
ClearLine %
ring: rensa
för % % i (! configOptions!) ställer in "%% A =! %% AOM!"
ring: huvudmeny
)
% === beräkna tiden sedan senaste drag === %
för f "tokens = 1-4 delims =:.," % % i ("! tid: = 0!") ställer in/a "t2 = (((1 %% en * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100, tDiff = t2-t1"
om! tDiff! LSS 0 set/a tDiff += 24 * 60 * 60 * 100
om! tDiff! GEQ! dröjsmål! (
% === dröjsmål har löpt ut, så dags för rörelse === %
Ange/a t1 = t2
% === beräkna speltid === %
om inte definierat gameStart uppsättning "gameStart =! t2!"
Ange/a "gameTime=(t2-gameStart)"
om! gameTime! LSS 0 set/a "gameTime += 24 * 60 * 60 * 100"
Ange/a "gameTime =(gameTime-pauseTime)/100, m = gameTime/60, s = gameTime %% 60"
om! m! LSS 10 set "m = 0! m!"
om! s! LSS 10 set "s = 0! s!"
% === få knapptryckning === %
getKey %! nycklar!
om /i! nyckel! EQU! paus! (
% === pausa spelet === %
ECHO)
ring: be "PAUSAD - tryck på en tangent för att fortsätta..."
% ClearPrev %
% sendCmd % gå
för f "tokens = 1-4 delims =:.," % % i ("! tid: = 0!") ställer in/a "t2 = (((1 %% en * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100, tDiff = t2-t1"
om! tDiff! LSS 0 set/a tDiff += 24 * 60 * 60 * 100
Set/a pauseTime += tDiff
) annat ()
% === upprätta riktning === %
om inte definierat replay (echo(!key!.) >> "! gameLog!"
för % % i (! nyckel!) göra om! moveKeys! () EQU 2
Ange/a "xDiff = xTurn %% K *! yDiff!, yDiff = yTurn %% K *! xDiff!"
) annars om "! %% KAxis!"neq"! axel!" (
Ange/a "xDiff = xDiff %% K, yDiff = yDiff %% K"
Ange "axel =! %% KAxis!"
)
% === Radera svansen === %
Ange "TX =! snakeX: ~ -2!"
Ange "TY =! snakeY: ~ -2!"
Ange "snakeX =! snakeX: ~ 0, -2!"
Ange "snakeY =! snakeY: ~ 0, -2!"
plot %! TX!! TY! utrymme
% === beräkna ny huvudet plats och försöker flytta === %
Ange/a "X = PX + xDiff, Y = PY + yDiff"
Ange "X =! X!"
Ange "Y =! Y!"
Ange "X =! X: ~ -2! "
Ange "Y =! Y: ~ -2! "
(test %! X!! Y! playerSpace) & & ()
% === flytta lyckat === %
% === ta bort den nya huvud platsen från listan tom === %
för % % i ("! X!") göra för % % i ("! Y!") ställer in "Tom =! Tom: #%% ~ X %% ~ Y =!"
% === äta någon mat som kan finnas === %
(test %! X!! Y! mat) & & ()
% === inleda tillväxt === %
Set/a växa += tillväxt
% === lokalisera och dra ny mat === %
om definierat replay)
< & 9 ange /p "F ="
) annat ()
Ange/a "F = (! slumpmässiga! %%(emptyCnt-1)) * 6 + 1"
(echo! F!) >> "! gameLog!"
)
för % % i (!) F!) göra (tomt %! Tom: ~ %% F, 5! mat)
)
om! växa! () GTR 0
% === återställa svansen === %
plot %! TX!! TY! kropp
Ange "snakeX =! snakeX! TX!"
Ange "snakeY =! snakeY! TY!"
Set/a emptyCnt-= 1
% === hantera poäng === %
Set/a "poäng + = 1, växa-= 1"
om inte definierat repris om! poäng! GTR! Hej! Ange/a "Hej + = 1, newHi = 1"
) annat ()
% === lägga till tidigare svans positionen i listan tom === %
Ange "Tom =! tomma! #! TX!! TY!"
)
% === Rita den nya chefen === %
om definierat snakeX (% tomt %! PX!! PY! Body)
plot %! X!! Y! huvud
% === Lägga till nya huvud ståndpunkt i strängarna orm === %
Ange "snakeX =! X! snakeX!"
Ange "snakeY =! Y! snakeY!"
Ange "PX =! X!"
Ange "PY =! Y!"
Rita %
) || (
% === misslyckade flytta - spelet över === %
Ange "replayFinished = 1"
plot %! TX!! TY! kropp
ring: spinner! PX!! PY! död
Rita %
om definierat () newHi
ECHO)
ECHO nya High Score - Grattis ^ ^!
Ange "Hej! diffCode! =! poäng!"
Kopiera "! gameLog!" "% hiFile %! diffCode!. txt"> nul
>> "% hiFile %! diffCode!. txt"echo::! poäng!
)
ECHO)
ClearLine %
ring: be "Tryck en tangent för att fortsätta..."
för % % i (! configOptions!) ställer in "%% A =! %% AOM!"
ring: huvudmeny
)
)
)
)
::-------------------------------------
: getString snabb Var MaxLen
:: Fråga efter en sträng med max lengh av MaxLen.
:: Giltiga nycklar är alfanumeriska, utrymme, understreck och bindestreck
:: Sträng avslutas av RETUR
:: Backsteg fungerar ta bort föregående tecken
:: Resultatet returneras i Var
Ange/a "maxLen = %3"
Ange "%2 ="
% sendCmd % prompt
ring: rensa
: getStringLoop
(% getKey %! övre! 0 1 2 3 4 5 6 7 8 9 "" _ - (Enter)! BS!)
om definierat nyckel)
om! nyckel! () EQU (Enter)
ECHO)
Exit /b
)
om! nyckel! NEQ! BS! om! maxLen! () GTR 0
Set/a maxLen-= 1
Ange "%2 =! %2! nyckel!
)
om! nyckel! EQU! BS! om definierat () %2
Ange/a maxLen += 1
Ange "%2 =! %2: ~ 0, -1!"
)
)
om definierat inKey % sendCmd % en
gå till: getStringLoop
::-------------------------------------
: fråga snabbt ValidKey [Validkey]...
:: Fråga efter en knapptryckning.
:: Vänta tills en ValidKey trycks och returnera resultat i nyckel variabel.
:: Token avgränsare), och gift tecken ska anges.
% sendCmd % prompt
(ange validKeys = % *)
(ange validKeys =! validKeys:% 1 =!)
ring: rensa
: getResponse
(% getKey %! validKeys!)
om inte definierat nyckel)
om definierat inKey % sendCmd % en
gå till: getResponse
)
Exit /b
: rensa
Ange "inKey ="
för/l % % (1 1 1000) göra ()
ställa in /p "inKey ="
om "! inKey!" equ "{renade}." exit /b
) < & 9
gå till: rensa
::-------------------------------------
: spinner X Y ValueVar
Set/a = d1-1000000
för/l % % (1 1 5) gör % % gör () i (% spinner %)
ring: spinnerDelay
% tomt % %%2% %
Rita %
)
ring: spinnerDelay
(% tomt % % %2% 3)
Exit /b
::-------------------------------------
: fördröja centiSeconds
SETLOCAL
för f "tokens = 1-4 delims =:.," % % i ("! tid: = 0!") ställer in/a "spinnerDelay = %1, d1 = (((1 %% en * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100"
:: faller genom: spinnerDelay
::-------------------------------------
: spinnerDelay
för f "tokens = 1-4 delims =:.," % % i ("! tid: = 0!") ställer in/a "d2 = (((1 %% en * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100, dDiff = d2-d1"
om % dDiff % lss 0 /a dDiff += 24 * 60 * 60 * 100
om % dDiff % lss % spinnerDelay % gå till: spinnerDelay
Ange/a d1 = d2
Exit /b
::-------------------------------------
: huvudmeny
CLS
Ange "loadAvailable ="
Upprepa ökningen =! tillväxt!
ECHO)
ECHO huvudmenyn:
ECHO)
ECHO Nilsson - nytt spel
om definierat replayAvailable eko R - Replay föregående spel
om definierat saveAvailable eko S - spara ett spel
om det finns *. snake.txt echo L - belastning och titta på en sparade spel & set "loadAvailable = L"
ECHO C - alternativ
ECHO G - grafik alternativ
ECHO Q - Quit
ECHO)
Ange "hiAvailable ="
för/l % % (1 1 6) gör om definierat Hej %% () N
om inte definierat () hiAvailable
ECHO Replay höga poäng:
ECHO)
)
Ange "desc =! desc %% N!..."
Ange "hiAvailable =! hiAvailable! %% NILSSON "
ECHO % %! desc: ~ 0, 8!! Hej %% N!
)
om definierat hiAvailable echo)
Ange "nycklar = N C G Q! hiAvailable!! replayAvailable!! saveAvailable!! loadAvailable!"
ring: be ">"! nycklar!
om /i! nyckel! () EQU Q
% sendCmd % sluta
CLS
Exit
)
om /i! nyckel! EQU Nilsson)
Ange "replay ="
Ange "replayAvailable = R"
Ange "saveAvailable = S"
gå till: initiera
)
om /i! nyckel! () EQU S
om definierat () replayAvailable
ring: be "HighScore # eller P för föregående:"! hiAvailable! PERSSON
) annat ()
ring: be "HighScore #:"! hiAvailable!
)
ECHO! nyckel!
om /i! nyckel! EQU P (ange "src =! gameLog!") annars ange "src = % hiFile %! nyckel!. txt"
ring: getString "spara filnamn:" fil 20
Kopiera "! src!" "! filen!. Snake.txt"
ring: be "Tryck en tangent för att fortsätta..."
)
om /i! nyckel! EQU L)
ring: getString "Load Filnamn:" fil 20
om det finns "! filen!. () Snake.txt"
Ange "replay =! filen!. Snake.txt"
gå till: initiera
)
ECHO fel: filen "! filen!. Snake.txt"hittades inte
ring: be "Tryck en tangent för att fortsätta..."
)
om /i! nyckel! EQU R)
Ange "replay =! gameLog!"
gå till: initiera
)
om! nyckel! GEQ 1 om! nyckel! () LEQ 6
Ange "replay = % hiFile %! nyckel!. txt"
gå till: initiera
)
om /i! nyckel! EQU C samtal: controlOptions
om /i! nyckel! EQU G samtal: graphicOptions
gå till: huvudmeny
::-------------------------------------
: controlOptions
CLS
Ange "nycklar = (Enter) T L R P"
om! moveKeys! EQU 4 set "nycklar =! nycklar! U D"
ECHO kontrollalternativ:
ECHO)
ECHO T - typ... =! moveKeys! nycklar
ECHO)
ECHO L - vänster... =! vänster!
ECHO R - rätt... =! rätt!
om! moveKeys! EQU 4 echo U - upp... =! upp!
om! moveKeys! EQU 4 echo D - ner... =! ner!
ECHO)
ECHO P - paus... =! paus!
ECHO)
ECHO (Enter) - återgå till Huvudmeny
ECHO)
ring: be ">"! nycklar!
om! nyckel! EQU (Enter) gå till: saveUserPrefs
om /i! nyckel! EQU T)
om! moveKeys! EQU 2 (ange "moveKeys = 4") annars ange "moveKeys = 2"
gå till: controlOptions
)
Ange "alternativet = LLeft RRight UUp DDown PPause"
för f % % i ("! alternativ: * % nyckel % =!") göra ()
ring: be "trycker på en knapp för %% O:"
för % % i (0 1 2) göra om "! nyckel!"equ"! ogiltig: ~ %% K, 1!" goto: controlOptions
för % % i (! övre!) ställer in "nyckel =! nyckel: %% C = %% C!"
Ange "%% O =! nyckel!"
)
gå till: controlOptions
::-------------------------------------
: graphicOptions
CLS
ECHO grafik alternativ:
ECHO)
ECHO B - gränsen... =! bunden!
ECHO E - tomt utrymme. =! utrymme!
ECHO H - orm huvud... =! huvud!
ECHO: S - orm kropp... =! kroppen!
ECHO F - mat... =! mat!
ECHO D - död... =! död!
ECHO)
ECHO G - tillväxt. =! tillväxt!
ECHO)
ECHO (Enter) - Rturn till Huvudmeny
ECHO)
ring: be ">" B E H S F D G (Enter)
om! nyckel! EQU (Enter) gå till: saveUserPrefs
om /i! nyckel! EQU G)
ring: be "Tryck på en siffra för tillväxten (0 = 10)" 0 1 2 3 4 5 6 7 8 9
om! nyckel! EQU 0 uppsättning "nyckel = 10"
Ange "tillväxt =! nyckel!"
ring: loadHighScores
) annat ()
Ange "alternativet =-BBorder:bound:-EEmpty utrymme: utrymme:-HSnake huvud: huvudet:-SSnake kroppen: kroppen:-FFood:food:-DDeath:death:"
för f "tokens = 1, 2 delims =:" % % i ("! alternativ: *-% nyckel % =!") göra)
ring: be "trycker på en knapp för %% A"
för % % i (0 1 2) göra om "! nyckel!"equ"! ogiltig: ~ %% K, 1!" goto: graphicOptions
Ange "%% B =! nyckel!"
)
)
gå till: graphicOptions
::------------------------------------
: saveUserPrefs
(för % % i (moveKeys upp ner vänster höger utrymme bundna mat huvudet kropp död paus tillväxt) echo %% V =! %% V!) > "% userPref %"
Exit /b
::-------------------------------------
: initiera
CLS
om definierat replay)
ECHO Replay hastighet alternativ:
) annat ()
ECHO hastighet alternativ:
)
ECHO dröjsmål
ECHO # beskrivning (sekunder)
echo --- ----------- ---------
för/l % % gör () i (1 1 6)
Ange "delay = 0! dröjsmål %% N!"
Ange "desc =! desc %% N!"
ECHO % % desc: ~ 0, 11! 0.! dröjsmål: ~ -2!
)
ECHO)
ring: be "plocka en hastighet (1-6):" 1 2 3 4 5 6
Ange "svårt =! desc % nyckel %!"
Ange "delay =! dröjsmål % nyckel %!"
Ange "diffCode = % nyckel %"
ECHO % nyckel % - % svårighet %
ECHO)
Ange "axel = X"
Ange "xDiff = + 1"
Ange "yDiff = + 0"
Ange "Tom ="
Ange/a "PX = 1, PY = höjd/2, FX = bredd / 2 + 1, FY = PY, poäng = 0, emptyCnt = 0, = t1-1000000"
Ange "gameStart ="
Ange "m = 00"
Ange "s = 00"
Ange "snakeX = % PX %"
Ange "snakeY = PY %"
Ange "snakeX = % snakeX: ~ -2%"
Ange "snakeY = % snakeY: ~ -2%"
för/l % % gör () i (0 1% höjd %)
Ange "linje %% Y ="
för/l % % (0,1, % bredd %) göra ()
Ange "cellen ="
om % % 0 uppsättning "cellen = % bundna %"
om % % % höjd % uppsättning "cellen = % bundna %"
om % % 0 uppsättning "cellen = % bundna %"
om % % % bredd % uppsättning "cellen = % bundna %"
om % % % PX om % % % PY % uppsättning "cellen = % huvudet %"
om inte definieras cellen)
Ange "cellen = % utrymme %"
Ange "eX = %% X"
Ange "eY = %% Y"
Ange "Tom =! tomma! #! eX: ~ -2!! eY: ~ -2!"
Ange/a emptyCnt += 1
)
om % % procent FX om % % % FY % uppsättning "cellen = % mat"
Ange "linje %% Y =! linje %% Y! cell!"
)
)
för % % i (! configOptions!) ställer in "%% AOM =! %% A!"
Ange "replayFinished ="
om definierat replay)
% sendCmd % replay
% sendCmd %! repris!
ring: waitForSignal
Ange "replay = (repris på! svårt!)"
Ange "läsa = 1"
< & 9 ()
för/l % i (1 1! configOptionCnt!) göra om definieras () Läs
ställa in /p "ln ="
om "! ln!" equ "Slutet" (ange Läs =) annars ange "! ln!"
)
)
Ange "nycklar ="
Ange "Hej = 0"
för f "delims =:" % % i ("findstr" ^:: "" % hiFile %! diffCode!. txt"2 ^ > nul") ställer in "Hej = %% A"
(% draw %)
ring: fördröja 100
) annat ()
om definierat Hej % diffCode % (ange "Hej =! Hej % diffCode %!") annars ange "Hej = 0"
(% draw %)
> "! gameLog!" (
för % % i (! configOptions!) göra (echo %% A =! %% A!)
(echo slut)
)
ECHO)
om! moveKeys! () EQU 4
eko kontroller:! upp! = upp! ner! = ner! vänster! = vänster! rätt! = höger! pausa! = paus
) annat ()
eko kontroller:! vänster! = vänster! rätt! = höger! pausa! = paus
)
ECHO Undvik kör in i dig själv (! kroppen! kroppen! huvudet! ^) eller vägg (! bunden! ^)
eko äta mat (! mat! ^) att växa.
ECHO)
ring: be "Tryck en tangent för att starta..."
% sendCmd % gå
)
Ange "pauseTime = 0"
Ange "xDiff! upp! = + 0"
Ange "xDiff! ner! = + 0"
Ange "xDiff! vänster! =-1"
Ange "xDiff! rätt! = + 1"
Ange "yDiff! upp! =-1"
Ange "yDiff! ner! = + 1"
Ange "yDiff! vänster! = + 0"
Ange "yDiff! rätt! = + 0"
Ange "! upp! Axel = Y "
Ange "! ner! Axel = Y "
Ange "! vänster! Axel = X "
Ange "! rätt! Axel = X "
Ange "xTurn! vänster! = 1"
Ange "xTurn! rätt! =-1"
Ange "yTurn! vänster! =-1"
Ange "yTurn! rätt! = 1"
Ange "playerSpace =! utrymme! mat!"
ställa in ^ "nycklar ="! vänster! " "! rätt!" "! pausa!" ^"
Ange "newHi ="
Ange "växa = 0"
om! moveKeys! EQU 4 set ^ "nycklar =! nycklar! "! upp!" "! ner!" ^"
CLS
Exit /b
::-------------------------------------
: waitForSignal
om det inte finns "% signal %" goto: waitForSignal
del "% signal %"
Exit /b
::-------------------------------------
: loadHighScores
Ange "saveAvailable ="
för/l % % gör () i (1 1 6)
Ange "Hej %% N ="
för f "delims =:" % % i ("findstr" ^:: "" % hiFile%%%N.txt "2 ^ > nul") göra ()
Ange "Hej %% N = %% A"
Ange "saveAvailable = S"
)
)
Exit /b
::-------------------------------------
: fixLogs
SETLOCAL enableDelayedExpansion
för % % i (* .snake) göra ()
ren "%% F" "%% F.txt"
ring: fixLog "%% F.txt"
)
pushd "% SaveLoc %"
för f "delims =" % % i (' dir /b SnakeHi*.txt 2 ^ > nul ") göra ()
Ange "filen = %% ~ nF"
Ange "file = Snake1Hi! file:~-1!. txt"
ren "%% F" "! filen!"
ring: fixLog "! filen!"
)
POPD
Exit /b
: fixLog filePath
> "% ~ 1.new" ()
< "% ~ 1" ()
för % % gör () i (diffCode svårighet moveKeys upp ner vänster höger)
ställa in /p "val ="
(echo %% A =! val!)
)
)
(upprepa tillväxt = 1)
(echo slut)
mer + 7 "% ~ 1"
)
flytta/y "% ~ 1.new" "% ~ 1" > nul
Exit /b
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: controller
:: Upptäcker tangenttryckningar och skickar informationen till spelet via en nyckel arkivera.
:: Registeransvarige har olika transportsätt input som aktiveras av kommandon som skickas
:: från spelet via en cmd-fil.
::
:: Lägen:
::
:: håll - ingen input, vänta på kommando
::
:: gå - kontinuerligt få/skicka knapptryckningar
::
:: prompt - skicka {renade} markör att tillåta spelet att Rensa indatabufferten, sedan
:: get/skicka en enda knapptryckning och håll
::
:: en - Get/skicka en enda nyckel intryckt
::
:: replay - kopiera en spelet logg till nyckelfilen. Nästa rad i cmd-fil
:: anger namnet på loggfilen att kopiera. Under replay, registeransvarige
:: skickar en abortera signal till spelet om trycker på en knapp.
::
:: avsluta - omedelbart avsluta controller processen
::
:: Som skrivit, denna rutin rapporteras felaktigt! som), men det spelar ingen roll
:: eftersom vi inte behöver nyckeln. Både och Enter-tangenten redovisas (Enter).
:: Ett extra tecken läggs till produktionen att bevara någon kontroll tecken
:: när den läses av Ställ /P.
SETLOCAL enableDelayedExpansion
för f % % i (' kopiera /Z "% ~ dpf0" nul ") ställer in" CR = %% en "
Ange "cmd = håll"
Ange "inCmd ="
Ange "nyckel ="
för/l %%. gör i ())
om "! cmd!" neq "hold" ()
för f "delims =" % % i ("xcopy /w" % ~ f0 "" % ~ f0 "2 ^ > nul") göra ()
om inte definierat nyckeluppsättning "nyckel = %% A"
)
Ange "nyckel =! nyckel: ~ -1!"
om! nyckel! EQU! CR! Ange "nyckel = (Enter)"
)
< & 8 ange /p "inCmd ="
om definierat () inCmd
om! inCmd! EQU sluta exit
Ange "cmd =! inCmd!"
om! inCmd! EQU replay)
< & 8 ange /p "filen ="
typ "! filen!" > & 9
Kopiera nul "% signal %"
)
Ange "inCmd ="
)
om definierat nyckel)
om "! cmd!" equ "snabb" (echo {renade}.)
om "! cmd!" equ "replay" ()
Kopiera nul "% signal %" > nul
(echo {renade}.)
Ange "cmd = gå"
) annat (echo(!key!.)
om "! cmd!" neq "gå" set "cmd = håll"
Ange "nyckel ="
) > & 9
)