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; |
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; |
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; |