Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
Le batch un langage trop lent ???
Auteur Message
Répondre en citant
Message Le batch un langage trop lent ??? 
Bonjour,j'ai fais un démineur et j'aimerais savoir comment peut-on faire un code montrant toutes les cases ayant un zero (0 bombes les entourant) ??
Voir mon démineur : http://batch.xoo.it/t2875-Demineur-jouable-a-la-souri.htm
J'ai essayer un code , mais il est trop lent :

Code:


@Echo off
Color 9E
Mode con Cols=300 Lines=300
BatBox || Call :BatBox
Call :Menu
:Propriété
Set NbLigne=5
::NbLigne = Indique le nombre de Ligne(s)
::NbLigne < 10
Set NbColonne=5
::NbLigne = Indique le nombre de Colonne(s)
::NbLColonne < 10
Set/A NbMine=1
::NbLigne = Indique le nombre de Mine(s)
::NbMine < NbLigne x NbColonne
:EndPropriété
Set/A NbLBMin=%NbLigne%+2
Set/A NbLBMax=%NbLigne%+3
If %NbMine% LSS 0 Set NbMine=0
Set/A NbCaseM=%NbLigne%*%NbColonne%-%NbMine%
Set nbTA=0
Set nbD=0
Set nbC=0
For /L %%A In (1,1,%NbLigne%) Do (
   For /L %%B In (1,1,%NbColonne%) Do (
      Set C%%A%%B=ú
      Set G%%A%%B=ú
   )
)
Setlocal Enabledelayedexpansion
::Call :BoucleAlea
Set C33=
For /L %%A In (1,1,%NbLigne%) Do (
   For /L %%B In (1,1,%NbColonne%) Do (
      Call :PosNb %%A %%B C%%A%%B
   )
)
If Not Exist Temp.ini Call :Info
Echo T > Temp.ini
:Affiche
Cls
Call :Verif3
Call :AffTab %NbLigne% %NbColonne% G
Echo  - Nombre de case(s) decouverte(s): %nbC%
Echo  - Nombre de drapeau(s): %nbD%
Echo  - Nombre de mine(s): %NbMine%
Echo    ÉÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍ»   
Echo    º Info º º Drapeau º º Exit º
Echo    ÈÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍͼ
Call :PosM
Set Choix=%PosT%
For /L %%A In (%NbLBMin%,1,%NbLBMax%) Do (
   For /L %%B In (1,1,5) Do (
      If %PosT%==%%A%%B Call :Info
   )
)
For /L %%A In (%NbLBMin%,1,%NbLBMax%) Do (
   For /L %%B In (6,1,11) Do (
      If %PosT%==%%A%%B (
         Call :Drapeau
         Goto Affiche
      )
   )
)
For /L %%A In (%NbLBMin%,1,%NbLBMax%) Do (
   For /L %%B In (12,1,15) Do (
      If %PosT%==%%A%%B (
         Call :Drapeau
         Goto Affiche
      )
   )
)
If Not Defined C%Choix% Goto Affiche
If Not "!G%Choix:~0,2%!"=="ú" Goto Affiche
If !C%Choix:~0,2%!==0 Call :RevelZero %Choix:~0,2%
Call :ConvertCG %Choix:~0,2%
Goto Affiche

:AffTab

   Set P1=%1
   Set P2=%2
   Set P3=%3
   Setlocal Enabledelayedexpansion
   Set LigneColonne=
   For /L %%A In (1,1,%P2%) Do Set "LigneColonne=!LigneColonne! %%A"
   Echo   %LigneColonne%
   For /L %%A In (1,1,%P1%) Do (
      For /L %%B In (1,1,%P2%) Do (
         Set Line1=!Line1!ÎÍ
         Set Line2=!Line2!º!%P3%%%A%%B!
         Set Line3=!Line3!ÎÍ
      )
      Set Line1=Ì!Line1:~1!¹
      Set Line3=Ì!Line3:~1!¹
      If %%A==1 (
         Set Line1=É!Line1:~1,-1!»
         Set Line1=!Line1:Î=Ë!
         Echo   !Line1!
      )
      If %%A==%P1% (
         Set Line3=È!Line3:~1,-1!¼
         Set Line3=!Line3:Î=Ê!
      )
      Echo %%A !Line2!º
      Echo   !Line3!
      Set Line1=
      Set Line2=
      Set Line3=
   )
   Goto :eof

:Alea

   Set P1=%1
   Set P2=%2
   Set P3=%3
   Set/A Execpt=%P2%+1
   For /L %%A In (1,1,4) Do (
      Set/A "Alea=!P1!+!Random!*!P2!/32767"
   )
   If %Alea%==%Execpt% Goto Alea
   Set %~3=%Alea%
   Goto :eof
   
:BoucleAlea

   If %nbTA%==%NbMine% Goto :eof
   Call :alea 1 %NbLigne% nbA1
   Call :alea 1 %NbColonne% nbA2
   If !C%nbA1%%nbA2%!==ú (   
      Set C%nbA1%%nbA2%=
      Set/A nbTA+=1
   )
   
Goto BoucleAlea

:PosNb

   Set P1=%1%2
   If !C%P1%!== Goto :eof
   Set nbTCase=0
   For %%A In (+1,-1,+10,-10,+11,-11,+9,-9) Do (
      Set/A PosTest=%P1%%%A
      Call :Verif2 !PosTest!
   )
   Set %~3=%nbTCase%
   Goto :eof
   
:Verif2

   If !C%1!== Set/A nbTCase+=1
   Goto :eof
   
:Verif3

   If %nbD%%nbC%==%NbMine%%NbCaseM% Call :Fin G
   Goto :eof
   
:ConvertCG

   Set P1=%1
   If Not !G%P1%!==ú Goto :eof
   Set G%P1%=!C%P1%!
   If !G%P1%!== (
      Set C%P1%=Ï
      Call :Fin P
   )
   Set/A nbC+=1
   Goto :eof

:RevelZero

   Call :Ligne %1
   Goto :eof
   
:Ligne

   Set P1=%1
   For /L %%A In (%P1%,+1,%P1:~0,1%%NbLigne%) Do (
      Call :ConvertCG %%A
      Call :Verif4 %%A Test
      If !Test!==1 Goto Parti2L1
      Call :Colonne %%A
   )
   :Parti2L1
   For /L %%A In (%P1%,-1,%P1:~0,1%1) Do (
      Call :ConvertCG %%A
      Call :Verif4 %%A Test
      If !Test!==1 Goto :eof
      Call :Colonne %%A
   )
   Goto :eof
   
:Colonne

   Set P1=%1
   For /L %%A In (%P1%,+10,%NbColonne%%P1:~1,1%) Do (
      Call :ConvertCG %%A
      Call :Verif4 %%A Test
      If !Test!==1 Goto Parti2C1
      Call :Ligne2 %%A
   )
   :Parti2C1
   For /L %%A In (%P1%,-10,1%P1:~1,1%) Do (
      Call :ConvertCG %%A
      Call :Verif4 %%A Test
      If !Test!==1 Goto :eof
      Call :Ligne2 %%A
   )
   Goto :eof

:Ligne2

   Set P1=%1
   For /L %%A In (%P1%,+1,%P1:~0,1%%NbLigne%) Do (
      Call :ConvertCG %%A
      Call :Verif4 %%A Test
      If !Test!==1 Goto Parti2L2
      Call :Colonne2 %%A
   )
   :Parti2L2
   For /L %%A In (%P1%,-1,%P1:~0,1%1) Do (
      Call :ConvertCG %%A
      Call :Verif4 %%A Test
      If !Test!==1 Goto :eof
      Call :Colonne2 %%A
   )
   Goto :eof
   
:Colonne2

   Set P1=%1
   For /L %%A In (%P1%,+10,%NbColonne%%P1:~1,1%) Do (
      Call :ConvertCG %%A
      Call :Verif4 %%A Test
      If !Test!==1 Goto Parti2C2
   )
   :Parti2C2
   For /L %%A In (%P1%,-10,1%P1:~1,1%) Do (
      Call :ConvertCG %%A
      Call :Verif4 %%A Test
      If !Test!==1 Goto :eof
   )
   Goto :eof

:Verif4

   If Not !G%1!==0 (
      Set %~2=1
   ) Else (
      Set %~2=0
   )
   Goto :eof

:Info

   Cls
   Call :AfficheL "Regle: Le nombre d'une case indique le nombre de mine(s) la touchant !!" "2"
    Pause>Nul                                                                                                                                                                                                                             
   Cls
   Call :AfficheL "Pour une plus grande visibilite:" "2"
   Pause>Nul
   Call :AfficheL " - Clickez sur le coin superieur gauche !!" "2"
   For /L %%A In (1,1,13) Do ping localhost -n 1 > Nul
   Call :AfficheL " - Clickez sur propriete !!" "2"
   For /L %%A In (1,1,15) Do ping localhost -n 1 > Nul
   Call :AfficheL " - Selectionne l'onglet Police !!" "2"
   For /L %%A In (1,1,15) Do ping localhost -n 1 > Nul
   Call :AfficheL " - Choisissez la taille des caracteres !!" "2"
   Pause>Nul
   Goto :eof
   
:Drapeau

   Echo.
   Echo Cliquez sur l'emplacement !!
   Call :PosM
   Set Choix=%PosT%
   If !G%Choix%!==ú (
      Set G%Choix:~0,2%=P
      Set/A nbD+=1
      Goto :eof
   )
   If !G%Choix%!==P (
      Set G%Choix:~0,2%=ú
      Set/A nbD-=1
      Goto :eof
   )
   Goto :eof
   
:AfficheL
Setlocal Enabledelayedexpansion
Call :Compt %1 P4
Set P1=%1
Set P1=%P1:"=%
Set P2=%2
Set P2=%P2:"=%
If "%P2%"=="" Set P2=6
For /L %%A In (1,1,%P4%) Do (
   Cls
   Echo !P1:~0,%%A!
   For /L %%A In (1,1,%P2%) Do (
      @Ping localhost -n 1 > Nul
   )
)
Goto :eof


:Compt
Set nb=0
Set P1=%1
Set P1=%P1:"=%
Set P2=%2

:BoucleCompt

   If "%P1%"=="" (
      Set %~2=%nb%
      Goto :eof
   )
   Set/A nb+=1
   Set P1=%P1:~1%
   Goto BoucleCompt
   
:PosM

   FOR /F "tokens=1,2 delims=:" %%A in ('BatBox /m') DO (
      Set/A PosX=%%A/2
      Set/A PosY=%%B/2
   )
   Set PosT=%PosY%%PosX%
   Goto :eof

:Menu

   Cls
   Color 9E
   Echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
   Echo º Nouvelle Partie º
   Echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
   Echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
   Echo º Information     º
   Echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
   Echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
   Echo º Quitter         º
   Echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
   Call :PosM
   For /L %%A In (0,1,1) Do (
      For /L %%B In (0,1,9) Do (
         If %PosT%==%%A%%B (
            Cls
            Echo Chargement en cours......
            Goto :eof
         )
      )
   )
   For /L %%A In (1,1,2) Do (
      For /L %%B In (0,1,9) Do (
         If %PosT%==%%A%%B Call :Info
      )
   )
   For /L %%A In (3,1,4) Do (
      For /L %%B In (0,1,9) Do (
         If %PosT%==%%A%%B Exit
      )
   )
   Goto Menu

:BatBox

   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
   
:Fin

   Cls
   If %1==G Color 9A
   If %1==P Color 9C
   Call :AffTab %NbLigne% %NbColonne% C
   Echo   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍ»
   If %1==G Echo   º TU AS GAGNE º
   If %1==P Echo   º TU AS PERDU º
   Echo   ÈÍÍÍÍÍÍÍÍÍÍÍÍͼ
   Pause>Nul
   Call :Menu
   Goto Propriété






______________________________________________________
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