Étape 2: Puis copiez et collez ce Code sur le bloc-notes
Si "% ~ 1" == « startGame » goto : jeu
Si "% ~ 1" == « startController » goto : contrôleur
::---------------------------------------------------------------------
:: quelques variables globales utilisées par le jeu et le contrôleur d’installation
setlocal disableDelayedExpansion
: getSession
Si définie temp (set "tempFileBase=%temp%\") else si tmp définie « tempFileBase=%tmp%\ »
la valeur "tempFileBase = % tempFileBase % serpent % temps:: = _ %"
la valeur « keyFile=%tempFileBase%_key.txt »
la valeur « cmdFile=%tempFileBase%_cmd.txt »
la valeur « gameLock=%tempFileBase%_gameLock.txt »
la valeur « gameLog=%tempFileBase%_gameLog.txt »
la valeur « signal=%tempFileBase%_signal.txt »
la valeur « saveLoc=%userprofile%\Snake »
la valeur « userPref=%saveLoc%\SnakeUserPref.txt »
Définissez "hiFile=%saveLoc%\Snake!growth ! Salut"
::------------------------------------------
:: Verrouiller cette session de jeu et de lancement.
:: Loop back et essayer une nouvelle session si échec.
:: Nettoyage et sortie lorsque vous avez terminé
appeler : lancer 7 > « % gameLock » || Goto : getSession
del « % tempFileBase % * »
sortie/b
::------------------------------------------
: lancer le jeu et le contrôleur
composez le : fixLogs
Copiez nul « keyFile % » > nul
Copiez nul « cmdFile % » > nul
Démarrer "" /b cmd /c ^ "" % ~ f0 « startController 9 ^ > ^ > "keyFile %" 8 ^ < "cmdFile %" 2 ^ > nul ^ > nul ^ "
cmd /c ^ "" % ~ f0 » startGame 9 ^ < « keyFile % » 8 ^ > ^ > « cmdFile % » ^ écho ()
::--------------------------------------------------------------
:: Leur sortie, attendez que le contrôleur de fermer avant de retourner
: à proximité
2 > nul (>> « keyFile % » appel) || Goto: à proximité
dans le cas contraire les existent "% ~ dp0CursorPos.exe » ()
jeu d’écho peut être améliorée en installant
CursorPos.exe de Aacini, disponible à l’écho
echo http://goo.gl/hr6Kkn
ECHO)
echo % sa % |gestion/i « % ~ f0 "> nul & & pause
)
sortie/b 0
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: jeu
titre % ~ nx0
CLS
::---------------------------------------
:: Taille Playfield
:: max terrain de jeu: (width-2)*(height-2) < = 1365
la valeur "largeur = 40" max = 99
la valeur "hauteur = 25" max = 99
::----------------------------
:: redimensionner la fenêtre de la console
Set /a cols = largeur + 1, lignes = hauteur + 10, area=(width-2)*(height-2)
Si % zone % gtr 1365 (
echo ERROR : zone de terrain trop grand
sendCmd % quit
sortie
)
Si % canalisations % lss 14 lignes fixes = 14
Si % cols % lss 46 set cols = 46
con de mode : cols = % cols % lines = lignes %
::----------------------------
:: définir des variables
la valeur "configOptions = diffCode mal moveKeys de la croissance vers le haut bas gauche droite"
la valeur "configOptionCnt = 9"
la valeur "moveKeys = 4"
la valeur "haut = W"
la valeur "bas = S"
la valeur « gauche = A »
la valeur « droite = D »
la valeur "pause = P"
la valeur "espace ="
la valeur "lié = # »
la valeur "nourriture = +"
la valeur "tête =
la valeur "corps = O"
la valeur "mort = X"
la valeur "croissance = 1"
Si existent « % userPref » for /f "usebackq delims =" %% dans ("userPref %"), définissez "%% V"
la valeur "spinner1 =-»
la valeur "spinner2 = \"
la valeur "spinner3 = |"
la valeur "spinner4 = /"
la valeur « fileur = spinner1 spinner2 spinner3 spinner4 "
la valeur "delay1 = 20"
la valeur "delay2 = 15"
la valeur "delay3 = 10"
la valeur "delay4 = 7"
la valeur "delay5 = 5"
la valeur "tarder6 = 3"
la valeur "desc1 = paresseux"
la valeur "desc2 = Crawl"
la valeur "desc3 = lente"
la valeur "desc4 = Normal"
la valeur "desc5 = rapide"
la valeur "desc6 = Insane"
la valeur "spinnerDelay = 3"
Set /a « largeur-= 1, hauteur-= 1 »
:: définir LF comme un caractère de saut de ligne (saut de ligne)
la valeur ^ « LF = ^
^ "Vider avant ligne est obligatoire - ne pas enlever
:: définir CR comme un caractère de retour chariot
for /f %%d dans (' copier/z "% ~ dpf0" nul ") définissez" CR = %% A "
:: définir BS comme un caractère de retour arrière
for /f %% dans (' "invite $H & pour %%d réel (1) ne" ') définissez "BS = %% A"
la valeur "supérieur = 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"
la valeur "non valide = * ~ ="
::---------------------------
:: définir des macros
Si existent « % ~ dp0CursorPos.exe » ()
la valeur "cls = CursorPos 0 0"
la valeur "ClearLine = echo (& CursorPos 0 -1"
la valeur "ClearPrev = CursorPos 0 - 0 & echo ("
) () autre
la valeur "cls = cls"
la valeur "ClearLine ="
la valeur "ClearPrev ="
)
:: définir un saut de ligne avec continuation de ligne
la valeur ^ « \n=^^^%LF%%LF%^%LF%%LF%^^ »
:: setErr
::: Attribue l’ERRORLEVEL 1
la valeur « setErr=(call) »
:: clrErr
::: Affecte l’ERRORLEVEL 0
la valeur "clrErr = (appel)"
:: commande sendCmd
::: envoie une commande au contrôleur
la valeur "sendCmd = > & 8 echo"
:: getKey [ValidKey] [ValidKey...]
::: Vérifier keypress du contrôleur. Seulement accepter une ValidKey.
::: Jeton délimiteurs et poison caractères doivent être placés entre guillemets.
::: Accepter n’importe quelle touche si aucun ValidKey ne spécifié.
::: Retourner le résultat dans la variable clé. Key n’est pas défini si aucun keypress valide.
Set getKey=%\n%
pour %% # (1-2) faire si %% #== 2 (%\n%
set key=%\n%
Set inKey=%\n%
Set keyTest=%\n%
^ < ^ & 9 set/p "inKey="%\n%
Si défini inKey (%\n%
Set inKey=!inKey:~0,-1!%\ n %
pour %% dans (! args!) définissez /a keyTest = 1 ^ & si/i! inKey! EQU %% ~ C set key=!inKey!%\ n %
)%\n%
Si ce n’est pas définie keyTest définie key=!inKey!%\ n %
) d’autre set args =
:: dessiner
::: dessine le Conseil
Set draw=%\n%
Set screen=%\n%
pour/l %% dans (0,1, hauteur %) Fixez-vous écran =! écran!! ligne %% Y!! LF!%\ n %
réglage écran =! écran! Vitesse = ! Difficulté!! rejouer!! LF ! Taux de croissance =! croissance! Meilleur score =! Salut! LF ! Score =! score! Temps =! m!:!s!%\ n %
Si défini replay sinon définie replayFinished (%\n%
réglage écran =! écran!! LF ! LF ! Appuyez sur une touche pour annuler le replay%\n%
)%\n%
cls % ^ & echo(!screen!
:: tester X Y ValueListVar
::: teste si la valeur au point de coordonnées X, Y se trouve dans le contenu de ValueListVar
Set test=%\n%
pour %% # (1-2) faire si %% #== 2 (for /f "jetons = 1-3" %% dans («! args! ") (%\n%
pour %%d dans («! ligne %% 2: ~ %% 1,1! ") faire si"! %% 3: %% ~ A =! « QNE »! %% 3! "% clrErr % %setErr%%\n% d’autre
)) else set args =
:: terrain X Y ValueVar
::: place le contenu de ValueVar au point de coordonnées X, Y
Set plot=%\n%
pour %% # (1-2) faire si %% #== 2 (for /f "jetons = 1-3" %% dans («! args! ") (%\n%
Set part2=!line%%2:~%%1!"%\" n %
la valeur "ligne %% 2 =! ligne %% 2: ~ 0, %% 1!! %%3!! part2:~1!"%\ n %
)) else set args =
::--------------------------------------
:: démarrer le jeu
setlocal enableDelayedExpansion
dans le cas contraire les existent « % saveLoc%\ » md « % saveLoc »
la valeur "rejouer = interrompons... "
la valeur "replayAvailable ="
composez le : loadHighScores
appeler : mainMenu
::--------------------------------------
:: la boucle principale (boucle infinie)
pour/l %%. dans () do)
% === vérifier et processus interrompre le signal en mode replay === %
Si défini replay si existent () « % de signal »
del « signal % »
la valeur "replayFinished = 1"
tirage au sort %
ECHO)
ClearLine %
appeler : purge
pour %% dans (! configOptions!) définissez "%% A =! %% ASave!"
appeler : mainMenu
)
% === calculer temps depuis le dernier coup === %
for /f "jetons = 1-4 delims =:.," %% dans («! temps: = 0! ") Définissez /a "t2 = (((1 %% un * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100, tDiff = t2-t1"
Si! tDiff! LSS 0 set /a tDiff += 24 * 60 * 60 * 100
Si! tDiff! GEQ! retard! (
% === délai a expiré, donc le temps pour le mouvement === %
Set /a t1 = t2
% === calculer les temps de jeu === %
Si non défini ensemble de départ "départ =! t2!"
Set /a « gameTime=(t2-gameStart) »
Si! gameTime! LSS 0 set /a "gameTime += 24 * 60 * 60 * 100"
Set /a "gameTime =(gameTime-pauseTime)/100, m = gameTime/60, s = gameTime %% 60"
Si! m! LSS 10 ensemble "m = 0! m!"
Si! s! LSS 10 ensemble "s = 0! s! »
% === obtenir keypress === %
getKey %! clés!
si/i! clé! EQU! faire une pause ! (
% === pause jeu === %
ECHO)
appeler : demander « Pause - Appuyez sur une touche pour continuer... »
% ClearPrev %
aller sendCmd %
for /f "jetons = 1-4 delims =:.," %% dans («! temps: = 0! ") Définissez /a "t2 = (((1 %% un * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100, tDiff = t2-t1"
Si! tDiff! LSS 0 set /a tDiff += 24 * 60 * 60 * 100
Set /a pauseTime += tDiff
) () autre
% === orientation === %
Si non défini replay (echo(!key!.) >> «! gameLog! "
pour %% dans (! clé!) faire si! moveKeys! (EQU 2
Set /a « xDiff = XTournez %% K *! yDiff!, yDiff = yTurn %% K *! xDiff! "
) ElseIf "! %% KAxis! « QNE »! axe!" (
Set /a « xDiff = xDiff %% K, yDiff = yDiff %% K "
la valeur "axe =! %% KAxis!"
)
% === effacer la queue === %
la valeur "TX =! snakeX: ~ -2!"
la valeur "TY =! snakeY: ~ -2!"
la valeur "snakeX =! snakeX: ~ 0, -2!"
la valeur « snakeY =! snakeY: ~ 0, -2! "
% de l’intrigue ! TX!!! TY ! espace
% === calculer le nouvel emplacement de tête et de tenter de déplacer === %
/ a la valeur « X = PX + xDiff, Y = PY + yDiff "
Set "X = ! X!"
la valeur "Y = ! Y!"
Set "X = ! X: ~ -2! "
la valeur "Y = ! Y: ~ -2! "
(test % ! X! ! Y ! playerSpace) & & ()
% === déménagement réussi === %
% === supprimer le nouvel emplacement de tête de la liste vide === %
pour %% dans ("! X! ») faire pour %% dans ("! Y!") Définissez « vide =! vides: #%% ~ X %% ~ Y =! "
% === manger des aliments qui peuvent être présents === %
(test % ! X! ! Y ! nourriture) & & ()
% === lancer croissance === %
Set /a croître croissance +=
% === repérer et attirer de nouveaux aliments === %
Si défini (replay
< & 9/p la valeur "F ="
) () autre
/ a la valeur "F = (! aléatoire! %%(emptyCnt-1)) * 6 + 1"
(echo ! F!) >> «! gameLog! "
)
pour %% dans (! F!) faire (% de la parcelle! vide: ~ %% F, 5! alimentaire)
)
Si! grandir! (RTM 0
% === restaurer la queue === %
% de l’intrigue ! TX!!! TY ! corps
la valeur "snakeX =! snakeX!! TX!"
la valeur « snakeY =! snakeY!! TY!"
Set /a emptyCnt = 1
% === gérer partition === %
Set /a « score += 1, se développer-= 1 »
Si non défini replay si! score! GTR! Salut! Set /a "Salut += 1, newHi = 1"
) () autre
% === Ajouter le poste de queue ancien en la liste vide === %
la valeur "vide =! vide! #! TX!!! TY!"
)
% === dessiner la nouvelle tête === %
Si défini snakeX (parcelle % ! PX!!! PY ! corps)
% de l’intrigue ! X! ! Y ! tête
% === Ajouter la nouvelle position de la tête aux chaînes serpent === %
la valeur "snakeX = ! X!! snakeX!"
la valeur « snakeY = ! Y!! snakeY!"
la valeur "PX = ! X!"
la valeur "PY = ! Y!"
tirage au sort %
) || (
% === move échec - jeu sur === %
la valeur "replayFinished = 1"
% de l’intrigue ! TX!!! TY ! corps
appeler : spinner ! PX!!! PY ! mort
tirage au sort %
Si défini () newHi
ECHO)
Echo de nouveau Score élevé - félicitations ^ ^ !
la valeur "Salut! diffCode! =! score!"
copie "! gameLog!" "% hiFile %! diffCode!. txt"> nul
>> "% hiFile %! diffCode!. txt"echo::! score!
)
ECHO)
ClearLine %
appeler : demander « Appuyez sur une touche pour continuer... »
pour %% dans (! configOptions!) définissez "%% A =! %% ASave!"
appeler : mainMenu
)
)
)
)
::-------------------------------------
: getString prompte Var MaxLen
:: L’invite pour une chaîne avec une longueur maximum de MaxLen.
:: Clés valides sont alphanumériques, espace, trait de soulignement et tableau de bord
:: Chaîne se termine par l’entrée
:: Backspace fonctionne pour supprimer le caractère précédent
:: Résultat est retourné dans le Var
Set /a "maxLen = %3"
la valeur "%2 ="
% sendCmd % invite
appeler : purge
: getStringLoop
(getKey %! supérieur! 0 1 2 3 4 5 6 7 8 9 » » _ - {Enter}! BS!)
Si défini à clés)
Si! clé! EQU {Enter})
ECHO)
sortie/b
)
Si! clé! NEQ! BS! Si! maxLen! (RTM 0
Set /a maxLen = 1
la valeur "%2 =! %2! clé !
)
Si! clé! EQU! BS! Si défini (%2
Set /a maxLen += 1
la valeur "%2 =! %2: ~ 0, -1!"
)
)
Si défini inKey % sendCmd % un
Goto : getStringLoop
::-------------------------------------
: demander prompte ValidKey [Validkey]...
:: L’invite pour une pression de touche.
:: Attendre jusqu'à ce qu’un ValidKey est enfoncée et retourner le résultat dans la variable clé.
:: Délimiteurs de jetons), et des caractères incohérents doivent être placés entre guillemets.
% sendCmd % invite
(set validKeys = % *)
(set validKeys =! validKeys:% 1 =!)
appeler : purge
: getResponse
(getKey %! validKeys!)
Si non défini (clés
Si défini inKey % sendCmd % un
Goto : getResponse
)
sortie/b
: purge
la valeur « inKey = "
pour/l %%d Ko (1 1 1000) ()
Set /p "inKey ="
Si «! inKey! "equ « {purgé}. » sortie/b
) < & 9
Goto : purge
::-------------------------------------
: spinner X Y ValueVar
Set /a d1 =-1000000
pour/l %%d Ko (1 1 5) faire pour %% dans (spinner %) do ()
composez le : spinnerDelay
% tracé %%d %2 %%
tirage au sort %
)
composez le : spinnerDelay
(parcelle % %% %2 % 3)
sortie/b
::-------------------------------------
: retarder centisecondes
setlocal
for /f "jetons = 1-4 delims =:.," %% dans («! temps: = 0! ") ne définissez pas/a « spinnerDelay = %1, d1 = (((1 %% un * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% d-36610100 "
:: passer à: spinnerDelay
::-------------------------------------
: spinnerDelay
for /f "jetons = 1-4 delims =:.," %% dans («! temps: = 0! ") Définissez /a "d2 = (((1 %% un * 60) + 1 %% b) * 60 + 1 %% c) * 100 + 1 %% dDiff d-36610100, = d2-d1"
Si la valeur de % dDiff % lss 0/a dDiff += 24 * 60 * 60 * 100
Si % dDiff % lss % spinnerDelay % goto : spinnerDelay
Set /a d1 = d2
sortie/b
::-------------------------------------
: mainMenu
CLS
la valeur "loadAvailable ="
taux de croissance de l’écho =! croissance!
ECHO)
Menu principal de l’écho :
ECHO)
écho N - nouveau jeu
Si l’écho replayAvailable R - jeu précédent Replay défini
Si défini saveAvailable écho S - enregistrer un jeu
Si existent *. snake.txt echo L - charge et montre un enregistrées jeu & set "loadAvailable = L"
echo C - options de contrôle
echo G - options graphiques
echo Q - Quit
ECHO)
la valeur "hiAvailable ="
pour/l %%d Ko (1 1 6) faire si défini Salut %% () N
Si non défini () hiAvailable
echo Replay Score élevé :
ECHO)
)
la valeur "desc =! desc %% N!..."
la valeur "hiAvailable =! hiAvailable! %% N "
echo %%! / / desc: ~ 0, 8!! Salut %% N !
)
Si défini (écho) hiAvailable
mis "touches = N C G Q! hiAvailable!! replayAvailable!! saveAvailable!! loadAvailable!"
appeler : demander ">"! clés!
si/i! clé! (EQU Q
sendCmd % quit
CLS
sortie
)
si/i! clé! EQU N)
la valeur "rejouer ="
la valeur "replayAvailable = R"
la valeur "saveAvailable = S"
Goto : initialiser
)
si/i! clé! EQU S)
Si défini () replayAvailable
appeler : demander "HighScore # ou P pour précédent:"! hiAvailable! P
) () autre
appeler : demander "HighScore #:"! hiAvailable!
)
écho! clé!
si/i! clé! EQU P (valeur "src =! gameLog!") sinon la valeur "src = % hiFile %! clé!. txt"
appeler : getString "enregistrer le nom de fichier:" déposer 20
copie "! src!" «! fichier!. Snake.txt"
appeler : demander « Appuyez sur une touche pour continuer... »
)
si/i! clé! EQU L)
appeler : getString "nom de fichier de charge:" déposer 20
Si existe "! fichier!. () Snake.txt"
la valeur "rejouer =! fichier!. Snake.txt"
Goto : initialiser
)
echo erreur : fichier "! fichier!. Snake.txt"introuvable
appeler : demander « Appuyez sur une touche pour continuer... »
)
si/i! clé! EQU R)
la valeur "rejouer =! gameLog!"
Goto : initialiser
)
Si! clé! GEQ 1 si! clé! Leq 6)
la valeur "rejouer = % hiFile %! clé!. txt"
Goto : initialiser
)
si/i! clé! EQU C appel : controlOptions
si/i! clé! EQU G appel : graphicOptions
Goto : mainMenu
::-------------------------------------
: controlOptions
CLS
la valeur "touches = {Enter} T L R P"
Si! moveKeys! EQU 4 ensemble "touches =! clés! D U"
Options de contrôle de l’écho :
ECHO)
echo T - Type... =! moveKeys! clés
ECHO)
Echo de L - gauche... =! gauche!
echo R - droit... =! bon!
Si! moveKeys! EQU 4 echo U - up... =! up!
Si! moveKeys! EQU 4 echo D - bas... =! vers le bas !
ECHO)
echo P - Pause... =! faire une pause !
ECHO)
écho {Enter} - retourner au Menu principal
ECHO)
appeler : demander ">"! clés!
Si! clé! EQU {Enter} goto : saveUserPrefs
si/i! clé! EQU T)
Si! moveKeys! EQU 2 (la valeur "moveKeys = 4") sinon la valeur "moveKeys = 2"
Goto : controlOptions
)
la valeur "option = LLeft RRight UUp DDown PPause"
for /f %%d dans («! option: * clé % =! ") ()
appeler : demander "Appuyez sur une touche pour %% O:"
pour %%d Ko (0 1 2) faire si «! clé! « equ »! non valide: ~ %% K, 1! "goto : controlOptions
pour %% dans (! supérieure!) définissez "clé =! clé: %% C = %% C!"
la valeur "%% O =! clé!"
)
Goto : controlOptions
::-------------------------------------
: graphicOptions
CLS
écho des Options graphiques :
ECHO)
B - l’écho à la frontière... =! lié!
E - espace vide d’écho. =! espace!
l’écho de H - tête de serpent... =! chef!
écho S - corps de serpent... =! corps!
echo F - nourriture... =! alimentaire!
echo D - mort... =! mort!
ECHO)
echo G - taux de croissance. =! croissance!
ECHO)
écho {Enter} - Rturn au Menu principal
ECHO)
appeler : demander ">" B E, H, S, F, D, G {Enter}
Si! clé! EQU {Enter} goto : saveUserPrefs
si/i! clé! EQU G)
appeler : demander « Appuyez sur un chiffre pour le taux de croissance (0 = 10) » 0 1 2 3 4 5 6 7 8 9
Si! clé! EQU 0 ensemble "clé = 10"
la valeur "croissance =! clé!"
composez le : loadHighScores
) () autre
la valeur "option =-BBorder:bound:-EEmpty espace : espace:-tête : tête de HSnake:-SSnake corps : corps:-FFood:food:-DDeath:death:"
for /f "jetons = 1 2 delims =:" %%d dans ("! option: *-clés % =!") faire)
appeler : demander "Appuyez sur une touche pour %% A"
pour %%d Ko (0 1 2) faire si «! clé! « equ »! non valide: ~ %% K, 1! "goto : graphicOptions
la valeur "%% B =! clé!"
)
)
Goto : graphicOptions
::------------------------------------
: saveUserPrefs
(pour %% dans (moveKeys jusqu'à la gauche espace droit lié alimentaire tête corps mort pause croissance) écho %% V =! %% V!) > « % userPref »
sortie/b
::-------------------------------------
: initialiser
CLS
Si défini (replay
Options de vitesse de relecture de l’écho :
) () autre
Options de vitesse de l’écho :
)
retard d’écho
echo # Description (secondes)
echo --- ----------- ---------
pour/l %%d Ko (1 1 6) ()
la valeur "delay = 0! retard %% N!"
la valeur "desc =! desc %% N!"
echo %%d desc: ~ 0, 11 ! 0.! retard: ~ -2 !
)
ECHO)
appeler : demander à "choisir une vitesse (1-6): « 1 2 3 4 5 6
la valeur "Difficulté =! desc % clé!"
la valeur "retard =! clés % de retard! »
la valeur "diffCode = clé %"
echo % clés - % Difficulté
ECHO)
la valeur "axe = X"
la valeur « xDiff = + 1 "
la valeur "yDiff = + 0"
la valeur "vide ="
Set /a "PX = 1, PY = hauteur/2, FX = width / 2 + 1, FY = PY, score = 0, emptyCnt = 0, t1 =-1000000"
la valeur "départ ="
la valeur « m = 00"
Définissez « s = 00"
la valeur "snakeX = PX hexa%"
la valeur "snakeY = PY hexa%"
la valeur "snakeX = % snakeX: ~ -2 %"
la valeur « snakeY = % snakeY: ~ -2 % "
pour/l %% à (0 % de la hauteur de 1 %), do ()
la valeur "ligne %% Y ="
pour/l %% dans (0,1, % largeur) ()
la valeur "cellule ="
Si %%d Ko 0 ensemble "cellule = % lié"
Si %% % hauteur % ensemble "cellule = % lié"
Si %%d Ko 0 ensemble "cellule = % lié"
Si %% % largeur % ensemble "cellule = % lié"
Si %% % PX si %% % PY % ensemble "cellule = % tête"
Si non défini (cellule
la valeur "cellule = % de l’espace"
la valeur "eX = %% X"
la valeur "eY = %% Y"
la valeur "vide =! vide! #! eX: ~ -2!! eY: ~ -2!"
Set /a emptyCnt += 1
)
Si %% % FX si %% % FY % ensemble "cellule = aliments %"
la valeur "ligne %% Y =! ligne %% Y!! cellule!"
)
)
pour %% dans (! configOptions!) définissez "%% ASave =! %% A!"
la valeur "replayFinished ="
Si défini (replay
% sendCmd % replay
sendCmd %! rejouer!
composez le : waitForSignal
la valeur "rejouer = (relire au! Difficulté!)"
la valeur "lire = 1"
< & 9 ()
pour/l %% dans (1 1! configOptionCnt!) faire si défini () lire
Set /p "ln ="
Si «! ln! "equ « END » (lire la valeur =) sinon la valeur"! ln! "
)
)
la valeur "touches ="
la valeur « Salut = 0 »
for /f "delims =:" %% dans (' findstr "^::" "% hiFile %! diffCode!. txt » 2 ^ > nul ") définissez « Salut = %% A"
(% de tirage au sort)
appeler : retarder 100
) () autre
Si défini Salut % diffCode % (la valeur "Salut =! Salut % diffCode %!") sinon la valeur « Salut = 0 »
(% de tirage au sort)
> "! gameLog!" (
pour %% dans (! configOptions!) faire (écho %% A =! %% A!)
(echo fin)
)
ECHO)
Si! moveKeys! EQU 4)
écho des contrôles:! up! = vers le haut! vers le bas! = vers le bas! gauche! = gauche! droite! = right! pause! = pause
) () autre
écho des contrôles:! gauche! = gauche! bon! = right! pause! = pause
)
Évitez de tomber sur vous l’écho (! corps!! corps!! chef! ^) ou au mur (! lié! ^)
écho à manger nourriture (! nourriture! ^) à se développer.
ECHO)
appeler : demander « Appuyez sur une touche pour démarrer... »
aller sendCmd %
)
la valeur "pauseTime = 0"
la valeur « xDiff! up! = + 0"
la valeur « xDiff! bas! = + 0"
la valeur « xDiff! gauche! =-1 "
la valeur « xDiff! bon! = + 1 "
la valeur "yDiff! up! =-1"
la valeur "yDiff! bas! = + 1"
la valeur "yDiff! gauche! = + 0"
la valeur "yDiff! bon! = + 0"
la valeur "! up! Axe = Y "
la valeur "! vers le bas ! Axe = Y "
la valeur "! gauche! Axe = X "
la valeur "! bon! Axe = X "
la valeur "XTournez! gauche! = 1"
la valeur "XTournez! bon! =-1"
la valeur "yTurn! gauche! =-1"
la valeur "yTurn! bon! = 1"
la valeur "playerSpace =! espace!! nourriture!"
la valeur ^ "touches ="! gauche! " «! bon! » «! une pause! » ^"
la valeur "newHi ="
la valeur "grandir = 0"
Si! moveKeys! ensemble EQU 4 ^ "touches =! clés! «! up! » «! bas! » ^"
CLS
sortie/b
::-------------------------------------
: waitForSignal
dans le cas contraire les existent « signal % » goto : waitForSignal
del « signal % »
sortie/b
::-------------------------------------
: loadHighScores
la valeur "saveAvailable ="
pour/l %%d Ko (1 1 6) ()
la valeur "Salut %% N ="
for /f "delims =:" %% dans (' findstr "^::" "% hiFile%%%N.txt" 2 ^ > nul') ()
la valeur "Salut %% N = %% A"
la valeur "saveAvailable = S"
)
)
sortie/b
::-------------------------------------
: fixLogs
setlocal enableDelayedExpansion
pour %% dans (* .snake) ()
Ren "%% F" "%% F.txt"
appeler : fixLog "%% F.txt"
)
pushd « % SaveLoc »
for /f "delims =" %%d dans (« dir/b SnakeHi*.txt 2 ^ > nul') ()
la valeur "file = %% ~ nF"
la valeur "file = Snake1Hi! file:~-1!. txt"
Ren "%% F" "! fichier!"
appeler : fixLog «! fichier! "
)
popd
sortie/b
: fixLog filePath
> "% ~ 1.new" ()
< "% ~ 1" ()
pour %% dans (difficulté de diffCode moveKeys vers le haut bas gauche droite) do ()
Set /p "val ="
(echo %% A =! val!)
)
)
(écho de croissance = 1)
(echo fin)
plus + 7 » % ~ 1"
)
déplacer /y "% ~ 1.new" "% ~ 1" > nul
sortie/b
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: contrôleur
:: Détecte rapidement sur la touche et envoie les informations pour le jeu via un fichier de clé.
:: Le contrôleur possède plusieurs modes d’entrée qui sont activés par les commandes envoyées
:: du jeu via un fichier cmd.
::
:: Modes :
::
:: ne tenez - aucun entrée, attendre que la commande
::
:: aller - continuellement get/envoi touches
::
:: invite - Send {purgé} marqueur afin de permettre le jeu purger la mémoire tampon d’entrée, puis
:: get/envoyer une seule touche et la maintenir
::
:: Get/envoi unique - une seule touche, appuyez et maintenez
::
:: replay - copier un jeu journal dans le fichier de clé. La ligne suivante dans le fichier cmd
:: spécifie le nom du fichier journal à copier. Pendant la relecture, le contrôleur
:: enverra un signal d’abandon au jeu si une touche est enfoncée.
::
:: quit - quitter immédiatement le processus contrôleur
::
:: Comme écrit, cette routine signale incorrectement ! aussi), mais ça ne fait rien
:: car nous n’avez pas besoin de cette clé. Fois et touche entrée sont signalés comme {Enter}.
:: Un caractère supplémentaire est ajouté à la sortie de préserver les caractères de contrôle
:: quand lu par SET /P.
setlocal enableDelayedExpansion
for /f %%d dans (' copier/z "% ~ dpf0" nul ") définissez" CR = %% un "
la valeur "cmd = cale"
la valeur "inCmd ="
la valeur "key ="
pour/l %%. dans () do)
Si «! cmd! » QNE « hold » ()
for /f "delims =" %% dans (' xcopy/w "% ~ f0" "% ~ f0 » 2 ^ > nul') ()
Si ne pas défini de jeu de clés "clé = %% A"
)
la valeur "clé =! clé: ~ -1!"
Si! clé! EQU ! CR ! la valeur "key = {Enter}"
)
< & 8/p la valeur "inCmd ="
Si défini () inCmd
Si! inCmd! EQU quitter sortie
la valeur "cmd =! inCmd!"
Si! inCmd! (replay) EQU
< & 8/p la valeur "file ="
type "! fichier!" > & 9
Copiez nul « signal % »
)
la valeur "inCmd ="
)
Si défini à clés)
Si «! cmd! "equ"invite"(echo {purgé}.)
Si «! cmd! "equ « replay » ()
Copiez nul « signal % » > nul
(echo {purgé}.)
la valeur "cmd = aller"
) d’autre (echo(!key!.)
Si «! cmd! » QNE « go » set "cmd = cale"
la valeur "key ="
) > & 9
)