Nouveau projet, nouveau souci !!! help !!!

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
vimper
Batcheur occasionnel
Messages : 7
Enregistré le : 01 juin 2019 14:34

Nouveau projet, nouveau souci !!! help !!!

Message par vimper »

voila je me lance dans un jeu de morpion pour m'enlever des souci avec "Random" je fais un jeu à 2 joueurs je met mon code pour mieux explique si c'est faisable pour le moment ça ne marche pas(pour éviter toutes critique ,lol).

Code : Tout sélectionner

@echo off
title Morpion
echo date du jour :%date%
echo heure courante :%time%


cls
:intro
mode con cols=50 lines=8
color 5a
cls
echo vous allez jouer au jeu de morpion
echo le but du jeu est d'aligner 3 cases qui se suivent
echo ces cases peuvent etre alignees soit:
echo horizontalement , verticalement ou en diagonale
timeout 10
:nom
mode con cols=30 lines=14
color 3e
echo Bonjour et bienvenue joueur1
echo Ecris ton pseudo:
set /p joueur1=
echo merci %joueur1% 
echo.
echo Bonjour et bienvenue joueur2
echo Ecris ton pseudo:
set /p joueur2=
echo merci %joueur2%
timeout 5

:presentation
mode con cols=35 lines=25
color 3f
cls
echo Joueur1:%joueur1%   Joueur2:%joueur2%
echo.
echo    choisi un numero de case
echo  ÉÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍ»                                         ::-------------------------------------------
echo  º       º º       º º       º                                          ::|                                                  |
echo  º   1   º º   2   º º   3   º                                        ::|                                                  |                  
echo  º       º º       º º       º                                          ::|                                                  |
echo  ÈÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍͼ                                     ::|                 map de référence       |
echo  ÉÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍ»                                        ::|                                                  |
echo  º       º º       º º       º       :: <--------------------------|                 pour le jeu                 |
echo  º   4   º º   5   º º   6   º                                       ::|                                                   |
echo  º       º º       º º       º                                         ::|                 du morpion                 |
echo  ÈÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍͼ                                     ::|                 qui dois être               |
echo  ÉÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍ»                                        ::|                  modifié par               |
echo  º       º º       º º       º                                         ::|                  caseXx et caseXo        |
echo  º   7   º º   8   º º   9   º                                       ::|                  et je ne sais pas         |
echo  º       º º       º º       º                                         ::|                   comment  faire?        |
echo  ÈÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍͼ                                     ::--------------------------------------------

:play
echo  %joueur1% choisi une case ?
set /p %case1%=

if %case1% equ 1 goto :case1x
if %case1% equ 2 goto :case2x
if %case1% equ 3 goto :case3x
if %case1% equ 4 goto :case4x
if %case1% equ 5 goto :case5x
if %case1% equ 6 goto :case6x
if %case1% equ 7 goto :case7x
if %case1% equ 8 goto :case8x
if %case1% equ 9 goto :case9x

echo %joueur2% choisi une case ?
set /p %case2%=

if %case2% equ 1 goto :case1o
if %case2% equ 2 goto :case2o
if %case2% equ 3 goto :case3o
if %case2% equ 4 goto :case4o
if %case2% equ 5 goto :case5o
if %case2% equ 6 goto :case6o
if %case2% equ 7 goto :case7o
if %case2% equ 8 goto :case8o
if %case2% equ 9 goto :case9o

:case1x
echo  ÉÍÍÍÍÍÍÍ» 
echo  ºxxxxxxxº 
echo  ºxxxxxxxº 
echo  ºxxxxxxxº 
echo  ÈÍÍÍÍÍÍͼ 

pause
:case2x
echo            ÉÍÍÍÍÍÍÍ» 
echo            ºxxxxxxxº 
echo            ºxxxxxxxº 
echo            ºxxxxxxxº 
echo            ÈÍÍÍÍÍÍͼ

:case3x
echo                      ÉÍÍÍÍÍÍÍ»
echo                      ºxxxxxxxº
echo                      ºxxxxxxxº
echo                      ºxxxxxxxº
echo                      ÈÍÍÍÍÍÍͼ

:case4x
echo.
echo.
echo.
echo.
echo.
echo  ÉÍÍÍÍÍÍÍ»
echo  ºxxxxxxxº 
echo  ºxxxxxxxº 
echo  ºxxxxxxxº 
echo  ÈÍÍÍÍÍÍͼ

:case5x
echo.
echo.
echo.
echo.
echo.
echo            ÉÍÍÍÍÍÍÍ» 
echo            ºxxxxxxxº 
echo            ºxxxxxxxº 
echo            ºxxxxxxxº 
echo            ÈÍÍÍÍÍÍͼ

:case6x
echo.
echo.
echo.
echo.
echo.
echo                      ÉÍÍÍÍÍÍÍ»
echo                      ºxxxxxxxº
echo                      ºxxxxxxxº
echo                      ºxxxxxxxº
echo                      ÈÍÍÍÍÍÍͼ

:case7x
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo  ÉÍÍÍÍÍÍÍ»
echo  ºxxxxxxxº 
echo  ºxxxxxxxº 
echo  ºxxxxxxxº 
echo  ÈÍÍÍÍÍÍͼ 

:case8x
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo            ÉÍÍÍÍÍÍÍ» 
echo            ºxxxxxxxº 
echo            ºxxxxxxxº
echo            ºxxxxxxxº
echo            ÈÍÍÍÍÍÍͼ

:case9x
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                      ÉÍÍÍÍÍÍÍ»
echo                      ºxxxxxxxº
echo                      ºxxxxxxxº
echo                      ºxxxxxxxº
echo                      ÈÍÍÍÍÍÍͼ            

:case1o
echo  ÉÍÍÍÍÍÍÍ»
echo  ºoooooooº 
echo  ºoooooooº 
echo  ºoooooooº 
echo  ÈÍÍÍÍÍÍͼ

:case2o
echo            ÉÍÍÍÍÍÍÍ» 
echo           ºoooooooº
echo            ºoooooooº
echo            ºoooooooº
echo            ÈÍÍÍÍÍÍͼ

:case3o
echo                      ÉÍÍÍÍÍÍÍ»
echo                     ºoooooooº
echo                     ºoooooooº
echo                      ºoooooooº
echo                      ÈÍÍÍÍÍÍͼ

:case4o
echo.
echo.
echo.
echo.
echo.
echo  ÉÍÍÍÍÍÍÍ»
echo  ºoooooooº 
echo  ºoooooooº
echo  ºoooooooº 
echo  ÈÍÍÍÍÍÍͼ

:case5o
echo.
echo.
echo.
echo.
echo.
echo            ÉÍÍÍÍÍÍÍ» 
echo            ºoooooooº
echo            ºoooooooº
echo            ºoooooooº
echo            ÈÍÍÍÍÍÍͼ

:case6o
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                      ÉÍÍÍÍÍÍÍ»
echo                      ºoooooooº
echo                      ºoooooooº
echo                      ºoooooooº
echo                      ÈÍÍÍÍÍÍͼ

:case7o
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo  ÉÍÍÍÍÍÍÍ»
echo  ºoooooooº
echo  ºoooooooº
echo  ºoooooooº
echo  ÈÍÍÍÍÍÍͼ

:case8o
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo            ÉÍÍÍÍÍÍÍ» 
echo            ºoooooooº 
echo            ºoooooooº
echo            ºoooooooº
echo            ÈÍÍÍÍÍÍͼ

:case9o
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo                      ÉÍÍÍÍÍÍÍ»
echo                      ºoooooooº
echo                      ºoooooooº
echo                      ºoooooooº
echo                      ÈÍÍÍÍÍÍͼ
je voulais mettre des case en couleur mais avec batch on peu pas on as droit que couleur fond et couleur texte pour ca que je crée les caseXx
et caseXo j'ai vu qu'il existait un programme batbox.exe mais avant de passer là dessus je voudrais tester les possibilités en batch pur et dur (enfin je me comprend !!).
le progrès est une chose magnifique quand c'est bien utilisé.mais quand ça vas trop vite on se perd et les vieilles choses du passé refont surface et sont utilisé comme des idées novatrices!!!!
Flammrock
Batcheur occasionnel
Messages : 2
Enregistré le : 08 août 2019 00:57

Re: Nouveau projet, nouveau souci !!! help !!!

Message par Flammrock »

Tu code pas de la bonne façon, regarde un peu ce code :

Code : Tout sélectionner

@echo off
setlocal EnableDelayedExpansion
title Morpion - Par Flammrock

rem On définit la taille de notre morpion (ici du 3x3)
set Morpion.Size=3

rem On définit le nombre de croix ou de ronds à aligner pour gagner (de base c'est 3)
set Morpion.AlignVictory=3

rem On appelle une "fonction" et on lui passe le nom de la variable qui contiendra toutes les données
call :Morpion.Create mon_objet_morpion !Morpion.Size! !Morpion.AlignVictory!

rem On dessine notre morpion
call :Morpion.Draw mon_objet_morpion

rem On définit le nombre de tour et on l'initialise à 0, on va l'augmenter de 1 à chaque fois qu'un joueur va jouer
set Morpion.Round=0



rem On définit nos 2 joueurs (on pourrait par exemple utiliser un set /p ici ;) )
rem (CODE)
rem 
rem    set /p temp.name=Nom du Joueur 1:
rem    set /p temp.symbol=Symbole du Joueur 1:
rem    call :Morpion.Add_Player mon_objet_morpion "!temp.name!" "!temp.symbol!"
rem 
rem    set /p temp.name=Nom du Joueur 2:
rem    set /p temp.symbol=Symbole du Joueur 2:
rem    call :Morpion.Add_Player mon_objet_morpion "!temp.name!" "!temp.symbol!"
rem 
rem (/CODE)

rem comme c'est un "exemple", je met directe des noms de joueurs lol (pas le temps de niaiser)
call :Morpion.Add_Player mon_objet_morpion "Vimper" "X"
call :Morpion.Add_Player mon_objet_morpion "Flammrock" "O"
rem petite remarque: on pourrait ajouter autant de joueur que l'on veut xDDD





rem On va loop à l'infini jusqu'à ce qu'un des joueurs gagne (ou pas, s'il y a match nul)
:game

    rem On efface tout
	cls
	
	rem On affiche le tour actuel
	echo;Tour !Morpion.Round!

    rem On sélectionne le joueur qui doit jouer
	call :Morpion.Get_Player mon_objet_morpion mon_joueur !Morpion.Round!
	
	rem On dit c'est à qui de joueur
	echo;"!mon_joueur.name!" doit jouer (il a les "!mon_joueur.symbol!")
	
	rem On dessine la grille
	call :Morpion.Draw mon_objet_morpion

	rem On fait jouer le joueur en lui demandant à quel case il veut mettre son symbole
	call :Morpion.Play_Player mon_objet_morpion mon_joueur
	
	rem On capture l'erreur et on la traite suivant sa valeur
	if "%errorlevel%"=="1" (
	    echo;[Erreur] Veuillez saisir un nombre positif valide de l'ID d'une case
	) else if "%errorlevel%"=="2" (
	    echo;[Erreur] Nombre trop grand
	) else if "%errorlevel%"=="3" (
	    echo;[Erreur] Case non vide
	)
	if not "%errorlevel%"=="0" (
	    set /p ".=Appuyer sur une touche pour continuer de jouer..."<nul
		pause>nul
		goto :game
	)
	
	rem On vérifie l'état actuel du morpion,
	rem on check si toutes les cases sont pleines ou pas
	rem et on regarde s'il n'y a pas éventuellement un gagnant
	call :Morpion.Check mon_objet_morpion
	
	rem On regarde s'il y a un gagnant ou s'il y a match nul
	if "%errorlevel%"=="1" (
	    rem Si on arrive là, c'est qu'un des joueurs a gagné, gg à lui xD
		
	    rem On efface tout
	    cls
		
		rem On affiche qui a gagné (on met pas le nom du joueur dans le cas où les joueurs jouent en équipent)
		rem On aurait pu mettre que le joueur "Vimper" avait les "O" comme le joueur "Flammrock" et dans ce cas, il aurait été dans
		rem la même équipe
	    echo;Les "!mon_objet_morpion.Victory!" sont les gagnants
		echo;
		
		
	) else if "%errorlevel%"=="2" (
	    rem Par contre si on arrive là, c'est que c'est match nul
	   
	    rem On efface tout
	    cls
		
		rem On affiche qui a gagné (on met pas le nom du joueur dans le cas où les joueurs jouent en équipent)
		rem On aurait pu mettre que le joueur "Vimper" avait les "O" comme le joueur "Flammrock" et dans ce cas, il aurait été dans
		rem la même équipe
	    echo;MATCH NUL
		echo;
		
	)
	if not "%errorlevel%"=="0" (
	    rem On dessine la grille
	    call :Morpion.Draw mon_objet_morpion
		
		rem On demande si les joueurs veulent rejouer
		set /p "continue=Souhaitez-vous continuer ? (y/n)"
		
		if /i "!continue!"=="y" (
		  rem Si on arrive là, les joueurs souhaitent rejouer
		  rem donc on réinitialise le jeu
		  call :Morpion.Reset mon_objet_morpion
		  
		  rem On n'oublie pas de reset les autres variables (bon y'en a qu'une ici mdr)
		  set Morpion.Round=0
		  
		  rem Et hop, on retourne au label :game
		  goto :game
		  
		) else (
		   rem Sinon, on quitte
		   exit
		)
		
		
	)
	
	
	
    rem On passe au tour suivant
    set /a Morpion.Round+=1
	
goto :game




rem On veut surtout pas arriver ici, si c'est le cas, on quitte directe pour ne pas faire planter le script
pause>nul&exit


:Morpion.Create <output:object> <input:size> <input:alignvictory>

    rem On définit la taille de notre morpion
    set %~1.Size=%~2
	
	rem On définit le nombre de croix à aligner pour gagner
	set %~1.AlignVictory=%~3
  
    rem On définit la longueur (les indices commencent généralement à 0, donc il faut prendre l'habitude dès maintenat ;) )
    set /a %~1.Length=%~2-1
  
    rem On défnit le nombre de joueur qu'il y aura, pour l'instant on met 0 car là il a pas de joueurs
	set %~1.Players.Length=0
  
    rem On remplie chaque case notre grille d'un espace
    call :Morpion.Reset "%~1"

    rem la fonction c'est terminé, on quitte la fonction
	rem et on revient là où on en était avant d'appeler cette "fonction" avec le call
exit /b 0


:Morpion.Reset <output:object>
    
    rem On créé notre grille avec les coordonnées x et y
    for /l %%y in (0,1,!%~1.Length!) do (
        for /l %%x in (0,1,!%~1.Length!) do (
	
	        rem On initialise chaque case avec un espace (les ronds et les croix c'est pour plus tard)
            set "%~1.Grid[%%y][%%x]= "
	  
        )
    )
    
    
    rem la fonction c'est terminé, on quitte la fonction
	rem et on revient là où on en était avant d'appeler cette "fonction" avec le call
exit /b 0



:Morpion.Draw <input:object>

    rem voici ce qu'on cherche à dessiner:
    rem ,-------,
    rem |       |
    rem |   X   |   . . .
    rem |       |
    rem '-------'
    rem    .
    rem    .
    rem    .

	rem L'indice de la case que l'on traite
    set index=1

    for /l %%y in (0,1,!%~1.Length!) do (
  
        rem On stocke d'abord tout dans cette variable
		rem (on dessine tout ça ligne par ligne, ici c'est case par case mais l'idée est la même)
        set line1=
	    set line2=
	    set line3=
	    set line4=
	    set line5=
  
        for /l %%x in (0,1,!%~1.Length!) do (
		
		    rem Je pense que juste ça suffit (parce qu'un morpion à 1000 cases LOL)
		    set "space=      "
		    if !index! gtr 9 set "space=     "
		    if !index! gtr 99 set "space=    "
		    if !index! gtr 999 set "space=   "

            rem Rien que là, on arrive un voir la case et à voir un peu près à quoi ça va ressembler
	        set "line1=!line1!,-------"
	        set "line2=!line2!|!space!!index!"
	        set "line3=!line3!|   !%~1.Grid[%%y][%%x]!   "
	        set "line4=!line4!|       "
	        set "line5=!line5!'-------"
	  
	        set /a index+=1
	  
        )
	
	    set "line1=!line1!,"
	    set "line2=!line2!|"
	    set "line3=!line3!|"
	    set "line4=!line4!|"
	    set "line5=!line5!'"
	
	    rem On affiche la case
	    echo;!line1!
	    echo;!line2!
	    echo;!line3!
        echo;!line4!
	
	
    )
  
    rem On affiche la ligne 5 ici car la ligne 1 fait déjà office du bas (par répétition)
    echo;!line5!


    rem la fonction c'est terminé, on quitte la fonction
	rem et on revient là où on en était avant d'appeler cette "fonction" avec le call
exit /b 0



:Morpion.Add_Player <output:object> <input:name> <input:symbol>
    
	rem On ajoute notre joueur
	set "%~1.Players[!%~1.Players.Length!].name=%~2"
	set "%~1.Players[!%~1.Players.Length!].symbol=%~3"
	
    rem On incrémente de 1 le nombre de joueurs
    set /a %~1.Players.Length+=1
    
	rem la fonction c'est terminé, on quitte la fonction
	rem et on revient là où on en était avant d'appeler cette "fonction" avec le call
exit /b 0


:Morpion.Get_Player <output:object> <output:object_player> <input:round>
    
	rem C'est juste un peu de math, c'est de l'arithmétique modulaire
	rem (un truc que l'on utilise tout les jours sans qu'on s'en rende compte)
    set /a temp.ID=%~3 %% !%~1.Players.Length!
	
	rem On transforme la variable temp.ID en %%i (petite astuce c'est cadeau)
	for %%i in ("!temp.ID!") do (
	
	    rem On copie l'objet et on le met dans l'objet
		rem que l'on doit renvoyer (je sais pas si t'es à l'aise avec ce genre de voca)
	    set %~2.name=!%~1.Players[%%~i].name!
		set %~2.symbol=!%~1.Players[%%~i].symbol!
		
	)
	


    rem la fonction c'est terminé, on quitte la fonction
	rem et on revient là où on en était avant d'appeler cette "fonction" avec le call
exit /b 0


:Morpion.Play_Player <output:object> <output:object_player>

    rem On demande au joueur de rentrer l'ID d'une case
    set /p temp.input=ID Case:
	
	rem On vérifie s'il s'agit d'un nombre positif
	set /a temp.input=!temp.input!-1
	
	rem Si c'est pas un nombre positif, on retourne une erreur qui sera "capturer" dans la "boucle infinie" du jeu xDD
	if "!temp.input!"=="-1" exit /b 1
	
	rem On vérifie que ce nombre rentré est inférieur au nombre de case
	set /a temp.size=!%~1.Size!*!%~1.Size!
	if !temp.input! geq !temp.size! exit /b 2
	
	rem On convertit l'indice de la case en coordonnées x et y
	set /a temp.X=!temp.input! %% !%~1.Size!
	set /a temp.Y=!temp.input! / !%~1.Size!
	
	
	for %%x in ("!temp.X!") do for %%y in ("!temp.Y!") do (
	    
		rem Si la case n'est pas vide, on retourne une erreur
		if not "!%~1.Grid[%%~y][%%~x]!"==" " exit /b 3
		
		rem Si on arrive là, on peut supposer que tout est correct
		rem et donc on met dans la case le symbole du joueur qui est entrain de jouer
		set "%~1.Grid[%%~y][%%~x]=!%~2.symbol!"
		
	)
	
	
    rem la fonction c'est terminé, on quitte la fonction
	rem et on revient là où on en était avant d'appeler cette "fonction" avec le call
exit /b 0



:Morpion.Check <output:object>

    rem On vérifie tout d'abord si toutes les cases du morpion sont déjà pleines, dans ce cas c'est match nul
	rem et on renvoie 2
	set index=0
	for /l %%y in (0,1,!%~1.Length!) do (
	
	    for /l %%x in (0,1,!%~1.Length!) do (
		
		    rem On compte chaque case vide
			if "!%~1.Grid[%%y][%%x]!"==" " set /a index+=1
		
		)
		
    )
	
	rem Si la variable index est égale à 0, c'est qu'il n'y pas plus de cases vides,
	rem donc aucun des joueurs peu jouer, donc la partie fini sur une nul
	if "!index!"=="0" exit /b 2

    rem On vérifie d'abord sur les lignes
	rem [X][X][X] . . . .
	rem [O][O][O]
	rem [V][V][V]
	rem  .        .
	rem  .          .
	rem  .            .
	rem  .              .
	for /l %%y in (0,1,!%~1.Length!) do (
	
	    set temp.victory.symbol=
	    set temp.victory.count=0
		
        for /l %%x in (0,1,!%~1.Length!) do (
		    
			if "!%~1.Grid[%%y][%%x]!"==" " (
			   set temp.victory.symbol=
	           set temp.victory.count=0
			) else if "!%~1.Grid[%%y][%%x]!"=="!temp.victory.symbol!" (
			    set /a temp.victory.count+=1
			) else (
			    set temp.victory.count=1
				set "temp.victory.symbol=!%~1.Grid[%%y][%%x]!"
			)
			
		)
		
		rem Si on a compté successivement un nombre de fois le même symbole supérieur ou égale à !%~1.AlignVictory!, alors
		rem le ou les joueurs correspondant à ce symbole ont gagné
		if !temp.victory.count! geq !%~1.AlignVictory! (
		    set "%~1.Victory=!temp.victory.symbol!"
			exit /b 1
		)
		
    )		
	
	rem Si on arrive là, c'est qu'il n'y pas encore de gagnants
	rem Du coup on vérifie sur les colonnes
	rem [X][o][v] . . . .
	rem [x][O][v]
	rem [x][o][V]
	rem  .        .
	rem  .          .
	rem  .            .
	rem  .              .
	for /l %%x in (0,1,!%~1.Length!) do (
	
	    set temp.victory.symbol=
	    set temp.victory.count=0
		
        for /l %%y in (0,1,!%~1.Length!) do (
		    
			if "!%~1.Grid[%%y][%%x]!"==" " (
			   set temp.victory.symbol=
	           set temp.victory.count=0
			) else if "!%~1.Grid[%%y][%%x]!"=="!temp.victory.symbol!" (
			    set /a temp.victory.count+=1
			) else (
			    set temp.victory.count=1
				set "temp.victory.symbol=!%~1.Grid[%%y][%%x]!"
			)
			
		)
		
		rem Si on a compté successivement un nombre de fois le même symbole supérieur ou égale à !%~1.AlignVictory!, alors
		rem le ou les joueurs correspondant à ce symbole ont gagné
		if !temp.victory.count! geq !%~1.AlignVictory! (
		    set "%~1.Victory=!temp.victory.symbol!"
			exit /b 1
		)
		
    )
	
	rem Et si on est toujours là (oui monsieur), ba on en profite pour vérifier les diagonals
	for /l %%y in (0,1,!%~1.Length!) do (
	
	    for /l %%x in (0,1,!%~1.Length!) do (
		
		    set temp.victory.symbol=
	        set temp.victory.count=0
			
			set temp.X=%%x
			set temp.Y=%%y

			rem On check les diagonales descendantes
			rem [X][ ][ ] . . . .
			rem [ ][X][ ]
		    rem [ ][ ][X]
			rem  .        .
			rem  .          .
			rem  .            .
			rem  .              .
			for /l %%i in (1,1,!%~1.AlignVictory!) do (
			
			
			    for %%w in ("!temp.Y!") do for %%v in ("!temp.X!") do (
				
				    if "!%~1.Grid[%%~w][%%~v]!"=="" (
			            set temp.victory.symbol=
	                    set temp.victory.count=0
				    ) else if "!%~1.Grid[%%~w][%%~v]!"==" " (
			            set temp.victory.symbol=
	                    set temp.victory.count=0
			        ) else if "!%~1.Grid[%%~w][%%~v]!"=="!temp.victory.symbol!" (
			            set /a temp.victory.count+=1
			        ) else (
			            set temp.victory.count=1
				        set "temp.victory.symbol=!%~1.Grid[%%~w][%%~v]!"
			        )
				
				)
			    set /a temp.X+=1
			    set /a temp.Y+=1
			
			)
			
			rem Si on a compté successivement un nombre de fois le même symbole supérieur ou égale à !%~1.AlignVictory!, alors
			rem le ou les joueurs correspondant à ce symbole ont gagné
			if !temp.victory.count! geq !%~1.AlignVictory! (
		        set "%~1.Victory=!temp.victory.symbol!"
			    exit /b 1
		    )
			
			
			set temp.victory.symbol=
	        set temp.victory.count=0
			
			set temp.X=%%x
			set temp.Y=%%y
			
			rem On check les diagonales ascendantes
			rem . . . . [ ][ ][X]
			rem         [ ][X][ ]
			rem         [X][ ][ ]
			rem        .       .
			rem      .         .
			rem    .           .
			rem  .             .
			for /l %%i in (1,1,!%~1.AlignVictory!) do (
			
				for %%w in ("!temp.Y!") do for %%v in ("!temp.X!") do (
				
				    if "!%~1.Grid[%%~w][%%~v]!"=="" (
			            set temp.victory.symbol=
	                    set temp.victory.count=0
				    ) else if "!%~1.Grid[%%~w][%%~v]!"==" " (
			            set temp.victory.symbol=
	                    set temp.victory.count=0
			        ) else if "!%~1.Grid[%%~w][%%~v]!"=="!temp.victory.symbol!" (
			            set /a temp.victory.count+=1
			        ) else (
			            set temp.victory.count=1
				        set "temp.victory.symbol=!%~1.Grid[%%~w][%%~v]!"
			        )
				
				)
			  
			    set /a temp.X-=1
			    set /a temp.Y+=1
				
			)
			
			rem Si on a compté successivement un nombre de fois le même symbole supérieur ou égale à !%~1.AlignVictory!, alors
			rem le ou les joueurs correspondant à ce symbole ont gagné
			if !temp.victory.count! geq !%~1.AlignVictory! (
		        set "%~1.Victory=!temp.victory.symbol!"
			    exit /b 1
		    )
		
		)
	
	)


    rem la fonction c'est terminé, on quitte la fonction
	rem et on revient là où on en était avant d'appeler cette "fonction" avec le call
exit /b 0
Je met un lien pastebin pour une meilleure colorisation syntaxique : https://pastebin.com/2ibCphnS
Je t'invite vivement à tester le code et à lire chaque commentaire et à essayer de comprendre comment le code fonctionne

Ensuite, il est possible de mettre de la couleur différente en pure batch, petit exemple :

Code : Tout sélectionner

@echo off
setlocal EnableDelayedExpansion

rem On initialise le hack
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
  set "DEL=%%a"
)

echo;WHAAOUUU INcrooyable

call :ColorText 0a "green" 0
call :ColorText 0C "red" 0
call :ColorText 0b "cyan" 1

call :ColorText 19 "blue" 0
call :ColorText 2F "white" 0
call :ColorText 4e "yellow" 1

echo;Super cool

pause>nul&exit

:ColorText <Color> <Text> <BreakLine>
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
if "%~3"=="1" echo;
goto :eof
Plus d'info ici : stackoverflow.com/questions/2048509/how-to-echo-with-different-colors-in-the-windows-command-line


p.s. : passe nous voir sur batch.xoo.it :D
p.s. 2 : un peu bête de pouvoir mettre seulement un lien
vimper
Batcheur occasionnel
Messages : 7
Enregistré le : 01 juin 2019 14:34

Re: Nouveau projet, nouveau souci !!! help !!!

Message par vimper »

salut Flammrock, merci de ta réponse.
le code que tu propose pour moi qui apprend le bacth est déjà trop évolue ,
je comprend pas tout et je pense que je dois médite (non plutôt faire un pèlerinage . :D )
merci encore.

p.s. : passe nous voir sur batch.xoo.it :D

pour info je suis inscrit aussi dessus depuis moins longtemps qu'ici mais j'y suis :D
le progrès est une chose magnifique quand c'est bien utilisé.mais quand ça vas trop vite on se perd et les vieilles choses du passé refont surface et sont utilisé comme des idées novatrices!!!!
Répondre