Forum ada95000 Dernière connexion : 17/06/2025 à 16:22
Fin de session : 17/06/2025 à 16:32

Vous n'êtes pas connecté [Connexion - Inscription]
Go Bottom
Version imprimable | Envoyer à un ami | S'abonner | Ajouter aux Favoris Nouveau SujetNouveau sondageRépondre
Auteur: Sujet: Jeu Craps   ( Réponses: 0 | Vues: 298 )
Yossep
VIP
MembreMembreMembreMembre
 
 
Messages: 10
Inscrit(e) le: 31/05/2020
Déconnecté(e)
Publié le 04/06/2020 à 22:49 Reply With Quote
Jeu Craps

Petit programme qui simule le jeu de Craps.

Enjoy !!:D

Code:

P_Craps.ads

quote:

Package P_craps is

   Function Calcul(Somme : In Natural; Mise_Depart : In Out natural; Compte : In Out Natural) return Natural;

   Function Parier( Compte : In Natural ) return Natural ;

   Function Lancer_De return Natural;
     
   Function Relancer_Jeu(Point : In Out Natural; Compte : In Out Natural; Mise_Depart : In Out Natural) return Natural;

   Function Gagne_Perd(Mise_Depart : In Out Natural; Compte : In Out Natural) return Natural;
 
 Procedure Regles_Jeu;
   procedure Start;
 
   procedure Save_Name_Score(Score : In Out Natural);
   Procedure Read_Name_Score;
 
   
   end P_craps;



P_Craps.adb

quote: with Ada.Text_IO, Ada.Strings.Unbounded, Ada.Directories; use Ada.Text_IO, Ada.Strings.Unbounded, Ada.Directories;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
With Ada.Numerics.Discrete_Random;          -- Package permettant de générer des nombres aléatoire.
   
Package body P_craps is

 ----------------------------------------------------------------------------------------------------------------------------------
 -- Fonction qui permet au joueur de saisir sa mise. Elle prend un params en entrée et retourne une variable au prog principal ----
 ----------------------------------------------------------------------------------------------------------------------------------
   ---Procedure Update_Score
 
  procedure Save_Name_Score(score : In Out Natural) is  
     nom : Unbounded_String;
     f : File_Type;    
  begin
     --  Write Score
     if not Exists("logs") Then
        Create_Directory("logs");
     end if;
     Create(f, Out_File, "./logs/log.txt");
     Put_Line("saisissez votre nom");
     put(">"); nom := To_Unbounded_String(Get_Line);
     Put_Line(f,"-------------------");
     Put_Line(f,"NOM="&To_String(nom));
     Put_Line(f,"-------------------");
     if score /= 0 Then
        Put_Line(f,"SCORE="&Natural'image(score));
     end if;
     Close(f);
  end Save_Name_Score;
 
  --- Fin de la procedure
 
  procedure Read_Name_Score is  
     score_joueur, taille : Natural;
     joueur_nom, tmp : Unbounded_String;
     f : File_Type;    
  Begin
     -- Read Score
     Put_Line("****** AFFICHAGE RESULTAT *******"); New_Line;
     Open(f, In_File, "log.txt");
     while not End_Of_File(f) loop
        tmp := To_Unbounded_String(Get_Line(f));
        -- le prog enrégistre le contenu du fichier f dans une var tmp de type Unbounded_String
        taille := Length(tmp);
        -- la taille de la chaine de caractères tmp est dans taille
        if taille >= 4 Then
           if To_String(tmp)(1..4) = "NOM=" Then
              -- si la chaine de caract compris entre 1 et 4 est égale à "NOM="
              joueur_nom := To_Unbounded_String(To_String(tmp)(5..taille));
              -- enregistrement dans la chaine allant de 5 à taille dans la var
              Put("Votre Nom est "&To_String(joueur_nom));New_Line;
           end if;
        end if;
     
        if taille >= 6 Then
           if To_String(tmp)(1..6) = "SCORE=" Then
              -- De meme pour lire et enrégistrer le score
              score_joueur := Natural'Value(To_String(tmp)(7..taille));
              Put("Votre SCORE est"&Natural'Image(score_joueur)&"$.");New_Line;
           end if;
        end if;
     end loop;
     Close(f);
     Put_Line("****** FIN DE LA PARTIE *******"); New_Line;
  end Read_Name_Score;
  --- Fin de la procedure
 
  Procedure update_Score ( current_score : In Natural) Is
     score_joueur, taille : Natural;
     joueur_nom, tmp : Unbounded_String;
     f : File_Type;
  Begin
     --Lecture de la valeur du score
     Open(f, In_File, "log.txt");
     while not End_Of_File(f) loop
        tmp := To_Unbounded_String(Get_Line(f));
        taille := Length(tmp);
       
        if taille >= 6 Then
           if To_String(tmp)(1..6) = "SCORE=" Then
              score_joueur := Natural'value(To_String(tmp)(7..taille));
           end if;  
        end if;
     end loop;
     Close(f);
     
     if current_score > score_joueur Then
        Open(f, Append_File, "log.txt");
        Put_Line(f, "----------------");
        Put_Line(f,"SCORE="&Natural'Image(current_score));
        Close(f);
     end if;
  end update_Score;
 
  ------ Fonction qui fait tourner le prog en boucle --------
  Function Parier( Compte : In Natural ) return Natural Is
     Montant : Natural := 0;
     
  Begin      
     Put_Line("------------------------------");
     Put_Line("| Le solde du compte =" & Integer 'image(Compte) &"$. |");
     Put_Line("------------------------------");
   
     --Tant que la mise est à zero ou superieur au solde du compte, on redemande
     While Montant = 0 Or Montant > Compte loop
        Put_Line(" Combien souhaitez-vous miser ?");
        Put("> "); Get(Montant,0); Skip_Line; New_Line;        
        -- si le compte est débiteur on s'arrete
        if Montant > Compte Then
           Put_Line("La maison ne fait pas de credit !");
        else Exit;
        end if;
     End loop;
     return Montant;
  End Parier; -- fin de fonction de Mise


  -----------------------------------------------------------------
  -- Fonction qui permet de lancer les Dés zero params d'entrée ---
  -----------------------------------------------------------------
  Function Lancer_De return Natural Is
     -- Ici nous générons un nbre aléatoire entre 1 et 6
     SUBTYPE Intervalle Is Integer Range 1..6;
     Package Aleatoire Is New Ada.Numerics.Discrete_Random(Intervalle);
     Use Aleatoire;
     Hasard : Generator;
     Choix : Natural;
  Begin
     reset(Hasard);
     Choix := random(Hasard);
     return Choix;
     
  End Lancer_De;
  -- Fin de la fonction Lance_De


  -----------------------------------------------
  --Fonction de relance d'une deuxieme partie ---
  ----------------------------------------------
  Function Relancer_Jeu(Point : In Out Natural; Compte : In Out Natural; Mise_Depart : In Out Natural) return Natural  Is
     De1, De2 : Natural;
  Begin
     
     While Point > 0 loop
        -- Le joueur lance les dés de nouveau
        De1 := Lancer_De;
        De2 := Lancer_De;
        -- si le joueur rejoue le mem nbre alors il gagne
        if De1 + De2 = Point Then
           Put("Vous empochez" & Integer'image(Mise_depart) & "$.");New_Line;
           Compte := Compte + Mise_Depart;
           Point := 0; Mise_Depart := 0;
           Put("Ce qui vous fait" & Integer'Image(Compte) &"$. Bravo !!!"); New_Line;
           -- si joueur fait un 7 avant de refaire le point alors il perd sa mise
        Elsif De1 + De2 = 7 Then
           Put("SEVEN OUT ! Vous perdez" & Integer'Image(Mise_Depart) &"$.");
           New_Line;
           Compte := Compte - Mise_depart;
           Point := 0; mise_Depart := 0;   -- remise à zero des compteurs
           Put("Il vous reste" & Integer'Image(Compte) &"$."); New_Line;
        end if;
       
     End loop;      
     return Compte;
     
  End Relancer_Jeu;

  --Fin de la fonction

 --------------------------------------------------------------------
 -- Fonction du Jeu qui calcul décide si le joueur gagne ou perd ----
 -- elle prend 3 params en entrée --
 -------------------------------------------------------------------

  Function Calcul(Somme : In Natural; Mise_Depart : In Out natural; Compte : In Out Natural) return Natural Is
     Point : Natural := 0;    
  Begin
     Case Somme Is
        When 7 | 11  =>  Put("Vous avez gagné" & Integer'Image(Mise_Depart) &"$."); New_line;
           Compte := Compte + Mise_Depart;
           Mise_Depart := 0;
           Put("Votre compte est de" & Integer'Image(Compte) &"$. Bravo !!!"); New_line;
         
        When 2 | 3 | 12 => Put(" CRAPS ! Vous perdez" & Integer'Image(Mise_Depart) &" $. Dommage");
           Compte := Compte - Mise_Depart;
           Mise_Depart := 0;
           new_Line;
        When Others =>
           Point := Somme;
           Put("Le point est établi à" & Integer'Image(Point));New_Line;
           Compte := Relancer_Jeu(Point, Compte, Mise_Depart);
           Mise_Depart := 0;
     End case;    
     return Compte;
  end Calcul;
  -- Fin de la fonction


 ------------------------------------------------------------------------------------------
 -- Debut de la Fonction Gagne_Perd cette fonction réalise le gros du travail du jeu ------
 -- Elle prend 2 params en entrée, le solde du compte ainsi que la mise de depart ---------
 ------------------------------------------------------------------------------------------

  Function Gagne_Perd(Mise_Depart : In Out Natural; Compte : In Out Natural) return Natural Is
     -- Variable pour stocker la somme des dés et Gain.
     Somme : Natural;
     De1, De2, Current_State_Compte : Natural ;
  Begin
     -- On lance les dés
     De1 := Lancer_De;
     De2 := Lancer_De;    
     --Affichage du résultat
     Put(De1, Width => 0);New_Line;
     Put(De2, Width => 0);New_Line;    
     Somme := De1 + De2;    
     --Appel a la fonction qui va nous dire si on gagne ou perd
     Current_State_Compte := Calcul(Somme, Mise_Depart,Compte);
     update_score(Current_State_Compte);
     return Current_State_Compte;    
  End Gagne_Perd;
  -- Fin de la fonction


  --Procedure enoncant les règles du jeu

  Procedure Regles_Jeu Is
     -------------------
     -- VARIABLES ------
     -------------------    
     regles_Du_Jeu : Unbounded_String;
     My_File : File_Type;
     Pseudo : Unbounded_String;        
  Begin
     --Lecture des règles du jeu depuis un fichier texte.
     Open(My_File, In_File, "./media/regles.txt");
     while not End_Of_File(My_File) loop
        regles_Du_Jeu := To_Unbounded_String(Get_Line(My_File));
        --Le prog lit le contenu du fichier My_File pour l'enrégistrer dans la variable regles_du_jeu
        Put_Line(To_String(regles_Du_Jeu));
        New_Line;
     end loop;
     Close(My_File);
     New_Line;
  End Regles_Jeu;
  -- Fin de la procedure
 
 
  -- Procedure Initialisation du jeu
  procedure Start is
     Mise_depart : Natural := 0;
     Gain : Natural := 0;
     Compte : Natural := 100;
     
  Begin
     Save_Name_Score(Compte);
     --On joue tant que compte est créditeur
     While Compte > 0 loop
        Mise_depart := Parier(Compte);
        --Test si le jeu est gagnant ou perdant ensuite on credite ou débite le compte du joueur
        Exit when Mise_depart = 0 ;
        Put_Line(" Les jeux sont faits ");
        --on lance le jeu
        Gain := Gagne_Perd(Mise_Depart, Compte);
        New_line;
     end loop;
     
  end Start;

end P_craps;



Programme Principa main.adbl


quote: --NOTES: Avoir des parametres en Mode " In => Lecture " c'est interdir toute modification de leur val
-- Par contre Mode "Out => Ecriture"  les parametres ne doivent pas etre lus


With P_craps,Ada.Text_IO, Ada.Strings.Unbounded, Ada.Integer_Text_IO;
Use P_Craps, Ada.Text_IO, Ada.Strings.Unbounded, Ada.Integer_Text_IO;

Procedure Main is
  ------------------
  -- SUITE DU JEU --
  -----------------

 choix : Character;
  -- Le joueur doit etre capable de saisir son pseudo
  -- le programme doit etre capable d'enrégistrer le pseudo dans un fichier texte.
  -- le programme doit etre capable de proposer au joueur d'enrégistrer son score s'il est > Montant du compte
  -- Le programme doit etre capable d'enrégistrer le nbre de coup pour la victoire

Begin

  Put_Line(" BIENVENUE AU JEU DE CRAPS ");
  Put_Line(" Voulez-vous lire les règles du jeu [Y/N] ");
  put(">");Get(choix);Skip_Line;

  case choix is
     when 'N' | 'n' =>
        put_line(" Lancer le jeu ");
        Start;
     when 'Y' | 'y' =>
        Regles_Jeu;
        Start;
     when Others =>
        Put_Line(" Mauvais choix.");
  end Case;
  --Lancement du Jeu avec affichage des règles du jeu
  Read_Name_Score;
  -- A la fin du Jeu le programme affiche le nom du joueur et son score
end Main;



:eureka:
Go Top #108 Go Bottom
View Yossep's ProfileE-Mail YossepView All Posts by YossepU2U Member
Nouveau SujetNouveau sondageRépondre

Go Top
10.3.122.74 16:22 - 17 Juin 2025 10.3.122.74
[ 0.3165441 secondes | Effacer le cookie | 17 requêtes ]
Oxygen v1.0.11 © 2002  |  Oxygen WebSite © 2002