Page 1 sur 1

[JEU] Labyrinthe en batch !

Posté : 24 juil. 2012 15:35
par bigeyes
Salut à tous !

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
ATTENTION ! Les fichiers contenant les cartes doivent porter l'extension ".laby" et être placés dans un dossier "maps" pour être repérés par le script !

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
maps\map01.laby

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
Créer sa propre map :

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
##  ##    ######    ##  ##    ##  ##
    ##
##  ##    ##  ##    ######    ##  ##
Si j'ai la foi je ferai bien un petit éditeur de map, ça doit pas être trop compliqué, mais on verra ça plus tard ^^ Pas encore fait non plus mais qui pimenterait un peu le tout : rajouter une gestion de pièges ou des genres de mini-quêtes. 'Fin bref si j'ai du temps à perdre je saurais quoi faire ;-)

A+ les amis !

Re: [JEU] Labyrinthe en batch !

Posté : 15 nov. 2014 21:57
par Jimi123
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.

Re: [JEU] Labyrinthe en batch !

Posté : 13 févr. 2015 09:51
par Ddamadosic
What has to be read from here is great.

Re: [JEU] Labyrinthe en batch !

Posté : 11 mars 2015 14:23
par TheBirdLion
Hopefully there will be some winter. I'll keep my eyes open for a post. Sounds like fun.

Re: [JEU] Labyrinthe en batch !

Posté : 28 janv. 2017 20:33
par dos.bat
C'est génial très bien pensé! et dire que les premier jeux avaient cette tête... :shock:

Re: [JEU] Labyrinthe en batch !

Posté : 28 janv. 2017 20:54
par bigeyes
Salut !

Merci pour le commentaire, ça fait plaisir, surtout que j'avais complètement oublié ce script depuis le temps :p
J'en ai profité pour mettre une version légèrement améliorée, dans laquelle il n'est plus nécessaire de valider les déplacements, et qui contient un début de sauvegarde des scores (mais pas opérationnel il me semble). Il y a aussi une map en plus.

Bonne soirée ;)

Re: [JEU] Labyrinthe en batch !

Posté : 28 janv. 2017 21:14
par dos.bat
Mais de rien! le jeu est super!

Re: [JEU] Labyrinthe en batch !

Posté : 26 avr. 2017 21:14
par art
Qui est chaud pour faire un gestionnaire de sécurité en batch?

Re: [JEU] Labyrinthe en batch !

Posté : 20 juil. 2017 10:36
par temuntte
J'y consens avec plaisirtapis cuisson