Stap 2: Vervolgens kopieert en plakt u deze Code op de Kladblok
als "% ~ 1' =="startGame"goto: spel
als "% ~ 1' =="startController"goto: controller
::---------------------------------------------------------------------
:: enkele globale variabelen gebruikt door zowel het spel als de controller instellen
setlocal-disableDelayedExpansion
: getSession
als temp (set "tempFileBase=%temp%\") anders gedefinieerd als gedefinieerd instellen tmp "tempFileBase=%tmp%\"
instellen "tempFileBase = % tempFileBase % Snake % tijd:: = _ %"
instellen van de "keyFile=%tempFileBase%_key.txt"
instellen van de "cmdFile=%tempFileBase%_cmd.txt"
instellen van de "gameLock=%tempFileBase%_gameLock.txt"
instellen van de "gameLog=%tempFileBase%_gameLog.txt"
instellen van de "signal=%tempFileBase%_signal.txt"
instellen van de "saveLoc=%userprofile%\Snake"
instellen van de "userPref=%saveLoc%\SnakeUserPref.txt"
instellen "hiFile=%saveLoc%\Snake!growth! Hi"
::------------------------------------------
:: Deze spelsessie en lancering vergrendelen.
:: Loop terug en probeer een nieuwe sessie als mislukking.
:: Opruimen en afsluiten wanneer u klaar bent
Bel: 7 starten > "% gameLock %" || Ga naar: getSession
del "% tempFileBase % *"
Exit/b
::------------------------------------------
: start het spel en de controller
Bel: fixLogs
kopiëren van nul "keyFile %" > nul
kopiëren van nul "% cmdFile %" > nul
Start "" /b cmd /c ^ "" % ~ f0 "startController 9 ^ > ^ >"keyFile %"8 ^ <"% cmdFile %"2 ^ > nul ^ > nul ^"
cmd /c ^ "" % ~ f0 "startGame 9 ^ <"keyFile %"8 ^ > ^ >"% cmdFile %"^ echo ()
::--------------------------------------------------------------
:: Op afrit, wachten voor de controller te sluiten voordat hij terugkeert
: sluiten
2 > nul (>> "keyFile %" oproep) || goto: sluiten
zoniet bestaat "% ~ dp0CursorPos.exe" ()
de spelen van het spel van ECHO kan worden verbeterd door het installeren van
ECHO Aacini de CursorPos.exe, beschikbaar op
ECHO http://goo.gl/hr6Kkn
ECHO)
ECHO % cmdcmdline % |find /i "% ~ f0" > nul & & onderbreken
)
Exit/b 0
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: spel
title % ~ nx0
CLS
::---------------------------------------
:: Speelveld grootte
:: max speelveld: (width-2)*(height-2) < = 1365
instellen "breedte = 40" max = 99
instellen "hoogte = 25" max = 99
::----------------------------
:: resize het consolevenster
set /a cols = breedte + 1, lijnen = hoogte + 10, area=(width-2)*(height-2)
als % gebied % gtr 1365 ()
ECHO fout: speelveld gebied te groot
% sendCmd % stoppen
uitgang
)
Als % % lss 14 set lijnen lijnen = 14
Als % cols % lss 46 instellen cols = 46
mode con: cols = % cols % regels = regels %
::----------------------------
:: variabelen definiëren
instellen "configOptions = diffCode moeite groei moveKeys up neer links rechts"
Stel ' configOptionCnt = 9"
Stel ' moveKeys = 4"
instellen "omhoog = W"
instellen "omlaag = S"
instellen "links = A"
instellen "rechts = D"
instellen "onderbreken = P"
instellen "ruimte ="
instellen "gebonden = #"
instellen "voedsel = +"
instellen "hoofd =
instellen "lichaam = O"
instellen "dood = X"
instellen "groei = 1'
Als bestaan "% userPref %" for/f "usebackq delims =" % in ("% userPref %") Stel "%% V"
Stel ' spinner1 =-"
Stel ' spinner2 = \ "
Stel ' spinner3 = | "
Stel ' spinner4 = / "
instellen "spinner = spinner1 spinner2 spinner3 spinner4"
Stel ' delay1 = 20"
Stel ' delay2 = 15-inch
Stel ' delay3 = 10"
Stel ' delay4 = 7"
Stel ' delay5 = 5"
Stel ' delay6 = 3"
instellen "desc1 = Sluggard"
Stel ' desc2 = Crawl "
Stel ' desc3 = Slow "
Stel ' desc4 = Normal "
Stel ' desc5 = Fast "
Stel ' desc6 = Insane "
Stel ' spinnerDelay = 3"
/a "breedte-= 1, hoogte-= 1" instellen
:: LF definiëren als een teken voor regelinvoer (nieuwe regel)
Stel ^ "LF = ^
↑ "boven lege regel is verplicht - niet verwijderen
:: CR definiëren als een Carriage Return-teken
for /f % in (' /Z Kopieer "% ~ dpf0" nul ") Stel" CR = %% A "
:: BS definiëren als een teken van de BackSpace
for /f % in (' "prompt $H & voor % in (1) Ken rem" ') Stel "BS = %% A"
instellen "bovenste = 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"
instellen "ongeldige = * ~ ="
::---------------------------
:: definiëren van macro's
Als bestaan "% ~ dp0CursorPos.exe" ()
instellen "cls = CursorPos 0 0"
instellen "ClearLine = echo (& CursorPos 0 -1"
instellen "ClearPrev = CursorPos 0 - 0 & echo ("
) anders ()
instellen "cls cls ="
instellen "ClearLine ="
instellen "ClearPrev ="
)
:: definiëren een newline met voortzetting van de lijn
Stel ^ "\n=^^^%LF%%LF%^%LF%%LF%^^"
:: setErr
::: Wordt de waarde voor ERRORLEVEL ingesteld op 1
instellen van de "setErr=(call)"
:: clrErr
::: De waarde voor ERRORLEVEL ingesteld op 0
Stel ' clrErr = (call) "
:: sendCmd opdracht
::: een opdracht stuurt naar de controller
instellen "sendCmd = > & 8 echo"
:: getKey [ValidKey] [ValidKey...]
::: Controleren voor ToetsIndrukken (KeyPress) van de controller. Accepteren alleen een ValidKey.
::: Token scheidingstekens en poison tekens moeten worden genoteerd.
::: Accepteren een willekeurige toets als er geen ValidKey opgegeven.
::: Resultaat in sleutel variabele. Sleutel is niet gedefinieerd als geen geldig ToetsIndrukken (KeyPress).
set getKey=%\n%
voor %% # in (1-2) doen als %% # 2 (%\n% ==
set key=%\n%
set inKey=%\n%
set keyTest=%\n%
↑ < ^ & 9 instellen /p "inKey="%\n%
als gedefinieerd inKey (%\n%
set inKey=!inKey:~0,-1!%\ n %
voor % in (! args!) Stel /a keyTest = 1 ^ & als /i! inKey! EQU %% ~ C instellen key=!inKey!%\ n %
)%\n%
zoniet gedefinieerde keyTest instellen key=!inKey!%\ n %
) anders instellen args =
:: trekken
::: vestigt de Raad van bestuur
set draw=%\n%
set screen=%\n%
voor/l % in (0,1, % hoogte %) Stel scherm =! scherm!! lijn %% Y!! LF!%\ n %
instellen scherm =! scherm! Snelheid =! Moeilijkheid!! replay!! LF! Groeitempo op jaarbasis =! groei! HighScore =! Hallo! LF! Score =! score! Tijd =! m!:!s!%\ n %
Als replay gedefinieerd als niet gedefinieerd replayFinished (%\n%
instellen scherm =! scherm!! LF! LF! Druk op een toets om af te breken de replay%\n%
)%\n%
cls % ^ & echo(!screen!
:: test X Y ValueListVar
::: proeven als waarde op coördinaten X, Y binnen de inhoud van ValueListVar is
set test=%\n%
voor %% # in (1-2) doen als %% # 2 == (voor/f "tokens = 1-3" % in ("! args!") (%\n% doen
voor % in ("! lijn %% 2: ~ %% 1,1!") als "! %% 3: %% ~ A =!"neq"! %% 3!" % clrErr % anders %setErr%%\n%
)) anders instellen args =
:: plot X Y ValueVar
::: plaatst inhoud van ValueVar op de coördinaten X, Y
set plot=%\n%
voor %% # in (1-2) doen als %% # 2 == (voor/f "tokens = 1-3" % in ("! args!") (%\n% doen
"part2=!line%%2:~%%1!"%\ instellen n %
instellen "lijn %% 2 =! lijn %% 2: ~ 0, %% 1!! %%3!! Part2:~1!"%\ n %
)) anders instellen args =
::--------------------------------------
:: start het spel
setlocal-enableDelayedExpansion
Als dat niet het bestaan van "% saveLoc%\" md "% saveLoc %"
instellen "replay = Aborting... "
instellen "replayAvailable ="
Bel: loadHighScores
Bel: hoofdmenu
::--------------------------------------
:: hoofdlus (oneindige lus)
voor/l %%. Voer in ())
% === controleren en proces afbreken signaal als in de replay modus === %
Als replay gedefinieerd als "signaal %" (bestaan
del "signaal %"
Stel ' replayFinished = 1'
loting %
ECHO)
ClearLine %
Bel: purge
voor % in (! configOptions!) Stel "%% A =! %% Ergeen!"
Bel: hoofdmenu
)
% === berekenen tijd sinds laatste zet === %
for /f "tokens = 1-4-delims =:.," % in ("! tijd: = 0!") Stel /a "t2 = (((1 %% een * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100, tDiff = t2-t1"
Als! tDiff! LSS 0 set /a tDiff += 24 * 60 * 60 * 100
Als! tDiff! GEQ! vertraging! (
% === vertraging is verlopen, dus tijd voor beweging === %
set /a t1 t2 =
% === berekenen speltijd === %
Als niet gedefinieerd gameStart reeks "gameStart =! t2!"
set /a "gameTime=(t2-gameStart)"
als! kort! LSS 0 set /a "kort += 24 * 60 * 60 * 100"
/a instellen "kort =(gameTime-pauseTime)/100, m = kort/60, s = kort %% 60"
Als! m! LSS 10 set "m = 0! m!"
als! s! LSS 10 set "s = 0! s!"
% === krijgen ToetsIndrukken (KeyPress) === %
getKey %! sleutels!
als /i! toets! EQU! onderbreken! (
% === Pauzeer spel === %
ECHO)
Bel: vragen "Onderbroken - druk op een toets om door te gaan..."
% ClearPrev %
% sendCmd % gaan
for /f "tokens = 1-4-delims =:.," % in ("! tijd: = 0!") Stel /a "t2 = (((1 %% een * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100, tDiff = t2-t1"
Als! tDiff! LSS 0 set /a tDiff += 24 * 60 * 60 * 100
set /a pauseTime += tDiff
) anders ()
% === stellen richting === %
Als niet gedefinieerd replay (echo(!key!.) >> "! gameLog!"
voor % in (! sleutel!) doen als! moveKeys! EQU 2)
/a instellen "xDiff = xTurn %% K *! yDiff!, yDiff = yTurn %% K *! xDiff!"
) anders als "! %% KAxis!"neq"! as!" (
/a instellen "xDiff = xDiff %% K, yDiff = yDiff %% K"
instellen "as =! %% KAxis!"
)
% === wissen de staart === %
instellen "TX =! snakeX: ~ -2!"
instellen "TY =! snakeY: ~ -2!"
Stel ' snakeX =! snakeX: ~ 0, -2! "
instellen "snakeY =! snakeY: ~ 0, -2!"
perceel %! TX!! TY! ruimte
% === hoofd nieuwbouw berekenen en probeert te gaan === %
/a instellen "X = PX + xDiff, Y = PY + yDiff"
instellen "X =! X!"
instellen "Y =! Y!"
instellen "X =! X: ~ -2! "
instellen "Y =! Y: ~ -2! "
(% van de test! X!! Y! playerSpace) & & ()
% === Zet succesvolle === %
% === de nieuwe hoofd locatie verwijderen uit de lege lijst === %
voor % in ("! X!") doen voor % in ("! Y!") Stel "leeg =! leeg: #%% ~ X %% ~ Y =!"
% === eten geen voedsel die aanwezig kan zijn === %
(% van de test! X!! Y! voedsel) & & ()
% === initiëren groei === %
set /a groeien += groei
% === Zoek en tekenen van de nieuwe voedsel === %
Als replay (gedefinieerd
< & 9 instellen /p "F ="
) anders ()
/a instellen "F = (! willekeurige! %%(emptyCnt-1)) * 6 + 1"
(echo! F!) >> "! gameLog!"
)
voor % in (! F!) doen (perceel %! leeg: ~ %% F, 5! voedsel)
)
Als! groeien! GTR 0)
% === herstellen de staart === %
perceel %! TX!! TY! lichaam
Stel ' snakeX =! snakeX! TX!"
instellen "snakeY =! snakeY! TY!"
set /a emptyCnt-= 1
% === beheren score === %
set /a "score += 1, groeien-= 1"
Als geen replay gedefinieerd als! score! GTR! Hallo! /a instellen "Hallo += 1, newHi = 1'
) anders ()
% === betreffendedepositie van de voormalige staart toevoegen aan het lege lijst === %
instellen "leeg =! leeg! #! TX!! TY!"
)
% === tekent het nieuwe hoofd === %
als gedefinieerd snakeX (perceel %! PX!! PY! lichaam)
perceel %! X!! Y! hoofd
% === Toevoegen van de nieuwe hoofd positie aan de slang snaren === %
Stel ' snakeX =! X!! snakeX!"
instellen "snakeY =! Y!! snakeY!"
instellen "PX =! X!"
instellen "PY =! Y!"
loting %
) || (
% === mislukte move - spel over === %
Stel ' replayFinished = 1'
perceel %! TX!! TY! lichaam
Bel: spinner! PX!! PY! dood
loting %
Als newHi (gedefinieerd
ECHO)
ECHO nieuwe hoge Score - Gefeliciteerd ^ ^!
instellen "Hallo! diffCode! =! score!"
kopie "! gameLog!" "% hiFile! diffCode!. txt"> nul
>> "% hiFile! diffCode!. txt"echo::! score!
)
ECHO)
ClearLine %
Bel: vragen "Druk op een toets om door te gaan..."
voor % in (! configOptions!) Stel "%% A =! %% Ergeen!"
Bel: hoofdmenu
)
)
)
)
::-------------------------------------
: getString Prompt Var MaxLen
:: Prompt naar een string met max lengh van MaxLen.
:: De geldige sleutels en waarden zijn alpha-numeriek, ruimte, onderstrepingsteken en dash
:: Tekenreeks wordt afgesloten door een Enter
:: Backspace werkt om vorige teken te verwijderen
:: Resultaat wordt geretourneerd in de Var
/a instellen "maxLen = %3"
instellen "%2 ="
% sendCmd % prompt
Bel: purge
: getStringLoop
(getKey %! bovenste! 0 1 2 3 4 5 6 7 8 9 "" _ - {Enter}! BS!)
Als belangrijkste (gedefinieerd
Als! toets! EQU {Enter})
ECHO)
Exit/b
)
Als! toets! neq! BS! Als! maxLen! GTR 0)
set /a maxLen-= 1
instellen "%2 =! %2!! sleutel!
)
Als! toets! EQU! BS! Als %2 (gedefinieerd
/a maxLen += 1 instellen
instellen "%2 =! %2: ~ 0, -1!"
)
)
als gedefinieerd inKey % sendCmd % een
Ga naar: getStringLoop
::-------------------------------------
: vraag Prompt ValidKey [Validkey]...
:: Prompt voor een ToetsIndrukken (KeyPress).
:: Wacht totdat een ValidKey wordt ingedrukt en resultaat in sleutel variabele.
:: Scheidingstekens, token), en GIF tekens moeten worden vermeld.
% sendCmd % prompt
(set validKeys = % *)
(stel validKeys =! validKeys:% 1 =!)
Bel: purge
: getResponse
(getKey %! validKeys!)
Als belangrijkste (niet is gedefinieerd
als gedefinieerd inKey % sendCmd % een
goto: getResponse
)
Exit/b
: wissen
instellen "inKey ="
voor/l % in (1-1-1000) doen ()
instellen van /p "inKey ="
als "! inKey!" equ "{gereinigd}." afsluiten/b
) < & 9
goto: purge
::-------------------------------------
: spinner X Y ValueVar
set /a d1 =-1000000
voor/l % in (1-1-5) doen voor % in (% spinner %) doen ()
Bel: spinnerDelay
% perceel %%2%
loting %
)
Bel: spinnerDelay
(% perceel %%2% 3)
Exit/b
::-------------------------------------
: vertraging centiSeconds
setlocal
for /f "tokens = 1-4-delims =:.," % in ("! tijd: = 0!") Stel /a "spinnerDelay = %1, d1 = (((1 %% een * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100"
:: vallen door naar: spinnerDelay
::-------------------------------------
: spinnerDelay
for /f "tokens = 1-4-delims =:.," % in ("! tijd: = 0!") Stel /a "d2 = (((1 %% een * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100, dDiff = d2-d1"
Als % dDiff % lss 0 ingesteld /a dDiff += 24 * 60 * 60 * 100
Als % dDiff % lss % spinnerDelay % goto: spinnerDelay
set /a d1 = d2
Exit/b
::-------------------------------------
: hoofdmenu
CLS
instellen "loadAvailable ="
ECHO groeitempo op jaarbasis =! groei!
ECHO)
ECHO Main Menu:
ECHO)
ECHO N - nieuw spel
als gedefinieerd replayAvailable echo R - Replay vorige wedstrijd
als gedefinieerd saveAvailable echo S - sparen een spel
Als bestaan *. snake.txt echo L - Load en horloge een opgeslagen spel & instellen "loadAvailable = L"
ECHO C - beheeropties
ECHO G - grafische opties
ECHO Q - Quit
ECHO)
instellen "hiAvailable ="
voor/l % in (1-1-6) doen als gedefinieerd Hallo %% () N
Als niet gedefinieerd () hiAvailable
ECHO Replay hoge Score:
ECHO)
)
instellen "desc =! desc %% N!..."
Stel ' hiAvailable =! hiAvailable! %% N "
ECHO %! desc: ~ 0, 8!! Hallo %% N!
)
als gedefinieerd (echo) hiAvailable
instellen "sleutels = N C G Q! hiAvailable!! replayAvailable!! saveAvailable!! loadAvailable!"
Bel: vragen ">"! sleutels!
als /i! toets! EQU Q)
% sendCmd % stoppen
CLS
uitgang
)
als /i! toets! EQU N)
instellen "replay ="
Stel ' replayAvailable = R "
Stel ' saveAvailable = S "
goto: initialiseren
)
als /i! toets! EQU S)
Als replayAvailable (gedefinieerd
Bel: vragen "HighScore # of P voor de vorige:"! hiAvailable! P
) anders ()
Bel: vragen "HighScore #:"! hiAvailable!
)
ECHO! toets!
als /i! toets! EQU P (instellen "src =! gameLog!") anders "src = % hiFile %! sleutel!. txt"
Bel: getString "opslaan de bestandsnaam:" bestand 20
kopie "! src!" "! bestand!. Snake.txt"
Bel: vragen "Druk op een toets om door te gaan..."
)
als /i! toets! EQU L)
Bel: getString "Load bestandsnaam:" bestand 20
Als bestaan "! bestand!. Snake.txt")
instellen "replay =! bestand!. Snake.txt"
goto: initialiseren
)
ECHO fout: bestand "! bestand!. Snake.txt"niet gevonden
Bel: vragen "Druk op een toets om door te gaan..."
)
als /i! toets! EQU R)
instellen "replay =! gameLog!"
goto: initialiseren
)
Als! toets! GEQ 1 indien! toets! Leq 6)
instellen "replay = % hiFile %! sleutel!. txt"
goto: initialiseren
)
als /i! toets! EQU C oproep: controlOptions
als /i! toets! EQU G oproep: graphicOptions
Ga naar: hoofdmenu
::-------------------------------------
: controlOptions
CLS
instellen "sleutels = {Enter} T L R P"
Als! moveKeys! EQU 4 set "sleutels =! sleutels! U 'D'
echo controle opties:
ECHO)
echo van T - Type... =! moveKeys! toetsen
ECHO)
ECHO... links L - =! links!
ECHO R - recht... =! juiste!
Als! moveKeys! EQU 4 echo U - Up... =! omhoog!
Als! moveKeys! EQU 4 echo D - Down... =! neer!
ECHO)
ECHO P - pauze... =! onderbreken!
ECHO)
ECHO {Enter} - terugkeren naar het hoofdmenu
ECHO)
Bel: vragen ">"! sleutels!
Als! toets! EQU {Enter} goto: saveUserPrefs
als /i! toets! EQU T)
Als! moveKeys! EQU 2 (instellen "moveKeys = 4") anders "moveKeys = 2"
Ga naar: controlOptions
)
instellen "optie = LLeft RRight UUp DDown PPause"
for /f % in ("! optie: * belangrijke % =!") doen ()
Bel: vragen "druk op een toets voor %% O:"
voor % in (0 1 2) doen als "! sleutel!"equ"! ongeldig: ~ %% K, 1!" goto: controlOptions
voor % in (! bovenste!) Stel "sleutel =! sleutel: %% C = %% C!"
instellen "%% O =! sleutel!"
)
Ga naar: controlOptions
::-------------------------------------
: graphicOptions
CLS
ECHO grafische opties:
ECHO)
ECHO B - grens... =! gebonden!
ECHO E - lege ruimte. =! ruimte!
echo van H - slang hoofd... =! hoofd!
ECHO S - Snake lichaam... =! lichaam!
ECHO F - Food... =! voedsel!
ECHO D - dood... =! dood!
ECHO)
ECHO G - groeitempo op jaarbasis. =! groei!
ECHO)
ECHO {Enter} - Rturn naar het hoofdmenu
ECHO)
Bel: vragen ">" B E H S F D G {Enter}
Als! toets! EQU {Enter} goto: saveUserPrefs
als /i! toets! EQU G)
Bel: vragen 'Druk op een cijfer voor groei (0 = 10)' 0 1 2 3 4 5 6 7 8 9
Als! toets! EQU 0 set "sleutel = 10"
instellen "groei =! sleutel!"
Bel: loadHighScores
) anders ()
instellen "optie =-BBorder:bound:-EEmpty ruimte: ruimte:-HSnake kop: kop:-SSnake Body: body:-FFood:food:-DDeath:death:"
for /f "tokens = 1, 2 delims =:" % in ("! optie: *-sleutel % =!") doen)
Bel: vragen "druk op een toets voor %% A"
voor % in (0 1 2) doen als "! sleutel!"equ"! ongeldig: ~ %% K, 1!" goto: graphicOptions
instellen "%% B =! sleutel!"
)
)
Ga naar: graphicOptions
::------------------------------------
: saveUserPrefs
(voor % in (moveKeys op neer links rechts ruimte gebonden voedsel hoofd lichaam dood pauze groei) echo %% V =! %% V!) > "% userPref %"
Exit/b
::-------------------------------------
: initialiseren
CLS
Als replay (gedefinieerd
ECHO Replay snelheid opties:
) anders ()
ECHO snelheid opties:
)
ECHO, vertraging
ECHO # beschrijving (seconden)
echo --- ----------- ---------
voor/l % in (1-1-6) doen ()
instellen "vertraging = 0! vertraging %% N!"
instellen "desc =! desc %% N!"
ECHO % desc: ~ 0, 11! 0.! vertraging: ~ -2!
)
ECHO)
Bel: vragen "Kies een snelheid (1-6):" 1 2 3 4 5 6
instellen "moeilijkheidsgraad =! desc belangrijke %!"
instellen "vertraging =! vertraging belangrijke %!"
Stel ' diffCode = belangrijkste % "
ECHO belangrijke % - moeilijkheid %
ECHO)
instellen "as = X"
Stel ' xDiff = + 1 "
Stel ' yDiff = + 0"
instellen "leeg ="
/a instellen "PX = 1, PY = hoogte/2, FX = breedte / 2 + 1, FY = PY, score = 0, emptyCnt = 0, t1 =-1000000"
instellen "gameStart ="
instellen "m = 00"
instellen "s = 00"
instellen "snakeX = % PX"
instellen "snakeY PY % ="
instellen "snakeX = % snakeX: ~ -2%"
instellen "snakeY = % snakeY: ~ -2%"
voor/l % in (0 1% hoogte %) doen ()
instellen "lijn %% Y ="
voor/l % in (0,1, % breedte %) doen ()
instellen "cel ="
als % 0 set "cel afhankelijke % ="
als % % hoogte % set "cel afhankelijke % ="
als % 0 set "cel afhankelijke % ="
als % % breedte % set "cel afhankelijke % ="
Als % procent PX als % % PY % set "cel = hoofd %"
Als cel (niet is gedefinieerd
instellen "cel = % van de ruimte"
instellen "eX = %% X"
instellen "eY = %% Y"
instellen "leeg =! leeg! #! eX: ~ -2!! eY: ~ -2!"
/a emptyCnt += 1 instellen
)
Als % procent FX als % % FY % set "cel = voedsel %"
instellen "lijn %% Y =! lijn %% Y!! cel!"
)
)
voor % in (! configOptions!) Stel "%% Ergeen =! %% A!"
instellen "replayFinished ="
Als replay (gedefinieerd
% sendCmd % replay
% sendCmd %! replay!
Bel: waitForSignal
instellen "replay = (REPLAY op! moeite!)"
instellen "lezen = 1'
< & 9 ()
voor/l % in (1-1! configOptionCnt!) doen als gedefinieerd Lees ()
instellen van /p "ln ="
als "! ln!" equ "END" (Lees instellen =) anders "! ln!"
)
)
instellen "sleutels ="
instellen "Hallo = 0"
for /f "delims =:" % in (' findstr "^::" "% hiFile! diffCode!. txt"2 ^ > nul') Stel" Hallo = %% A "
(loting %)
Bel: vertraging van 100
) anders ()
als gedefinieerd Hallo % diffCode % (instellen "Hallo =! Hallo % diffCode %!") anders instellen "Hallo = 0"
(loting %)
> "! gameLog!" (
voor % in (! configOptions!) doen (echo %% A =! %% A!)
(echo einde)
)
ECHO)
Als! moveKeys! EQU 4)
ECHO besturingselementen:! omhoog! = up! neer! = omlaag! linker! = left! juiste! = rechts! onderbreken! = pauze
) anders ()
ECHO besturingselementen:! linker! = left! juiste! = rechts! onderbreken! = pauze
)
ECHO vermijden jezelf tegenkomen (! lichaam!! lichaam!! hoofd! ^) of de muur (! gebonden! ^)
Eet voedsel echo (! voedsel! ^) om te groeien.
ECHO)
Bel: vragen "Druk op een toets om te beginnen..."
% sendCmd % gaan
)
Stel ' pauseTime = 0'
instellen "xDiff! omhoog! = + 0"
instellen "xDiff! neer! = + 0"
instellen "xDiff! linker! =-1"
instellen "xDiff! juiste! = + 1"
instellen "yDiff! omhoog! =-1"
instellen "yDiff! neer! = + 1"
instellen "yDiff! linker! = + 0"
instellen "yDiff! juiste! = + 0"
instellen "! omhoog! As = Y "
instellen "! neer! As = Y "
instellen "! links! As = X "
instellen "! juiste! As = X "
instellen "xTurn! linker! = 1'
instellen "xTurn! juiste! =-1"
instellen "yTurn! linker! =-1"
instellen "yTurn! juiste! = 1'
Stel ' playerSpace =! ruimte!! eten!"
Stel ^ "sleutels ="! links! " "! goed!" "! onderbreken!" ^"
instellen "newHi ="
instellen "groeien = 0"
Als! moveKeys! EQU 4 set ^ "sleutels =! sleutels! "! up!" "! neer!" ^"
CLS
Exit/b
::-------------------------------------
: waitForSignal
zoniet bestaat "signaal %" goto: waitForSignal
del "signaal %"
Exit/b
::-------------------------------------
: loadHighScores
instellen "saveAvailable ="
voor/l % in (1-1-6) doen ()
instellen "Hallo %% N ="
for /f "delims =:" % in (' findstr "^::" "% hiFile%%%N.txt" 2 ^ > nul') doen ()
instellen "Hallo %% N = %% A"
Stel ' saveAvailable = S "
)
)
Exit/b
::-------------------------------------
: fixLogs
setlocal-enableDelayedExpansion
voor % in (* .snake) doen ()
ren "%% F" "%% F.txt"
Bel: fixLog "%% F.txt"
)
pushd "% SaveLoc %"
for /f "delims =" % in (' dir/b SnakeHi*.txt 2 ^ > nul') doen ()
instellen "bestand = %% ~ nF"
instellen "bestand = Snake1Hi! file:~-1!. txt"
ren "%% F" "! bestand!"
Bel: fixLog "! bestand!"
)
popd
Exit/b
: fixLog filePath
> "% ~ 1.new" ()
< "% ~ 1" ()
voor % in (diffCode moeite moveKeys omhoog omlaag links rechts) doen ()
instellen van /p "val ="
(echo %% A =! val!)
)
)
(groei echo = 1)
(echo einde)
meer HALSLENGTE + 7 "% ~ 1'
)
move /y "% ~ 1.new" "% ~ 1' > nul
Exit/b
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: controller
:: Detecteert toetsaanslagen en stuurt de gegevens naar het spel via een sleutelbestand.
:: De controller heeft verschillende soorten input die worden geactiveerd door opdrachten verzonden
:: uit het spel via een cmd-bestand.
::
:: Modi:
::
:: hold - geen input, wacht opdracht
::
:: Ga - voortdurend krijgen/verzenden toetsaanslagen
::
:: prompt - verzenden {gereinigd} marker om spel te zuiveren invoerbuffer, vervolgens
:: get/Verstuur een enkele toets drukt en houd
::
:: one - Get/Verstuur een enkele toets ingedrukt
::
:: replay - Kopieer een spel logboek naar het sleutelbestand. De volgende regel in cmd-bestand
:: naam van logboekbestand om te kopiëren. Tijdens de replay, de controller
:: een signaal afbreken het spel als een toets wordt ingedrukt.
::
:: stoppen - sluit onmiddellijk het proces controller
::
:: Zoals geschreven, deze routine wordt ten onrechte gemeld! zo), maar dat maakt niet uit
:: omdat we geen aan die sleutel behoefte. Zowel en Enter-toets worden gerapporteerd als {Enter}.
:: Een extra karakter is toegevoegd aan de uitvoer te bewaren van elke controle tekens
:: wanneer gelezen door instellen/p.
setlocal-enableDelayedExpansion
for /f % in (' /Z Kopieer "% ~ dpf0" nul ") Stel" CR = %% een "
instellen "cmd = houden"
instellen "inCmd ="
instellen "sleutel ="
voor/l %%. Voer in ())
als "! cmd!" neq "hold" ()
for /f "delims =" % in (' xcopy /w "% ~ f0" "% ~ f0" 2 ^ > nul') doen ()
Als niet gedefinieerd sleutelset "sleutel = %% A"
)
instellen "sleutel =! sleutel: ~ -1!"
Als! toets! EQU! CR! instellen "sleutel = {Geef}"
)
< & 8 ingesteld /p "inCmd ="
Als inCmd (gedefinieerd
Als! inCmd! EQU afgesloten afrit
instellen "cmd =! inCmd!"
Als! inCmd! EQU replay)
< & 8 ingesteld /p "bestand ="
type "! bestand!" > & 9
kopiëren van nul "signaal %"
)
instellen "inCmd ="
)
Als belangrijkste (gedefinieerd
als "! cmd!" equ "prompt" (echo {gereinigd}.)
als "! cmd!" equ "replay" ()
kopiëren van nul "signaal %" > nul
(echo {gereinigd}.)
instellen "cmd = ga"
) anders (echo(!key!.)
als "! cmd!" neq "go" set "cmd = houden"
instellen "sleutel ="
) > & 9
)