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