je suis à la partie 2 du chapitre 2 de votre tuto grâce à vous je réapprend le batch du début pour avoir de bonne base, bon tuto continuer comme ça? ces rare un tuto de bonne qualité sur le batch merci merci merci
Et moi qui me disais "ah bah nan sous Windows on peut rien appronfondir" Ah bah c'est tout ce qui manque batch et les registres !
Bon après je reste GNU/Linuxien et libriste à la base mais c'est bien de savoir au maximum comprendre son OS même quand à la base il ne veut pas être compris
Bonjour, que pense-tu qu'il manque ? Il faut savoir que nous ne traitons pas les commandes externes qui ne sont pas intégrée "de base" dans Windows 7.
Je ne sais pas c'est assez court mais c'est vrai qu'il y à tout donc c'est parfait.
J'ai trouvé une petite erreur
C'est une toute petite.
Je tourne sous XP SP3 professionnal
Ma version DOS : Microsoft Windows XP [version 5.1.2600]
(On peut le savoir en tapant "ver" dans MS-DOS)
Utiliser for avec des commandes
[...]
Jouer avec un fichier texte
C'est là que ça devient intéressant, nous allons découvrir toute la puissance du batch pour lire et modifier un fichier texte.
Vous pouvez utiliser for /f avec des commandes. Pour ça, voici la syntaxe :
Code : Batch - Sélectionner
for /f %%I in ('COMMANDE "arguments"') do COMMANDE
Pour lire dans un fichier donc :
Code : Batch - Sélectionner
for /f %%I in ('type "monFichier"') echo %%I
Grâce à ce code, vous pouvez lire les lignes d'un fichier indépendamment les unes des autres. Bien sûr, for /f a, comme pour les chaînes, les paramètres delims et tokens à espace et 1 par défaut. Il faudra donc placer "tokens=* delims=" pour avoir la ligne en entier.
[...]
Il manque do entre ")" et "echo"
Désolé de vous le faire remarquer
Mais je pense que c'est pour le bien du tuto.
Si cette erreur à déjà été signalé je m'excuse.
Si il n'y a pas d'erreur : Je comprends rien.
EDIT :
Autre petite erreur :
skip et EOL
Dans cette partie, je vais me baser sur un exemple (l'exemple précédent mais un peu polué ) :
Code : autre - Sélectionner
/*Ceci est un commentaire
Ces lignes ne servent à rien
Il serait bien de les supprimer
A partir de la ligne 6, je veux garder ce qui est écrit./*
Salut les zeros !
/Vous vous rappelez ?
Comment allez-vous ?
/Mais oui !
Moi, je vais bien.
/C'est l'exemple de ci-dessus.
Le site du zero, c'est super !
/Les lignes avec les slash gênent la lecture ...
OoOps ... J'ai fait une erreur ci-dessus.
/Nous allons les ôter
Je vais la corriger avec un script batch =)
C'est bon, j'ai corrigé l'erreur !
Maintenant que j'ai ceci dans un fichier texte, je souhaite le traiter à l'aide d'un batch ; mon but : enlever tous les commentaires. Le problème là, c'est que tous les commentaires du début ne commencent pas par le même symbole donc l'utilisation de delims est exclue. Disons que, dans un premier temps, je souhaite enlever les 11 premières lignes qui ne sont que des commentaires : c'est là qu'intervient skip. En effet, skip permet d'ignorer les n premières lignes dans un fichier :
Tout d'abord, merci pour ce tuto sur le batch, il vraiment très bien fait.
Ensuite, dans la section des boucles for, j'ai suivi les exercices et pourtant, même en copiant-collant les corrigés, je n'arrive pas à faire fonctionner les progs...
Exemple: l'exercice où l'ont doit remplacer une chaîne par une autre:
@echo off
for /f "tokens=* delims=" %%I in ('type "zero.txt"') do (
if not "%%I"=="Le site du zero, c'est nul." (
echo %%I>>zero_2.txt
) else (
echo Le site du zero, c'est super !>>zero_2.txt
)
)
echo C'est bon, j'ai corrigé l'erreur !>>zero_2.txt
del /F /Q "zero.txt"
ren "zero_2.txt" "zero.txt"
Je n'arrive toujours pas à faire marcher cette correction ! Alors ou je suis complétement topiot, ou il y a un problème.
Même chose pour l'exercice de remplacement d'extention (*.docx -> *.zip):
for %%F in (*.docx) do ren "%F" "%~nF.zip"
Ce corrigé me donne un superbe :
Appuyez sur une touche pour continuer...
Sans message d'erreur alors que, ça saute aux yeux, mes fichiers n'ont pas été renommés
Alors voilà... si d'autres personnes ont réussi à faire marcher ces corrections, ce serais super sympa de me monter vos scripts que je puisse comparer merci ...
Le site du zero, c'est nul.
test_file
Le site du zero, c'est bien.
Le site du zero, c'est chaud.
Après le script le fichier "zero.txt" contient:
Le site du zero, c'est super !
test_file
Le site du zero, c'est bien.
Le site du zero, c'est chaud.
C'est bon, j'ai corrigé l'erreur !
PS: ne garde pas ouvert le fichier texte, et place le fichier texte et le fichier batch dans le même dossier.
Le premier script change la phrase "Le site du zero, c'est nul." en "Le site du zero, c'est super !" puis rajoute à la fin du script: "C'est bon, j'ai corrigé l'erreur !"
Pour le deuxième script, il manquait un "%" à deux endroits:
Pourrais-je me consacrer à un chapitre sur les différentes applications GRAPHIQUES du Batch.
(Ex :
Apprendre "setlocal enabledelayedexpansion"
Les deux méthodes que j'exposerai :
-Par pixel :
Initialisation :
for /l %%y in (1,1,%hauteur%) do for /l %%x in (1,1,%largeur%) do set X%%xY%%y=espace
Changement du pixel %x%,%y% : set !X%x%Y%y%!=Û
Affichage : for /l %%y in (1,1,%hauteur%) do for /l %%x in (1,1,%largeur%) do set line%%y=!line%%y!!X%%xY%%y!
for /l %%y in (1,1,%hauteur%) do echo !line%%y!
-Par ligne
Initialisation :
set line1=
for /l %%x in (1,1,%largeur%) do set line1=!line1!espace
for /l %%y in (1,1,%hauteur) do set line%%y=!line1!
Changement du pixel %x%,%y% :
set /a xMoins=%x%-1
set line%%y=!line%%y:~0,%xMoins%!Û!line%%y:~%x%!
Affichage :
for /l %%y in (1,1,%hauteur%) do echo !line%%y!
)
J'exposerais alors les avantages, les inconvénients et l'utilisation de chaque méthode.
Exemple de mon "savoir-faire" (technique des pixels, extrait d'un gros programme) :
@echo off
setlocal enabledelayedexpansion
:ch10
set w=25
set h=23
set pencil=Û
set /a w3=%w%*3+2
for /l %%i in (3,1,%w3%) do for /l %%a in (1,1,%h%) do set %%it%%a=
rem Définition de constantes (%w%,%h%,%pencil%,%w3%) initialisation du canvas (boucle for).
:ch10a
set fonction=
set ancfonc=
cls
title %version% - Graphiques
echo Le graphique que nous allons g‚n‚rer montre l'‚volution de la courbe d'une
echo fonction affine "ax+b".
echo Les valeurs peuvent ˆtre positives, n‚gatives et mˆme des fractions.
echo Ecrivez les nombres d‚cimaux sous forme de fractions. Exemple : 60,4 = 604/10.
echo.
echo ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
echo.
set /p mult=Coefficient directeur "a" :
set /p add=Ordonn‚e … zero "b" :
for /l %%v in (3,1,%w3%) do (
set ancfonc=!fonction!
set /a fonction=2*%%v*!mult!/3 + 2*!add!
set /a test=!fonction! %% 2
if !test! == 1 set /a fonction+=1
set /a fonction/=2
if "!ancfonc!"=="" set ancfonc=!fonction!
set /a diff=!fonction!-!ancfonc!
if !diff! gtr 1 set /a ancfonc+=1&for /l %%a in (!ancfonc!,1,!fonction!) do set %%vt%%a=!pencil!
if !diff! lss 1 set /a ancfonc-=1&for /l %%a in (!ancfonc!,-1,!fonction!) do set %%vt%%a=!pencil!
set %%vt!fonction!=!pencil!
)
rem Détermination des pixels du canvas à éditer et ajout.
if %add% gtr 0 set nom=%mult%x+%add%
if %add% == 0 set nom=%mult%x
if %add% lss 0 set nom=%mult%x%add%
:ch10b
cls
title %version% - Fonction "%nom%"
for /l %%o in (%h%,-1,10) do echo %%o !3t%%o!!4t%%o!!5t%%o!!6t%%o!!7t%%o!!8t%%o!!9t%%o!!10t%%o!!11t%%o!!12t%%o!!13t%%o!!14t%%o!!15t%%o!!16t%%o!!17t%%o!!18t%%o!!19t%%o!!20t%%o!!21t%%o!!22t%%o!!23t%%o!!24t%%o!!25t%%o!!26t%%o!!27t%%o!!28t%%o!!29t%%o!!30t%%o!!31t%%o!!32t%%o!!33t%%o!!34t%%o!!35t%%o!!36t%%o!!37t%%o!!38t%%o!!39t%%o!!40t%%o!!41t%%o!!42t%%o!!43t%%o!!44t%%o!!45t%%o!!46t%%o!!47t%%o!!48t%%o!!49t%%o!!50t%%o!!51t%%o!!52t%%o!!53t%%o!!54t%%o!!55t%%o!!56t%%o!!57t%%o!!58t%%o!!59t%%o!!60t%%o!!61t%%o!!62t%%o!!63t%%o!!64t%%o!!65t%%o!!66t%%o!!67t%%o!!68t%%o!!69t%%o!!70t%%o!!71t%%o!!72t%%o!!73t%%o!!74t%%o!!75t%%o!!76t%%o!!77t%%o!
for /l %%o in (9,-1,1) do echo %%o !3t%%o!!4t%%o!!5t%%o!!6t%%o!!7t%%o!!8t%%o!!9t%%o!!10t%%o!!11t%%o!!12t%%o!!13t%%o!!14t%%o!!15t%%o!!16t%%o!!17t%%o!!18t%%o!!19t%%o!!20t%%o!!21t%%o!!22t%%o!!23t%%o!!24t%%o!!25t%%o!!26t%%o!!27t%%o!!28t%%o!!29t%%o!!30t%%o!!31t%%o!!32t%%o!!33t%%o!!34t%%o!!35t%%o!!36t%%o!!37t%%o!!38t%%o!!39t%%o!!40t%%o!!41t%%o!!42t%%o!!43t%%o!!44t%%o!!45t%%o!!46t%%o!!47t%%o!!48t%%o!!49t%%o!!50t%%o!!51t%%o!!52t%%o!!53t%%o!!54t%%o!!55t%%o!!56t%%o!!57t%%o!!58t%%o!!59t%%o!!60t%%o!!61t%%o!!62t%%o!!63t%%o!!64t%%o!!65t%%o!!66t%%o!!67t%%o!!68t%%o!!69t%%o!!70t%%o!!71t%%o!!72t%%o!!73t%%o!!74t%%o!!75t%%o!!76t%%o!!77t%%o!
echo 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
rem Affichage du canvas et des axes. Deux boucles afin de gérer le décalage, les nombres à deux chiffres prenant une place de plus que ceux à un chiffre.
pause
:ch10c
cls
echo 1. Revenir au graphique
echo 2. Ajouter une droite au graphique
echo 3. Tracer un autre graphique
echo 4. Quitter
echo.
echo ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
echo.
set /p choix=Votre choix :
if "%choix%"=="1" goto ch10b
if "%choix%"=="2" set pencil=*&goto ch10a
rem Changement de crayon pour les autres droites.
if "%choix%"=="3" goto ch10
if "%choix%"=="4" goto :eof
goto ch10c
Je plussoie vivement l'idée de Jio15 sur un chapitre consacré au graphisme en batch.
Il faudrait réunir toutes les connaissances de graphisme en batch de Jio15 et d'autres membres ainsi que celles glanées sur internet et les trier puis les organiser en un big chapitre sur le graphisme.
Je vous souhaite bonne chance si vous commencer ce boulot...
ne!É!suiteLigne!
)
)
if /i "!origine!"=="d" (
if /i "!direction!"=="d" (
set ligne!ordonneeJoueur!=!debutLigne!Í!suiteLigne!
)
if /i "!direction!"=="z" (
set ligne!ordonneeJoueur!=!debutLigne!¼!suiteLigne!
)
if /i "!direction!"=="s" (
set ligne!ordonneeJoueur!=!debutLigne!»!suiteLigne!
)
)
set ligneJoueur%ordonneeJoueur%=!ligne%ordonneeJoueur%!
if /i "%direction%"=="m" (
goto finPartie
)
set destination=
set permission=0
if /i "%direction%"=="q" (
set destination=!ligne%ordonneeJoueur%:~%abscisseJoueurMinoree%,1!
)
if /i "%direction%"=="d" (
set destination=!ligne%ordonneeJoueur%:~%abscisseJoueurMajoree%,1!
)
if /i "%direction%"=="z" (
set destination=!ligne%ordonneeJoueurMinoree%:~%abscisseJoueur%,1!
)
if /i "%direction%"=="s" (
set destination=!ligne%ordonneeJoueurMajoree%:~%abscisseJoueur%,1!
)
if "%destination%"==" " (
set permission=1
)
if "%destination%"=="8" (
set /a nbFruitsTerrain-=1
call :fruitAleatoire
set permission=1
set /a longueurSerpent+=5
if %mouvementsLongueur% geq 5 set mouvementsLongueur=0
if %mouvementsLongueur% lss 5 set /a mouvementsLongueur-=5
set /a nbFruits+=1
)
if "%destination%" neq " " if "%destination%" neq "8" (
goto finPartie
)
if %permission%==0 (
goto jeu
)
set origine=%direction%
set /a nbMouvements+=1
set /a mouvementsLongueur+=1
if %abscisseJoueur% GEQ 1 (
if /i "%direction%"=="q" (
set abscisseJoueur=%abscisseJoueurMinoree%
)
)
if /i "%direction%"=="d" (
set abscisseJoueur=%abscisseJoueurMajoree%
)
if /i "%direction%"=="z" (
set ordonneeJoueur=%ordonneeJoueurMinoree%
)
if /i "%direction%"=="s" (
set ordonneeJoueur=%ordonneeJoueurMajoree%
)
goto jeu
:finPartie
cls
echo.
echo.
echo.
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛ ÛÛ
echo ÛÛ ÛÛ
echo ÛÛ Fin de partie ^^^! ÛÛ
echo ÛÛ ÛÛ
if %nbMouvements% lss 10 (
echo ÛÛ Nombre de mouvements : %nbMouvements% ÛÛ
) else (if %nbMouvements% lss 100 (
echo ÛÛ Nombre de mouvements : %nbMouvements% ÛÛ
) else (if %nbMouvements% lss 1000 (
echo ÛÛ Nombre de mouvements : %nbMouvements% ÛÛ
) else (if %nbMouvements% lss 10000 (
echo ÛÛ Nombre de mouvements : %nbMouvements% ÛÛ
) else (
echo ÛÛ Nombre de mouvements : %nbMouvements% ÛÛ
)
)
)
)
if %nbFruits% lss 10 (
echo ÛÛ Fruits : %nbFruits% ÛÛ
) else (if %nbFruits% lss 100 (
echo ÛÛ Fruits : %nbFruits% ÛÛ
)
)
set /a score=100*%nbFruits%
if %nbMouvements% neq 0 (
set /a score/=%nbMouvements%
)
set /a score+=%nbFruits%
rem Score :
rem (nbFruits/nbMouvements)*100 1*100 maximum 100
rem + nbFruits (13*28-10)/5 maximum 70
rem -----------------------------------------------------------------------------
rem Score 100+70 maximum 170
echo ÛÛ ÛÛ
if %score% lss 10 (
echo ÛÛ Score : %score% ÛÛ
) else (if %score% lss 100 (
echo ÛÛ Score : %score% ÛÛ
) else (if %score% lss 1000 (
echo ÛÛ Score : %score% ÛÛ
)
)
)
echo ÛÛ ÛÛ
echo ÛÛ ÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set /p nom= Votre nom :
if "%nom%"=="" exit
echo %date% %time:~0,-6% %nom% %nbFruits% Fruits %score%>>scores.txt
exit
Mon projet : 5KBR set ligne!ordonneeJoueur!=!debutLigne!º!suiteLigne!
)
if /i "!direction!"=="q" (
set ligne!ordonneeJoueur!=!debutLigne!»!suiteLigne!
)
if /i "!direction!"=="d" (
set ligne!ordonneeJoueur!=!debutLigne!É!suiteLigne!
)
)
if /i "!origine!"=="s" (
if /i "!direction!"=="s" (
set ligne!ordonneeJoueur!=!debutLigne!º!suiteLigne!
)
if /i "!direction!"=="q" (
set ligne!ordonneeJoueur!=!debutLigne!¼!suiteLigne!
)
if /i "!direction!"=="d" (
set ligne!ordonneeJoueur!=!debutLigne!È!suiteLigne!
)
)
if /i "!origine!"=="q" (
if /i "!direction!"=="q" (
set ligne!ordonneeJoueur!=!debutLigne!Í!suiteLigne!
)
if /i "!direction!"=="z" (
set ligne!ordonneeJoueur!=!debutLigne!È!suiteLigne!
)
if /i "!direction!"=="s" (
set ligne!ordonneeJoueur!=!debutLigne!É!suiteLigne!
)
)
if /i "!origine!"=="d" (
if /i "!direction!"=="d" (
set ligne!ordonneeJoueur!=!debutLigne!Í!suiteLigne!
)
if /i "!direction!"=="z" (
set ligne!ordonneeJoueur!=!debutLigne!¼!suiteLigne!
)
if /i "!direction!"=="s" (
set ligne!ordonneeJoueur!=!debutLigne!»!suiteLigne!
)
)
set ligneJoueur%ordonneeJoueur%=!ligne%ordonneeJoueur%!
if /i "%direction%"=="m" (
goto finPartie
)
set destination=
set permission=0
if /i "%direction%"=="q" (
set destination=!ligne%ordonneeJoueur%:~%abscisseJoueurMinoree%,1!
)
if /i "%direction%"=="d" (
set destination=!ligne%ordonneeJoueur%:~%abscisseJoueurMajoree%,1!
)
if /i "%direction%"=="z" (
set destination=!ligne%ordonneeJoueurMinoree%:~%abscisseJoueur%,1!
)
if /i "%direction%"=="s" (
set destination=!ligne%ordonneeJoueurMajoree%:~%abscisseJoueur%,1!
)
if "%destination%"==" " (
set permission=1
)
if "%destination%"=="8" (
set /a nbFruitsTerrain-=1
call :fruitAleatoire
set permission=1
set /a longueurSerpent+=5
if %mouvementsLongueur% geq 5 set mouvementsLongueur=0
if %mouvementsLongueur% lss 5 set /a mouvementsLongueur-=5
set /a nbFruits+=1
)
if "%destination%" neq " " if "%destination%" neq "8" (
goto finPartie
)
if %permission%==0 (
goto jeu
)
set origine=%direction%
set /a nbMouvements+=1
set /a mouvementsLongueur+=1
if %abscisseJoueur% GEQ 1 (
if /i "%direction%"=="q" (
set abscisseJoueur=%abscisseJoueurMinoree%
)
)
if /i "%direction%"=="d" (
set abscisseJoueur=%abscisseJoueurMajoree%
)
if /i "%direction%"=="z" (
set ordonneeJoueur=%ordonneeJoueurMinoree%
)
if /i "%direction%"=="s" (
set ordonneeJoueur=%ordonneeJoueurMajoree%
)
goto jeu
:finPartie
cls
echo.
echo.
echo.
echo.
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo ÛÛ ÛÛ
echo ÛÛ ÛÛ
echo ÛÛ Fin de partie ^^^! ÛÛ
echo ÛÛ ÛÛ
if %nbMouvements% lss 10 (
echo ÛÛ Nombre de mouvements : %nbMouvements% ÛÛ
) else (if %nbMouvements% lss 100 (
echo ÛÛ Nombre de mouvements : %nbMouvements% ÛÛ
) else (if %nbMouvements% lss 1000 (
echo ÛÛ Nombre de mouvements : %nbMouvements% ÛÛ
) else (if %nbMouvements% lss 10000 (
echo ÛÛ Nombre de mouvements : %nbMouvements% ÛÛ
) else (
echo ÛÛ Nombre de mouvements : %nbMouvements% ÛÛ
)
)
)
)
if %nbFruits% lss 10 (
echo ÛÛ Fruits : %nbFruits% ÛÛ
) else (if %nbFruits% lss 100 (
echo ÛÛ Fruits : %nbFruits% ÛÛ
)
)
set /a score=100*%nbFruits%
if %nbMouvements% neq 0 (
set /a score/=%nbMouvements%
)
set /a score+=%nbFruits%
rem Score :
rem (nbFruits/nbMouvements)*100 1*100 maximum 100
rem + nbFruits (13*28-10)/5 maximum 70
rem -----------------------------------------------------------------------------
rem Score 100+70 maximum 170
echo ÛÛ ÛÛ
if %score% lss 10 (
echo ÛÛ Score : %score% ÛÛ
) else (if %score% lss 100 (
echo ÛÛ Score : %score% ÛÛ
) else (if %score% lss 1000 (
echo ÛÛ Score : %score% ÛÛ
)
)
)
echo ÛÛ ÛÛ
echo ÛÛ ÛÛ
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set /p nom= Votre nom :
if "%nom%"=="" exit
echo %date% %time:~0,-6% %nom% %nbFruits% Fruits %score%>>scores.txt
exit
Sans Win7 :
@echo off
setlocal enabledelayedexpansion
goto main
rem SNAKE en Batch
rem Par Jio15
:main
color 42
rem En plus d'être la réponse à la vie, 42 représente "vert sur brun", ce qui est
rem censé vous inspirer un sournois serpent serpentant slictueusement dans l'humus.
set hauteurTerrain=15
set largeurTerrain=30
title Snake
cls
echo.
echo.
echo .:: Snake ::.
echo Par Jio15
echo.
echo.
echo L‚gende :
echo.
echo @ = tˆte du serpent
echo # = corps du serpent
echo Û = mur
echo 8 = fruit
echo.
echo.
echo Contr“les :
echo.
echo z = haut (vous pouvez laisser "Entrer" appuy‚
echo q = gauche pour aller dans la mˆme direction)
echo s = bas
echo d = droite
echo m = abandonner
echo.
pause>nul
cls
set nbFruits=0
set nbMouvements=0
set nbFruitsTerrain=0
set longueurSerpent=10
set mouvementsLongueur=-5
set origine=0
set activerGeneration=1
set abscisseJoueur=3
set /a abscisseJoueurMajoree=%abscisseJoueur%+1
set ordonneeJoueur=3
set ligneNormale=Û
set /a largeurExplorable=%largeurTerrain%-2
for /l %%a in (1,1,%largeurExplorable%) do (
set ligneNormale=!ligneNormale!
)
set ligneNormale=%ligneNormale%Û
set ligneMuree=%ligneNormale: =Û%
set espacesLigne=
set /a nombreEspaces=40-%largeurTerrain%/2
set /a nombreSauts=11-%hauteurTerrain%/2
for /l %%a in (1,1,%nombreEspaces%) do set espacesLigne=!espacesLigne!
set ligne1=%ligneMuree%
set /a hauteurExplorable=%hauteurTerrain%-1
for /l %%a in (2,1,%hauteurExplorable%) do (
set ligne%%a=%ligneNormale%
)
set ligne%hauteurTerrain%=%ligneMuree%
set /a hauteurExplorable=%hauteurTerrain%-2
for /l %%i in (1,1,%hauteurTerrain%) do (
set ligneJoueur%%i=!ligne%%i!
)
set debutLigne=!ligne%ordonneeJoueur%:~0,%abscisseJoueur%!
set suiteLigne=!ligne%ordonneeJoueur%:~%abscisseJoueurMajoree%!
set ligneJoueur%ordonneeJoueur%=%debutLigne%@%suiteLigne%
call :fruitAleatoire
goto jeu
:fruitAleatoire
if "%activerGeneration%"=="0" goto :eof
set /a abscisseAleatoire=%random% %% %largeurExplorable% +2
set /a abscisseAleaMinoree=!abscisseAleatoire!-1
set /a ordonneeAleatoire=%random% %% %hauteurExplorable% +2
if "!ligne%ordonneeAleatoire%:~%abscisseAleaMinoree%,1!" neq " " (
goto fruitAleatoire
)
set debutLigne=!ligne%ordonneeAleatoire%:~0,%abscisseAleaMinoree%!
set suiteLigne=!ligne%ordonneeAleatoire%:~%abscisseAleatoire%!
set ligne%ordonneeAleatoire%=%debutLigne%8%suiteLigne%
set ligneJoueur%ordonneeAleatoire%=!ligne%ordonneeAleatoire%!
set /a nbFruitsTerrain+=1
goto :eof
:jeu
if %nbFruitsTerrain% lss 1 call :fruitAleatoire
if %nbFruitsTerrain% gtr 1 set activerGeneration=0
if %nbFruitsTerrain% equ 1 set activerGeneration=1
set abscisse%nbMouvements%=%abscisseJoueur%
set ordonnee%nbMouvements%=%ordonneeJoueur%
set /a mouvementASupprimer=%nbMouvements%-%longueurSerpent%
set abscisseASupprimer=!abscisse%mouvementASupprimer%!
set ordonneeASupprimer=!ordonnee%mouvementASupprimer%!
set /a abscisseASupprimerMajoree=!abscisseASupprimer!+1
if %mouvementsLongueur% geq 5 (
if "!ligne%ordonneeASupprimer%:~%abscisseASupprimer%,1!"=="8" (
set /a nbFruitsTerrain-=1
call :fruitAleatoire
)
)
set debutLigne=!ligne%ordonneeASupprimer%:~0,%abscisseASupprimer%!
set suiteLigne=!ligne%ordonneeASupprimer%:~%abscisseASupprimerMajoree%!
if %mouvementsLongueur% geq 5 (
set ligne%ordonneeASupprimer%=%debutLigne% %suiteLigne%
)
set ligneJoueur%ordonneeASupprimer%=!ligne%ordonneeASupprimer%!
set /a abscisseJoueurMinoree=%abscisseJoueur%-1
set /a abscisseJoueurMajoree=%abscisseJoueur%+1
set /a ordonneeJoueurMinoree=%ordonneeJoueur%-1
set /a ordonneeJoueurMajoree=%ordonneeJoueur%+1
set debutLigne=!ligne%ordonneeJoueur%:~0,%abscisseJoueur%!
set suiteLigne=!ligne%ordonneeJoueur%:~%abscisseJoueurMajoree%!
set ligneJoueur%ordonneeJoueur%=%debutLigne%@%suiteLigne%
cls
for /l %%a in (1,1,%nombreSauts%) do echo.
for /l %%i in (1,1,%hauteurTerrain%) do (
echo !espacesLigne!!ligneJoueur%%i!
)
echo.
echo Fruits : !nbFruits!
set /p direction=
if /i "!origine!"=="0" (
if /i "!direction!"=="z" (
set ligne!ordonneeJoueur!=!debutLigne!º!suiteLigne!
)
if /i "!direction!"=="q" (
set ligne!ordonneeJoueur!=!debutLigne!Í!suiteLigne!
)
if /i "!direction!"=="s" (
set ligne!ordonneeJoueur!=!debutLigne!º!suiteLigne!
)
if /i "!direction!"=="d" (
set ligne!ordonneeJoueur!=!debutLigne!Í!suiteLigne!
)
)
if /i "!origine!"=="z" (
if /i "!direction!"=="z" (
set ligne!ordonneeJoueur!=!debutLigne!º!suiteLigne!
)
if /i "!direction!"=="q" (
set ligne!ordonneeJoueur!=!debutLigne!»!suiteLigne!
)
if /i "!direction!"=="d" (
set ligne!ordonneeJoueur!=!debutLigne!É!suiteLigne!
)
)
if /i "!origine!"=="s" (
if /i "!direction!"=="s" (
set ligne!ordonneeJoueur!=!debutLigne!º!suiteLigne!
)
if /i "!direction!"=="q" (
set ligne!ordonneeJoueur!=!debutLigne!¼!suiteLigne!
)
if /i "!direction!"=="d" (
set ligne!ordonneeJoueur!=!debutLigne!È!suiteLigne!
)
)
if /i "!origine!"=="q" (
if /i "!direction!"=="q" (
set ligne!ordonneeJoueur!=!debutLigne!Í!suiteLigne!
)
if /i "!direction!"=="z" (
set ligne!ordonneeJoueur!=!debutLigne!È!suiteLigne!
)
if /i "!direction!"=="s" (
set ligne!ordonneeJoueur!=!debutLig
Le code pour tracer une ligne est génial. Par contre le Snake doit être fait pour les basses configs parce que chez moi il est juste injouable.
Bon sinon je pense que tu peux rejoindre. J'vais voir avec les autres si c'est nécessaire. En attendant, propose un plan pour le contenu du chapitre en question.
GRAPHISME
|
|----> Et si le nom d'une variable était une variable ? SETLOCAL ENABLEDELAYEDEXPANSION
|
|----> Comment faire du graphisme (Û,±,², ; début d'explication des méthodes)
|
|----> Créer un canvas, y dessiner, l'afficher
|
|----> TP : Le RPG (réflexion : quelle méthode utiliser ? ; déplacement d'un personnage ; gestion des collisions, objets)
Vu l'utilisation massive de FOR (que ce soit pour lire une map, cf 5KBR ; pour la gestion du graphisme ou pour la sauvegarde), ce chapitre assurerait également la compréhension du reste et pousserait les codeurs à ne plus considérer Batch comme le langage bébête des automatisations.
(PS : ren *.docx *.zip marche aussi bien que for %%F in (*.docx) do ren "%F" "%~nF.zip" et est beaucoup plus court)
Pour le snake, si tu utilises Win7, ne laisse jamais appuyée la touche, mais appuie pas par pas
Maintenant que j'y pense, avez vous parlé de %variable:chaine=remplacement%, de %variable:~lettresAIgnorer,lettresAGarder% et de !%variable%! ?
Merci bien ! Je vais tâcher d'écrire ça dans la semaine, au pire.
EDIT : Jolie et correcte intro ! Par contre EDIT.EXE est infaisable en Batch sans programmes externes, il s'agit de C ou autre langage compilé. Sinon le tout est formidablement écrit et invite parfaitement le lecture à poursuivre sa lecture.
EDIT2: J'ai commencé le graphisme proprement dit. J'ai aussi trouvé le sujet du TP : un jeu de labyrinthe (sans génération de niveaux, hein)
Arrivez-vous à suivre et à comprendre ce que j'écris avec simplement mes explications ?
Wouaw !
Moi qui n'avais jamais rien compris au !%Variable%!, je suis ravi.
Très bon début de chapitre en tout cas. Bonne suite, je ne manquerai en aucun cas le prochain épisode...
C'est très bien. Il y a un petit manque de mise en forme (nottamment l'utilisation de <minicode >) mais on attendra que le chapitre soit fini.
Par contre, ce serait bien d'utiliser le paramètre surligne pour surligner les lignes importantes dans tes codes. Par exemple, à plusieurs reprises, tu mets deux fois le même code, avant et après quelques modifications. Je propose de surligner les nouvelles lignes. Quelques commentaires en plus seraient également appréciés.
Un exemple :
Citation : Jio15
Comme pour les lignes, repartons de notre code simple :
@echo off
setlocal enabledelayedexpansion
title ZOZOR - Le jeu
color 27
rem (Gris clair sur Vert, ça représente Zoz0r dans un pré)
for /l %%x in (1,1,27) do set X%%xY1=*
set joueurX=4
:boucle
set X%joueurX%Y1=@
set ligne=
for /l %%x in (1,1,27) do set ligne=!ligne!!X%%xY1!
cls
echo %ligne%
set X%joueurX%Y1=*
set /p direction=
if /i %direction%==e exit
if /i %direction%==d set /a joueurX+=1
if /i %direction%==q set /a joueurX-=1
if %joueurX% leq 0 set joueurX=1
if %joueurX% geq 28 set joueurX=27
goto boucle
Appliquons d'abord les modifications évidentes :
@echo off
setlocal enabledelayedexpansion
title ZOZOR - Le jeu
color 27
set hauteur=20
set largeur=40
for /l %%x in (1,1,%largeur%) do set X%%xY1=*
set joueurX=4
set joueurY=4
:boucle
set X%joueurX%Y%joueurY%=@
set ligne%joueurY%=
for /l %%x in (1,1,%largeur%) do set ligne%joueurY%=!ligne%joueurY%!!X%%xY%joueurY%!
cls
for /l %%y in (1,1,%hauteur%) do echo:!ligne%%y!
set X%joueurX%Y%joueurY%=*
echo.
set /p direction=
if /i %direction%==e exit
if /i %direction%==d set /a joueurX+=1
if /i %direction%==q set /a joueurX-=1
if /i %direction%==z set /a joueurY-=1
if /i %direction%==s set /a joueurY+=1
if %joueurX% leq 0 set joueurX=1
if %joueurX% geq %largeur% set joueurX=%largeur%
if %joueurY% leq 0 set joueurY=1
if %joueurY% geq %hauteur% set joueurY=%hauteur%
goto boucle
En surlignant les nouvelles lignes :
@echo off
setlocal enabledelayedexpansion
title ZOZOR - Le jeu
color 27
set hauteur=20
set largeur=40
for /l %%x in (1,1,%largeur%) do set X%%xY1=*
set joueurX=4
set joueurY=4
:boucle
set X%joueurX%Y%joueurY%=@
set ligne%joueurY%=
for /l %%x in (1,1,%largeur%) do set ligne%joueurY%=!ligne%joueurY%!!X%%xY%joueurY%!
cls
for /l %%y in (1,1,%hauteur%) do echo:!ligne%%y!
set X%joueurX%Y%joueurY%=*
echo.
set /p direction=
if /i %direction%==e exit
if /i %direction%==d set /a joueurX+=1
if /i %direction%==q set /a joueurX-=1
if /i %direction%==z set /a joueurY-=1
if /i %direction%==s set /a joueurY+=1
if %joueurX% leq 0 set joueurX=1
if %joueurX% geq %largeur% set joueurX=%largeur%
if %joueurY% leq 0 set joueurY=1
if %joueurY% geq %hauteur% set joueurY=%hauteur%
goto boucle
Magnifique ! Mais tu parle un peu vite Mais les codes sont un peu confus.
Je pense en particulier au moment où, au tout début de la section sur les pixels, tu dis :
Citation : Jio15
Appliquons d'abord les modifications évidentes :
et que tu suis par un code. Ce deuxième script étant quasi le même que le précédent j'ai eu - un peu - de mal à trouver les lignes changées... Pourrais-tu trouver un moyen de mettre les lignes importantes en évidence ?
EDIT: je viens d'actualiser et l'idée a déjà été énoncée ;p désolé pour le doublon...