Skapa Program för orm (2 / 4 steg)

Steg 2: Sedan kopiera och klistra in denna kod på anteckningar



av
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
)

Se Steg
Relaterade Ämnen

Skapa Main Menu i Visual Basic

har du någonsin velat skapa dina egna anpassade gränssnittet ungefär som en huvudmeny för något? Också detta kan uppnås med hjälp av en händig bit programvara som kallas Visual Basic, i det här programmet kan du skapa program som tillåter dig att kli...

Att skapa ett hem automationssystem!

Här är hur automatiserat jag mitt hem. Jag behövde ett sätt att;-Hantera min solenergi system inklusive möjligheten att byta till/från verktyget leverans bör jag behöver det.-hantera mat och vatten till mina tre hundar.-Kontrollera utomhusbelysning.-...

Kompilera C/C++-program på Linux

Denna artikel kommer att visa dig hur man kompilerar ett C/C++-program på Linux använder GNU gcc / g ++ kompilator.Denna artikel kommer förhoppningsvis fungera som en guide och handledning för att sammanställa GNU C/C++-program på Linux.Steg 1: Insta...

Half-Life kalkylator Program (Ti-89, Ti-84 och Ti-83)

syftet med detta Instructable är att visa dig hur man skriver en half-life program på din räknare. Programmet kommer att göra det mycket snabb och lätt att hitta till half-life, initialmass, tid eller slutliga massan. Allt du behöver göra är att ange...

Skapa en kalkylator Visual Studio C#

Denna Instrucable kommer att guida dig genom att skapa en grundläggande kalkylatorprogrammet i C# med Microsoft Visual Studio utveckling programvara. Visual Studio är en form av utveckling programvara görs av Microsoft för att hjälpa utvecklare att s...

Installerat ett kolven program

Detta instructable guidar dig genom att inrätta en kolv ansökan. Kolven är ett ramverk för webapplikationer för Python som möjliggör snabb utveckling, men är fortfarande mycket kraftfull. Detta gör att du kan bygga webbapplikationer snabbt och kraftf...

Grundläggande aritmetik i C++

Programmering är en relativt ny studie. En av de vanligaste och mest grundläggande kodning språk kallas C++. Detta används av stora företag som Google, Apple och Microsoft för att skapa program. Ett exempel är Google Doodle som visas på Googles start...

ATtiny13A rad efterföljare

Skapa en robot med ATtiny13A är en utmaning, det har bara 1k flash och 5 IO pinnar. Men det är tillräckligt bra för att skapa en liten rad efterföljare.YouTube-demovideo: https://youtu.be/00PYO1ThzEASteg 1: Förbered hårdvara MCUIdag core ämne, ATtiny...

Anslut enheten Carriots till Paniks Status styrelsen - Enhetsstatus

denna handledning handlar om anslutning status för dina enheter i Carriots, en M2M programplattform, med Paniks Status styrelsen iPad app. Vi guidar dig genom att inrätta en DIY Panel i Status styrelsen och om upprättande av en internet application s...

Konvertera PSD till WordPress i 5 steg: A Definitive Guide

att skapa en webbplats behöver två viktiga saker, först en attraktiv, användarvänlig design, andra har en effektiv och funktionell webbplats kod. Båda är ofullständig utan varandra och briljera i båda är ytterst nödvändigt att skapa en bra hemsida. S...

Anslutning av Intel® RealSense™ 3D-kamera med Intel® Edison

Intel® har infört många stor innovation. En är Intel® RealSense™ teknologi med Intel® RealSense™ 3D kameror och SDK; Vi kan skapa program som kan utföra gest upptäckt, ansikts analys, bakgrunden segmentering, röstigenkänning, röst-syntes, och mer, SD...

Komma igång med Python

Programmering är awesome!Det är kreativ, det är kul och dess ger hjärnan en mental träning. Många av oss vill lära dig om programmering men övertyga oss själva att vi inte, kanske dess har för mycket matte, kanske den jargong som har kastat runt skrä...

Första stegen med bearbetning och Arduino (styra skiftregister från dator)

Hej igen! Jag har få delar, så jag beslöt att börja bygga virtuella! Jag hade bearbetning på min dator, men jag hade aldrig använt det, eftersom i´m bara en student och jag don´t vet Java alls. Först bestämde jag mig att rita kvadrat. Jag hade så myc...

Chip dator: Lätt att producera AVR BASIC dator

Detta instructable kommer att dokumentera och förklara mitt senaste projekt, en fristående datorsystem baserat på ett enda chip (IC); ATmega 1284P. 1284 P ansvarar för samtliga delar av systemet, inklusive kör BASIC tolk, generation RCA video signale...

Att hålla din värld synlig med The Batch öga Saver

om du är intressant i kod eller batch skript, kolla in min senaste kompatibel här.Dina ögon är mycket viktiga. Skruv med din vision och det ska skruva med dig. Vi lever i en värld av närbild arbete och våra ögon gillar inte den. Våra ögon fungerar pr...

Grunderna i programmering

Hej alla. Under de senaste månaderna har jag haft fler och fler kommentarer och personliga meddelanden om vad programmering är och vad de olika verktyg som gör.Så är här min mest grundläggande förklaring av programmering.(varning detta är riktigt gru...

Använd anteckningar och kommandotolken för Java programmering

Hej, i detta instructable, jag kommer att visa dig hur du skapar och kör ett program som du skapade i java med hjälp av anteckningar. Du kommer att behöva öppna några saker:-Anteckningar-KommandotolkenSteg 1: Skapa Program För detta steg, Använd ante...

Billigt, lätt Robotics för icke-programmerare

Hej Robotics-programmerare-vill att bina! Trött på att försöka olika "miljöer" bara för att finna att det finns en brant inlärningskurva mellan dig och de coola roboten tricks din nördiga vänner göra? Är de kommersiella kit för dyrt? Då är detta...

LED hjärta

Hej Instructables!Detta är min andra instructables.Vem har sagt det elektroniken kan inte vara romantiskt?Vi kan använda den för att visa en person vår kärlek, och det är precis vad vi ska göra: en present, så enkelt att inse så underbart att se, för...