Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
Un jeu pour Apprendre
Auteur Message
Répondre en citant
Message Un jeu pour Apprendre 
Bonjour à tous, me revoilà avec un nouveaux démineur que j'ai raccourci, simplifié et commenté.
Pour ceux qui veulent apprendre ou ce perfectionner en batch c'est le meilleur moyen.

Code:


@Echo off

Rem  On définit la couleur de fond (=9) et celle du text (=E)
Color 9E

Rem  On midifit la taille de la console
Mode con Cols=300 Lines=300

:Propriété

Rem  Nombre de Lignes
Set NbLignes=9
Rem  0 < NbLignes < 10

Rem  Nombre de Colones
Set NbColones=9
Rem  0 < NbColones < 10

Rem  Nombre de Mines
Set/A NbMine=%NbLignes%*%NbColones%/7
Rem  NbMine < NbColones x NbColones

:EndPropriété

Rem  Nombre de Drapeau(s) posé(s)
Set NbDrapeauPose=0

Rem  Nombre de Case(s) découverte(s)
Set NbCaseDecouverte=0

Rem  Le nombre de Mine(s) ne peut pas etre négatif
If %NbMine% LSS 0 Set NbMine=0

Rem  Nombre de Cases sans Mine
Set/A NbCaseSansMine=%NbLignes%*%NbColones%-%NbMine%

Rem  On fait patienter le joueur
Echo Chargement en cours ...

Rem  Cette commande indique l'utilisation des variables avec des "!" 
Setlocal Enabledelayedexpansion

Rem  On créer les variables qui serviront à afficher le Tableau
For /L %%A In (1,1,%NbColones%) Do (
 Set "LigneDesChiffres=!LigneDesChiffres! %%A"
 Set "Bords=!Bords!ÍÍ"
 Set "Interieur=!Interieur!ÅÄ"
)
Set Interieur=º!Interieur:~1!º

Rem  On créer les 2 Tableaux virtuels
For /L %%A In (1,1,%NbLignes%) Do (
 For /L %%B In (1,1,%NbColones%) Do (
 
  Rem  Le Tableau virtuels avec les Réponse
  Set "TableauReponse%%A%%B=?"
  
  Rem  Le Tableau virtuels visible par le joueur
  Set "TableauVisible%%A%%B=?"
  
 )
)

Rem  Nombre de Min(s) placée(s) aléatoirement
Set NbMinePlace=0

:BoucleAlea

 Rem  Stoppeur de la boucle
 If %NbMinePlace%==%NbMine% Goto FinAlea
 
 Rem  Fonctions pour avoir un Nombre Aleatoire
 Call :Alea 1 %NbLignes% HauteurAlea
 Call :Alea 1 %NbColones% LargeurAlea
 
 Rem  On verifit si la case choisi n'a pas déjà une mine
 If "!TableauReponse%HauteurAlea%%LargeurAlea%!"=="?" (
 
  Rem  On place la mine
  Set "TableauReponse%HauteurAlea%%LargeurAlea%="
  
  Rem  On dit à l'ordinateur qu'on vient de la placer
  Set/A NbMinePlace+=1
  Rem  On ajoute 1 à la variable "NbMinePlace"
 )
 
 Rem  On ferme la boucle
 Goto BoucleAlea
 Rem  On fait un saut vers l'étiquette ":BoucleAlea"

:FinAlea

Rem  Maintenant, on remplit les cases du tableau des réponses
For /L %%A In (1,1,%NbLignes%) Do (
 For /L %%B In (1,1,%NbColones%) Do (
 
  Rem  On verifit si la case choisi n'a pas déjà une mine
  If Not !TableauReponse%%A%%B!== (
  
   Rem  On commence par dire que cett case n'a 0 mine autour d'elle 
   Set NbMineAutourCase=0
   
   Rem  Puis, on regarde si c'est vrai
   For %%C In (+1,-1,+10,-10,+11,-11,+9,-9) Do (
    
    Rem  On indique les coordonnés de la case à inspecter
    Set/A CoordonneDeTest=%%A%%B+%%C
    
    Rem  On verifi que les coordonnés de test n'indique pas une case inexistante
    If Defined TableauReponse!CoordonneDeTest! Call :Temp1 !CoordonneDeTest!
    Rem  Imaginon que la boucle en est à la 1er case.Comme la 1er case est un bord, ses coordonnés sont 11
    Rem  Si on cherche la case qui lui est superieur  on ne peut pas la trouver car elle n'est pas définit
   )
   Set TableauReponse%%A%%B=!NbMineAutourCase!
  )
 )
)

:Affiche

Rem  On efface l'écran
Cls

Rem  On indique que l'utilisateur n'a fait aucun choix 
Set "Choix="

Rem  On demande si le nombre de case(s) découverte(s) et de Drapeau(x) posé(s) est égale aux valeurs maximales
If %NbDrapeauPose%%NbCaseDecouverte%==%NbMine%%NbCaseSansMine% Call :Fin Gagne

Rem  On affiche le tableau Visible, celui sans les réponses
Call :AffTab TableauVisible

Echo.
Echo Informations:
Echo  - Nombre de mine(s): %NbMine%
Echo  - Nombre de drapeau(s) Pose(s): %NbDrapeauPose%
Echo  - Nombre de case(s) decouverte(s): %NbCaseDecouverte%
Echo.
Echo Commandes:
Echo  - Coordonne = HauteurLargeur
Echo    Exemple: 15
Echo  - Drapeau = D
Echo    Exemple: D15
Echo  - Quitter = Exit
Echo.
Set/P "Choix=Entrez  les coordonnes: "

Rem  On verifit que l'utilisateur n'a pas rien marqué
If Not Defined Choix Goto Affiche

If /I "%Choix%"=="Exit" Exit

If /I "%Choix:~0,1%"=="D" (

 If "!TableauVisible%Choix:~-2%!"=="?" (
  Set "TableauVisible%Choix:~-2%=P"
  Set/A NbDrapeauPose+=1
  Goto Affiche
 )
 If "!TableauVisible%Choix:~-2%!"=="P" (
  Set "TableauVisible%Choix:~-2%=?"
  Set/A NbDrapeauPose-=1
  Goto Affiche
 )
)

Set "Choix=%Choix:~0,2%"

If Not "!TableauVisible%Choix%!"=="?" Goto Affiche

If Defined TableauReponse%Choix% (
 Set/A NbCaseDecouverte+=1
 Set TableauVisible%Choix%=!TableauReponse%Choix%!
)

If "!TableauVisible%Choix%!"=="" (
 Set "TableauReponse%Choix%=Ï"
 Call :Fin Perdu
)

If "!TableauReponse%Choix%!"=="0" (
 Rem  On définit, les case autour du choix, comme étant égale aux tableau des réponse
 For %%A In (+1,-1,+10,-10,+11,-11,+9,-9) Do (
  Set/A CoordonneDeTest=%Choix%+%%A
  If Defined TableauReponse!CoordonneDeTest! (
   Call :Temp2 !CoordonneDeTest! %%A
   Set/A NbCaseDecouverte+=1
  )
 )
)

Goto Affiche

:Temp1

 Rem  On regarde s'il y a une mine sur la case qu'on nous a indiqué
 If "!TableauReponse%1!"=="" Set/A NbMineAutourCase+=1
 
Goto :eof

:Temp2

 Rem  On définit la case indiquée du tableau visible comme étant pareil que son équivalent dans le tableau des réponses
 Set TableauVisible%CoordonneDeTest%=!TableauReponse%CoordonneDeTest%!

Goto :eof

:AffTab

 Set Tableau=%1
 
 Rem  On afiche les 2 premières lignes déjà Définit plus haut
 Echo    %LigneDesChiffres%
 Echo    É!Bords:~1!»
 
 Rem  On affiche tous le tableau
 For /L %%A In (1,1,%NbLignes%) Do (
  Set "LigneDeJeu="
  For /L %%B In (1,1,%NbColones%) Do (
   Set "LigneDeJeu=!LigneDeJeu!³!%Tableau%%%A%%B!"
  )
  Echo  %%A º!LigneDeJeu:~1!º
  
  Rem  On verifit que ce n'est pas le dernier tour de la boucle
  If Not %%A==%NbColones% Echo    %Interieur%
  
 )
 
 Rem  On affiche la bordure inférieur
 Echo    È!Bords:~1!¼
 
Goto :eof

:Alea

 Set Min=%1
 Set Max=%2
 
 Rem  On génère un nombre aléatoir
 Set/A "Alea=%Min%+!Random!*%Max%/32768"
 
 Set %~3=%Alea%
 
Goto :eof

:Fin

 Cls
 If %1==Gagne Color 9A
 If %1==Perdu Color 9C
 Rem  On affiche le tableau des réponses
 Call :AffTab TableauReponse
 Echo   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍ»
 If %1==Gagne Echo   º TU AS GAGNE º
 If %1==Perdu Echo   º TU AS PERDU º
 Echo   ÈÍÍÍÍÍÍÍÍÍÍÍÍͼ
 Pause>Nul
 Exit




Version téléchargeable: ICI




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


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


Répondre en citant
Message Un jeu pour Apprendre 
Juste un mot: PARFAIT.
J'aimerais tant avoir ta façon de coder: Propre, lisible, et compréhensible.
Bravo à toi Okay




______________________________________________________
Viens découvrir INTERPOL, un nouveau langage interprété !

Yahoo Messenger
Message Un jeu pour Apprendre 


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