Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
Jeu de GO 0.1
Auteur Message
Répondre en citant
Message Jeu de GO 0.1 
Bonjour, voici un jeu de go (pour ceux qui ne connaissent pas : Wiki).

Ce jeu est vraiment paradoxale: il n'a que 3 règles ; mais est le plus dur de tous les jeux, les programmes actuels ne battent même pas un amateur !
C'est un véritable enfer à développer Rolling Eyes

A la base prévu pour être en C/C++ mais abandonné à cause de la complexité de SDL Rolling Eyes

Ce jeu à encore plein de bugs, inutile de les signaler.


Code:

@Echo Off
Setlocal Enabledelayedexpansion
BatBox || Call :BatBox

:: Taille ::

   Set LignePlateau=19
   Set/A LignePlateauChar=LignePlateau*2
   Set/A LigneMilieuPlateau=(LignePlateau / 2) + 1
   Set/A LigneMessageChar=%LignePlateauChar%+2+2
   Set/A CharDebug=%LigneMessageChar%+2
   Set/A CharConsoleDebug=%CharDebug%+1

::: IA :::   

:: Variables Simples ::

   Set NombreCoups=0
   Set NombreGroupe=0
   Set/A MaxGroupePion=LignePlateau * LignePlateau
   
:: Variabes Tableaux ::

   For /L %%i In (1,1,%LignePlateau%) Do (
      For /L %%j In (1,1,%LignePlateau%) Do (
         Set LignePionType[%%i,%%j]=0
         Set LigneGroupeNumero[%%i,%%j]=0
      )
   )

::: GUI :::

:: Characteres ::

   Set "EspacePlateau=  "
   
   Set Vide=255

   Set "CharPion[1]=88"
   Set "CharPion[2]=79"
   Set "Etoile=158"
   
   Set AngleGH=218
   Set AngleDH=191
   Set AngleGB=192
   Set AngleDB=217
   
   Set BordH=194
   Set BordG=195
   Set BordD=180
   Set BordB=193
   
   Set Milieu=197
   
   Set LigneH=196
   Set LigneV=179
   
   For /L %%i In (1,1,%LignePlateau%) Do (
      For /L %%j In (1,1,%LignePlateau%) Do Set "LignePionChar[%%j,%%i]=%Milieu%"
   )
   For /L %%i In (1,1,%LignePlateau%) Do (
      Set LignePionChar[%%i,1]=%BordH%
      Set LignePionChar[%%i,%LignePlateau%]=%BordB%
      Set LignePionChar[1,%%i]=%BordG%
      Set LignePionChar[%LignePlateau%,%%i]=%BordD%
   )
   Set "LignePionChar[1,1]=%AngleGH%"
   Set "LignePionChar[%LignePlateau%,1]=%AngleDH%"
   Set "LignePionChar[1,%LignePlateau%]=%AngleGB%"
   Set "LignePionChar[%LignePlateau%,%LignePlateau%]=%AngleDB%"

:: Etoiles ::
   
   If %LignePlateau% GTR 5 Set a=2
   If %LignePlateau% GTR 7 Set a=3
   If %LignePlateau% GTR 12 Set a=4

   Set/A b=%LignePlateau%-%a%+1

   Set/A Mod=%LignePlateau% %% 2
   If Not %Mod%==0 (
      Set "LignePionChar[%LigneMilieuPlateau%,%LigneMilieuPlateau%]=%Etoile%"
      If %LignePlateau% GTR 8 (
         Set "LignePionChar[%LigneMilieuPlateau%,%a%]=%Etoile%"
         Set "LignePionChar[%a%,%LigneMilieuPlateau%]=%Etoile%"
         Set "LignePionChar[%a%,%LigneMilieuPlateau%]=%Etoile%"
         Set "LignePionChar[%b%,%LigneMilieuPlateau%]=%Etoile%"
         Set "LignePionChar[%LigneMilieuPlateau%,%b%]=%Etoile%"
      )
   )
   Set "LignePionChar[%a%,%a%]=%Etoile%"
   Set "LignePionChar[%b%,%a%]=%Etoile%"
   Set "LignePionChar[%a%,%b%]=%Etoile%"
   Set "LignePionChar[%b%,%b%]=%Etoile%"

:: Couleurs ::

   Set Fond=F
   Set CouleurPion[1]=0x%Fond%A
   Set CouleurPion[2]=0x%Fond%9
   Set Important=0x%Fond%C
   Set CouleurNormal=0x%Fond%0
   Set NomCouleurPion[1]=Vert
   Set NomCouleurPion[2]=Bleu

Color %CouleurNormal:~2,2%

:BoucleChoixCouleur

   Cls
   BatBox /C %CouleurPion[1]% /D "Les %NomCouleurPion[1]% (" /A %CharPion[1]% /D ") = 1"
   Echo.
   BatBox /C %CouleurPion[2]% /D "Les %NomCouleurPion[2]% (" /A %CharPion[2]% /D ") = 2"
   Echo.
   BatBox /C %CouleurNormal%
   Set/P "NombreJoueur=Choisissez votre numero de couleur: "
   Set NombreJoueurActuel=%NombreJoueur%

If Not "%NombreJoueur%"=="1" If Not "%NombreJoueur%"=="2" Goto BoucleChoixCouleur

:: Plateau ::
Cls
Set "a= ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Set "b=%EspacePlateau%"
Set "Esp= "
Set "Ligne1=/D "%EspacePlateau%""

For /L %%i In (1,1,%LignePlateau%) Do (
   Set "b=!b!!a:~%%i,1! "
   Set "Ligne1=!Ligne1! /A %LigneV% /A %Vide%"
)

Echo.
BatBox /D "%b%" /A 10
For /L %%i In (1,1,%LignePlateau%) Do (
   Set "Ligne2="
   For /L %%j In (1,1,%LignePlateau%) Do (
      Set "Ligne2=!Ligne2!/A !LignePionChar[%%j,%%i]! "
      If Not %%j==%LignePlateau% Set "Ligne2=!Ligne2!/A %LigneH% "
   )
   If %%i==10 Set "Esp="
   BatBox /D "!Esp!%%i" !Ligne2! /D "!Esp!%%i" /A 10
   If Not %%i==%LignePlateau% BatBox !Ligne1! /A 10
)
BatBox /D "%b%"  /A 10
Echo.

:: Debug ::
BatBox /G 0 %CharDebug% /D "Debug"

::   Boucle Infinie   ::
:BoucleInfinie
   
   :: Joueur Devant Jouer
   BatBox /G 2 %LigneMessageChar% /C !CouleurPion[%NombreJoueurActuel%]! /D "!NomCouleurPion[%NombreJoueurActuel%]!(" /A !CharPion[%NombreJoueurActuel%]! /D "): Doit jouer !           "
   
   ::   Boucle Suicide Interdit   ::
   :BoucleSuicideInterdit
   
      ::   Detection Pion Existant    ::
      :DetectionPionExistant

         ::   Detection Touché  ::
         :DetectionTouche
      
            For /F "tokens=1,2,3 delims=:" %%A In ('BatBox /m') Do (
               Set CharPositionTouche[1]=%%A
               Set CharPositionTouche[2]=%%B
               Set Bouton=%%C
            )
            Set/A CharLignePositionTouche[1]=!CharPositionTouche[1]!-(!CharPositionTouche[1]! %% 2)
            Set/A CharLignePositionTouche[2]=!CharPositionTouche[2]!-(!CharPositionTouche[2]! %% 2)
            Set/A LignePositionTouche[1]=!CharPositionTouche[1]!/2
            Set/A LignePositionTouche[2]=!CharPositionTouche[2]!/2
         
         :: Debug ::
         If %CharPositionTouche[2]%==%CharDebug% Call :Debug
         
         :: Plateau ::
         If %CharPositionTouche[1]% GTR %LignePlateauChar% Goto DetectionTouche
         If %CharPositionTouche[1]% LSS 2 Goto DetectionTouche
         If %CharPositionTouche[2]% GTR %LignePlateauChar% Goto DetectionTouche
         If %CharPositionTouche[2]% LSS 2 Goto DetectionTouche
         
      
      :: Detection De Pion Existant ::
      If Not "!LignePionType[%LignePositionTouche[1]%,%LignePositionTouche[2]%]!"=="0" Goto DetectionPionExistant
   
      ::   Chargement   ::
      BatBox /G 2 %LigneMessageChar% /C !Important! /D "Chargement en cours ...           "
   
      :: Test Suicide ::
      Set LibertePion=0
      Set GroupePion=0
   
      :: Nombre de libertées ::
      
      Set/A a=%LignePositionTouche[1]%+1
      Set/A b=%LignePositionTouche[2]%+1
   
      If Not "%LignePositionTouche[1]%"=="%LignePlateau%" (
         If "!LignePionType[%a%,%LignePositionTouche[2]%]!"=="0" Set/A LibertePion+=1
         If "!LignePionType[%a%,%LignePositionTouche[2]%]!"=="%NombreJoueurActuel%" (
            Set/A GroupePion+=1
            Set NumeroGroupeNumeroTemp[!GroupePion!]=!LigneGroupeNumero[%a%,%LignePositionTouche[2]%]!
         )
      )
      
      If Not "%LignePositionTouche[2]%"=="%LignePlateau%" (
         If "!LignePionType[%LignePositionTouche[1]%,%b%]!"=="0" Set/A LibertePion+=1
         If "!LignePionType[%LignePositionTouche[1]%,%b%]!"=="%NombreJoueurActuel%" (
            Set/A GroupePion+=1
            Set NumeroGroupeNumeroTemp[!GroupePion!]=!LignePionType[%LignePositionTouche[1]%,%b%]!
         )
      )
   
      Set/A a=%LignePositionTouche[1]%-1
      Set/A b=%LignePositionTouche[2]%-1
   
      If Not "%LignePositionTouche[1]%"=="%LignePlateau%" (
         If "!LignePionType[%a%,%LignePositionTouche[2]%]!"=="0" Set/A LibertePion+=1
         If "!LignePionType[%a%,%LignePositionTouche[2]%]!"=="%NombreJoueurActuel%" (
            Set/A GroupePion+=1
            Set NumeroGroupeNumeroTemp[!GroupePion!]=!LigneGroupeNumero[%a%,%LignePositionTouche[2]%]!
         )
      )
      
      If Not "%LignePositionTouche[2]%"=="%LignePlateau%" (
         If "!LignePionType[%LignePositionTouche[1]%,%b%]!"=="0" Set/A LibertePion+=1
         If "!LignePionType[%LignePositionTouche[1]%,%b%]!"=="%NombreJoueurActuel%" (
            Set/A GroupePion+=1
            Set NumeroGroupeNumeroTemp[!GroupePion!]=!LignePionType[%LignePositionTouche[1]%,%b%]!
         )
      )
      
      Set LiberteGroupe=%LibertePion%
      
      If Not GroupePion==0 (
         For /L %%i In (1,1,%GroupePion%) Do (
            Set a=!NumeroGroupeNumeroTemp[%%i]!
            set b=NumeroGroupeLiberte[!b!]
            Set/A LiberteGroupe+=!b!-2
         )
      )
   
   If %LiberteGroupe%==0 (
      BatBox /G 2 %LigneMessageChar% /C !Important! /D "Suicide interdit !           "
      Goto BoucleSuicideInterdit
   )
   
   ::   Affichage du Pion   ::
   BatBox /C !CouleurPion[%NombreJoueurActuel%]! /G %CharLignePositionTouche[1]% %CharLignePositionTouche[2]% /A !CharPion[%NombreJoueurActuel%]!
   
   Set/A NombreCoups+=1
   Set NumeroCoupLigne[%NombreCoups%,1]=%LignePositionTouche[1]%
   set NumeroCoupLigne[%NombreCoups%,2]=%LignePositionTouche[2]%
   Set LignePionType[%LignePositionTouche[1]%,%LignePositionTouche[2]%]=%NombreJoueurActuel%
   
   If %GroupePion%==0 goto 0
   
      :0
      Set/A NombreGroupe+=1
      Set NumeroGoupePion[%NombreGroupe%]=1
      Set NumeroGroupePosition[%NombreGroupe%,!NumeroGoupePion[%NombreGroupe%]!,1]=%LignePositionTouche[1]%
      Set NumeroGroupePosition[%NombreGroupe%,!NumeroGoupePion[%NombreGroupe%]!,2]=%LignePositionTouche[2]%
      Set NumeroGoupeJoueur[%NombreGroupe%]=%NombreJoueurActuel%
      Set LigneGroupeNumero[%LignePositionTouche[1]%,%LignePositionTouche[2]%]=%NombreGroupe%
      Set NumeroGroupeLiberte[%NombreGroupe%]=%LibertePion%
      
   Goto PassTransfert
   
   If %GroupePion%==1 Goto 1
   
      :1
      Set/A NumeroGoupePion[%NumeroGroupeNumeroTemp[1]%]+=1
      Set NumeroGroupePosition[%NumeroGroupeNumeroTemp[1]%,%NumeroGoupePion[!NumeroGroupeNumeroTemp[1]!]%,1]=%LignePositionTouche[1]%
      Set NumeroGroupePosition[%NumeroGroupeNumeroTemp[1]%,%NumeroGoupePion[!NumeroGroupeNumeroTemp[1]!]%,2]=%LignePositionTouche[2]%
      Set LigneGroupeNumero[%LignePositionTouche[1]%,%LignePositionTouche[2]%]=%NumeroGroupeNumeroTemp[1]%
      Set/A NumeroGroupeLiberte[%NumeroGroupeNumeroTemp[1]%]+=%LibertePion%-2
      
   Goto PassTransfert
   
   :: Transfert De Groupes ::
   
      Set i=2
      :: Transfert les groupes trouvés dans le 1er groupe trouvé ::
      :BoucleTransfert1
      
         Set a=!NumeroGroupeNumeroTemp[%i%]!
         echo NombreGroupe=%NombreGroupe%
         echo "!NumeroGoupePion[%a%]!"%a%"!NumeroGroupeNumeroTemp[1]!"!NumeroGroupeNumeroTemp[2]!"
         pause
         :: Actualise les numéros de groupes sur la carte ::
         For %%j In (2,1,!NumeroGoupePion[%a%]!) Do (
            Set 1=!NumeroGroupePosition[%a%,%%j,1]!
            Set 2=!NumeroGroupePosition[%a%,%%j,2]!
            Set LigneGroupeNumero[!1!,!2!]=!NumeroGroupeNumeroTemp[1]!
         )
         
         Set c=!NumeroGroupeNumeroTemp[1]!
         
         :: Tranfert des positions ::
         Set j=1
         :BoucleTransfert2
         
            Set/A NumeroGoupePion[%c%]+=1
            Set NumeroGroupePosition[%c%,!NumeroGoupePion[%c%]!,1]=!NumeroGroupePosition[%a%,%j%,1]!
            Set NumeroGroupePosition[%c%,!NumeroGoupePion[%c%]!,2]=!NumeroGroupePosition[%a%,%j%,2]!
            Set/A j+=1
         
         If Not %j%==!NumeroGoupePion[%c%]! Goto BoucleTransfert2
         
         Set/A NumeroGroupeLiberte[%c%]+=!NumeroGroupeLiberte[%a%]!-2
         
         Set/A i+=1
         
      If Not %i%==%GroupePion% Goto BoucleTransfert1
      
      Set/A NumeroGoupePion[%NumeroGroupeNumeroTemp[1]%]+=1
      Set NumeroGroupePosition[%NumeroGroupeNumeroTemp[1]%,%NumeroGoupePion[!NumeroGroupeNumeroTemp[1]!]%,1]=%LignePositionTouche[1]%
      Set NumeroGroupePosition[%NumeroGroupeNumeroTemp[1]%,%NumeroGoupePion[!NumeroGroupeNumeroTemp[1]!]%,2]=%LignePositionTouche[2]%
      Set LigneGroupeNumero[%LignePositionTouche[1]%,%LignePositionTouche[2]%]=%NumeroGroupeNumeroTemp[1]%
      Set/A NumeroGroupeLiberte[%NumeroGroupeNumeroTemp[1]%]+=%LibertePion%-2
   
   :PassTransfert
   
   :: Changement de Joueur ::
   Set/A NombreJoueurActuel+=1
   If %NombreJoueurActuel%==3 Set NombreJoueurActuel=1

Goto BoucleInfinie
:: Fin Boucle Infinie ::


:Debug

   BatBox /C %CouleurNormal% /G 0 %CharConsoleDebug%
   Echo Exit                = 1
   Echo LignePionType       = 2
   Echo LigneGroupeNumero   = 3
   Echo NumeroGroupeLiberte = 4
   Set/P "Choix=Tableau a verifier: "
   
   If "%Choix%"=="1" (
      For /L %%i In (1,1,%LignePlateau%) Do (
         Set/A a=%%i*2
         For /L %%j In (1,1,%LignePlateau%) Do (
            Set/A b=%%j*2
            BatBox /G !a! !b! /A !LignePionChar[%%i,%%j]!
         )
      )
      BatBox /G 1 %CharDebug%
      For /L %%i In (1,1,4) Do (
         Echo.
         Echo.
      )
      Goto :eof
   )
   If "%Choix%"=="2" Goto LignePionType
   If "%Choix%"=="3" (
      For /L %%i In (1,1,%LignePlateau%) Do (
         Set/A a=%%i*2
         For /L %%j In (1,1,%LignePlateau%) Do (
            Set/A b=%%j*2
            If Not "!LigneGroupeNumero[%%i,%%j]!"=="0" (
               BatBox /G !a! !b! /D "!LigneGroupeNumero[%%i,%%j]!"
            )
         )
      )
   )
   If "%Choix%"=="4" Goto NumeroGroupeLiberte
   

Goto Debug

:LignePionType

   Set i=0
   Set i2=0
   :iLignePionType
   
   Set/A i+=1
   Set/A i2+=2
   
      Set j=0
      Set j2=0
      :jLignePionType
      
      Set/A j+=1
      Set/A j2+=2

         If Not "!LignePionType[%j%,%i%]!"=="0" BatBox /G %j2% %i2% /D "!LignePionType[%j%,%i%]!"
      
      If Not "%j%"=="%LignePlateau%" Goto jLignePionType
   
   If Not "%i%"=="%LignePlateau%" Goto iLignePionType
   
Goto Debug

:NumeroGroupeLiberte

   Set i=0
   Set i2=0
   :iNumeroGroupeLiberte
   
   Set/A i+=1
   Set/A i2+=2
   
      Set j=0
      Set j2=0
      :jNumeroGroupeLiberte
      
      Set/A j+=1
      Set/A j2+=2
         
         Set "a=NumeroGroupeLiberte[!LigneGroupeNumero[%j%,%i%]!]"
         If Not "!%a%!"=="" BatBox /G %j2% %i2% /D "!%a%!"
      
      If Not "%j%"=="%LignePlateau%" Goto jNumeroGroupeLiberte
   
   If Not "%i%"=="%LignePlateau%" Goto iNumeroGroupeLiberte
   
Goto Debug

:BatBox
   
   Cls
   For %%B In (
   4d534346000000004f030000000000002c0000000000000003010100010000000000000047000000010001000006000000000000
   0000a440c6b82000626174626f782e657865008699d03300030006434bb55441481461147ea36b90a6b3ac6e85118d90c7342b2f
   b50b2bbb4b456b2eae5874b17177d69975776699fdb70c3a183b826950870e1eba88751582a2253a28061925d82108ebe0a1420b
   128224249cde9b595d37043bd4db7dff7bef7befffdff7fff3cfb45f1a040e001ce004d304f05180e2839d6510b5e6d0d31a78b4
   7bae21cf85e61aba642523a475ad4f1753425454558d09bd92a06755415185404744486931a9a9baf2f0c61ae1204088e3807bf8
   b663035b049eabe2b82092024b499c5b94d8912d0328d0dd2c03c1c67b7e0194537a730eb7c9dbb9650f3e17c024f7179bfdc7d2
   144f8a0c6dbda340c861f3de2a97e928feb3c8ebb53e48d846fe4ec3371c4cf72d827f98eebccb07136b14ac1682550c9616f0c8
   064f35f3439fd0f1b74c8d94ef113cfdeca2a78f374670594f941df188bc31437e9c373e908df1c64fb229ded885d33c5779e30a
   dae5711c96867148e02f62bac7b043d86c5db3884c61cfafb7133d88df4360688ad598eebb96c71bcc44710f63e4a593ca56d941
   854937cb74df21aacda50b4f94d521585f0a4e2f3ab90a4a98adf668f77e8ebd979dd862e90b94b293bd2e2a30d05f5e59c78297
   a50589e206e669915754f3006b22724b71e6634413fbcdd655abf01926ecc7c1c9bb2c16363e8b78ce4b09606fe2392fe5cab22f
   72d57bc9c9792d937d32eaad44e7e6faf48af3c6677a95c76b302eafa074f842b77ca2d8d74b6cf6fdb125d3fd9a9836602e5741
   37c1317a90cce881a1f78c9b49807d9e8d19688c9db4fed01885586df12e5dc777c9c078cc55c486d1cfbbb6bf7bed916e7f6757
   532014023817ec3c1f0c1d3f664700ef70ce12ea1a6a1dae791435801a2af4db290f705a6211163b23aab1a4447144627e4dcd68
   49a91dbf41a5489734c0da18d395de2c934a32feac9ed1f4b0965198a2a934ab53126385e459359d656d549f94a474c9bc809249
   27c56b56abfbc86912358f3a8b3a8fba80fab1c075a73c405a57541627afa74f6251d9f2c84d898a2aea7d198ca5018559787faf
   6c7b19a6332d59f0a2b2bedd57ee37
   ) Do>>t.dat (Echo.For b=1 To len^("%%B"^) Step 2
   Echo WScript.StdOut.Write Chr^(Clng^("&H"^&Mid^("%%B",b,2^)^)^) : Next)
   Cscript /b /e:vbs t.dat>batbox.ex_
   Del /f /q /a t.dat>nul 2>&1
   Expand -r batbox.ex_>nul 2>&1
   Del /f /q /a batbox.ex_>nul 2>&1
   Goto :eof







______________________________________________________
Clickez sur Saturne pour voir mes tutoriels et sur la Terre pour voir mon Forum:


Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch