Edit : ajout d'une archive ZIP contenant les fichiers listés ci-dessous. Dézoulé j'avais pas vu
Voici un petit script permettant de lire une "carte" écrite sur un fichier externe et de générer un labyrinthe en fonction des infos entrées dans le-dit fichier.
Il est donc tout à fait possible pour n'importe qui de créer une map qui sera ensuite lue par le script. Voir les indications après.
Si vous ne modifiez pas le code, pensez à créer un dossier "maps" au même niveau que le script et à y inclure les deux cartes données après le script.
Bonne lecture !
laby.bat
Code : Tout sélectionner
rem CONFIG
set map=
set title=laby v0.1b
title %title% %map%
mode con cols=40 lines=30
@echo off
cls
rem CHOICE
echo.
echo.
echo.
echo LABY
echo v0.1b
set tmp=0
echo.
echo.
echo.
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
echo º Choose a map
echo º
for /f %%i in ('DIR .\maps\*.laby /b') do echo º - %%~ni
echo º
echo º Type map name:
set /p map=
if not exist .\maps\%map%.laby goto QUIT
rem INIT
set map=.\maps\%map%.laby
set tmp=%RANDOM%%RANDOM%.tmp
set go=LOAD
set win=0
set rep=0
:START
find "NAME" %map% > %tmp%
echo º
echo º
echo º
echo º *** INFORMATIONS ***
echo º
for /f "tokens=2 delims=;" %%i in (%tmp%) do echo º Name: %%i
for /f "tokens=3 delims=;" %%i in (%tmp%) do echo º Decription: %%i
find "AUTHOR" %map% > %tmp%
echo º
for /f "tokens=2-3 delims=;" %%i in (%tmp%) do echo º Author: %%i %%j
find "DATE" %map% > %tmp%
for /f "tokens=2-3 delims=;" %%i in (%tmp%) do echo º Date: %%i %%j
:PAUSE
echo º
echo º Please hit a key to continue...
pause > NUL
goto %go%
:LOAD
color 08
cls
echo º
echo º Loading map...
echo º
find "SIZE" %map% > %tmp%
for /f "tokens=2 delims=;" %%i in (%tmp%) do set size_h=%%i
for /f "tokens=3 delims=;" %%i in (%tmp%) do set size_v=%%i
echo º --- Size: %size_h%x%size_v%
find "START" %map% > %tmp%
for /f "tokens=2 delims=;" %%i in (%tmp%) do set pos_h=%%i
set /a pos_h = %pos_h% + 1
for /f "tokens=3 delims=;" %%i in (%tmp%) do set pos_v=%%i
echo º --- Start position: (%pos_h%;%pos_v%)
find "EXIT" %map% > %tmp%
for /f "tokens=2 delims=;" %%i in (%tmp%) do set exit_h=%%i
set /a exit_h = %exit_h% + 1
for /f "tokens=3 delims=;" %%i in (%tmp%) do set exit_v=%%i
echo º --- Exit position: (%exit_h%;%exit_v%)
find "MAP%pos_v%" %map% > %tmp%
for /f "tokens=%pos_h% delims=;" %%i in (%tmp%) do set pos=%%i
echo º --- Start number: %pos%
find "MAP%exit_v%" %map% > %tmp%
for /f "tokens=%exit_h% delims=;" %%i in (%tmp%) do set exit=%%i
echo º --- Exit number: %exit%
echo º
echo º Starting the game...
echo º
mode con cols=40 lines=25
color 0F
title %title% %map%
goto GAME
:GAME
cls
echo %title% %map%
echo.
echo ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
goto %pos%
:00
rem useless
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set u=0
set d=0
set l=0
set r=0
goto ACTION
:01
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo.
echo ^< () ^>
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set u=0
set d=0
set l=1
set r=1
goto ACTION
:02
echo.
echo ÛÛÛÛ /\ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ () ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ \/ ÛÛÛÛ
set u=1
set d=1
set l=0
set r=0
goto ACTION
:03
echo.
echo ÛÛÛÛ /\ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ
echo ÛÛÛÛ () ^>
echo ÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set u=1
set d=0
set l=0
set r=1
goto ACTION
:04
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛ
echo ^< () ÛÛÛÛ
echo ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ \/ ÛÛÛÛ
set u=0
set d=1
set l=1
set r=0
goto ACTION
:05
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛ
echo ÛÛÛÛ () ^>
echo ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ \/ ÛÛÛÛ
set u=0
set d=1
set l=0
set r=1
goto ACTION
:06
echo.
echo ÛÛÛÛ /\ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ
echo ^< () ÛÛÛÛ
echo ÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set u=1
set d=0
set l=1
set r=0
goto ACTION
:07
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛ
echo ÛÛÛÛ () ^>
echo ÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set u=0
set d=0
set l=0
set r=1
goto ACTION
:08
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛ
echo ^< () ÛÛÛÛ
echo ÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set u=0
set d=0
set l=1
set r=0
goto ACTION
:09
echo.
echo ÛÛÛÛ /\ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ () ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set u=1
set d=0
set l=0
set r=0
goto ACTION
:10
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ () ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ \/ ÛÛÛÛ
set u=0
set d=1
set l=0
set r=0
goto ACTION
:11
echo.
echo ÛÛÛÛ /\ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ
echo ÛÛÛÛ () ^>
echo ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ \/ ÛÛÛÛ
set u=1
set d=1
set l=0
set r=1
goto ACTION
:12
echo.
echo ÛÛÛÛ /\ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ
echo ^< () ÛÛÛÛ
echo ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ \/ ÛÛÛÛ
set u=1
set d=1
set l=1
set r=0
goto ACTION
:13
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo.
echo ^< () ^>
echo.
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ \/ ÛÛÛÛ
set u=0
set d=1
set l=1
set r=1
goto ACTION
:14
echo.
echo ÛÛÛÛ /\ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo.
echo ^< () ^>
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set u=1
set d=0
set l=1
set r=1
goto ACTION
:15
echo.
echo ÛÛÛÛ /\ ÛÛÛÛ
echo ÛÛÛÛ ÛÛÛÛ
echo.
echo ^< () ^>
echo.
echo ÛÛÛÛ ÛÛÛÛ
echo ÛÛÛÛ \/ ÛÛÛÛ
set u=1
set d=1
set l=1
set r=1
goto ACTION
:ACTION
set /a pos_x = %pos_h% - 1
set pos_y=%pos_v%
echo (%pos_x%;%pos_y%)
echo.
echo ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
if %win%==1 goto END
echo Where do you want to go?
echo.
if %u%==1 (echo [Z] Up) else echo.
if %l%==1 (echo [Q] Left) else echo.
if %d%==1 (echo [S] Down) else echo.
if %r%==1 (echo [D] Right) else echo.
echo.
set /p rep= [Z;Q;S;D]:
if %u%==1 (
if %rep%==Z set /a pos_v = %pos_v% - 1
if %rep%==z set /a pos_v = %pos_v% - 1
)
if %l%==1 (
if %rep%==Q set /a pos_h = %pos_h% - 1
if %rep%==q set /a pos_h = %pos_h% - 1
)
if %d%==1 (
if %rep%==S set /a pos_v = %pos_v% + 1
if %rep%==s set /a pos_v = %pos_v% + 1
)
if %r%==1 (
if %rep%==D set /a pos_h = %pos_h% + 1
if %rep%==d set /a pos_h = %pos_h% + 1
)
if %rep%==quit goto QUIT
if %rep%==exit goto QUIT
if %pos_h%==%exit_h% if %pos_v%==%exit_v% set win=1
find "MAP%pos_v%" %map% > %tmp%
for /f "tokens=%pos_h% delims=;" %%i in (%tmp%) do set pos=%%i
goto GAME
:END
title %title% YOU WIN!
color 0A
echo.
echo º YOU WIN!
set go=QUIT
goto PAUSE
:QUIT
title %title% BYE!
color 08
cls
echo.
echo º BYE!
if %tmp%==0 exit
del %tmp%
exit
maps\test.laby
Code : Tout sélectionner
#inf
SIZE;3;3
START;3;3
EXIT;1;1
NAME;TEST;test map
AUTHOR;bigeyes;
DATE;16/07/2012;16:00
#map
MAP1;01;13;04
MAP2;10;02;09
MAP3;03;14;08
Code : Tout sélectionner
#inf
SIZE;9;9
START;3;9
EXIT;9;3
NAME;MAP01;1st map
AUTHOR;bigeyes;
DATE;17/07/2012;15:00
#map
MAP1;05;04;05;13;01;01;01;04;10
MAP2;02;02;02;02;05;01;04;11;12
MAP3;09;03;06;02;02;05;12;09;03
MAP4;07;01;01;14;15;06;03;01;08
MAP5;05;13;13;01;14;04;05;01;04
MAP6;09;02;02;10;05;12;03;04;02
MAP7;05;06;02;03;12;02;05;06;02
MAP8;02;05;12;05;14;06;03;04;02
MAP9;03;06;09;03;01;01;01;14;06
Comme dit précédemment, la carte n'est pas écrite dans le script mais dans un fichier externe en ".laby" et placé dans le dossier "maps" situé au même niveau que le script. Il répond à une architecture précise : il présente en premier la carte en fournissant diverses informations, puis la carte du labyrinthe est écrite. Référez-vous aux fichiers d'exemples si certains points vous semblent obscurs.
La première partie du fichier est composée de six champs. Trois sont indispensables au bon fonctionnement du script et les trois autres sont facultatifs.
Le champs SIZE informe le script sur la taille du labyrinthe, START sur la position de départ et EXIT sur la sortie. Le champs NAME donne le nom et la description de la map, AUTHOR informe sur l'auteur de la map et DATE sur la date de création.
La deuxième partie du fichier contient donc la map. Celle-ci est composée d'un tas de nombres correspondant au différentes figures pouvant être rencontrées. De plus, chaque ligne doit être numérotée et commencer par MAP ; de cette façon le script peut faire la différence entre les informations et la map.
Je ne m'étendrais pas davantage sur la structure du fichier, celle-ci étant assez simple. Si vous avez un doute regardez les maps d'exemple. Si vraiment personne n'a rien compris je réécrirais ça un peu mieux mais je pense qu'il ne devrait pas y avoir de problème ! Je vais juste donner les différentes figures et les chiffres associés, et il ne vous restera plus qu'à créer vos maps !
Code : Tout sélectionner
figures.txt
00 01 02 03
###### ###### ## ## ## ##
###### ## ## ##
###### ###### ## ## ######
04 05 06 07
###### ###### ## ## ######
## ## ## ##
## ## ## ## ###### ######
08 09 10 11
###### ## ## ###### ## ##
## ## ## ## ## ##
###### ###### ## ## ## ##
12 13 14 15
## ## ###### ## ## ## ##
##
## ## ## ## ###### ## ##
A+ les amis !