Skip to content
This repository has been archived by the owner on May 17, 2024. It is now read-only.

Commit

Permalink
Mise en marche du jeu
Browse files Browse the repository at this point in the history
  • Loading branch information
Feelzor committed Jan 23, 2019
1 parent b8e72e5 commit a3eea35
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 40 deletions.
35 changes: 31 additions & 4 deletions p_combinaisons.adb
Original file line number Diff line number Diff line change
Expand Up @@ -306,17 +306,44 @@ package body p_combinaisons is

procedure resultatExiste(fsol: in out text_io.file_type; sol: in string; resultat: out boolean) is
-- {fsol ouvert} => {resultat = true si sol est présent dans fsol}
tmp : string(1..15);
nb: integer;
tmp : string(1..15) := (others => ' ');
nb: integer := 1;
begin
reset(fsol, IN_FILE);
loop
while not end_of_file(fsol) and tmp(1..nb) /= sol loop
get_line(fsol, tmp, nb);
exit when end_of_file(fsol) or tmp(1..nb) = sol;
end loop;

resultat := tmp(1..nb) = sol;
end resultatExiste;

procedure permut(a, b: in out string) is -- type des valeurs du vecteur
-- {} => {les valeurs de a et b ont été échangées}
temp: string(1..2);
begin
temp := a;
a := b;
b := temp;
end permut;

procedure ordonne(sol: in out string) is
-- {} => {trie la solution par ordre alphabétique}
i : integer := sol'first;
j : integer;
permutation: boolean := true;
begin
while permutation loop
permutation := false;
j := sol'last - 1;
while j >= i+2 loop
if sol(j..j+1) < sol(j-2..j-1) then
permut(sol(j..j+1), sol(j-2..j-1));
permutation := true;
end if;
j := j - 2;
end loop;
i := i + 2;
end loop;
end ordonne;

end p_combinaisons;
3 changes: 3 additions & 0 deletions p_combinaisons.ads
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,7 @@ package p_combinaisons is
procedure resultatExiste(fsol: in out text_io.file_type; sol: in string; resultat: out boolean);
-- {fsol ouvert} => {resultat = true si sol est présent dans fsol}

procedure ordonne(sol: in out string);
-- {} => {trie la solution par ordre alphabétique}

end p_combinaisons;
76 changes: 44 additions & 32 deletions p_vue_graph.adb
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ package body p_vue_graph is
fenetre:= DebutFenetre("Jeu",500,650);
afficherGrille(fenetre, 50,100);
ajouterTexte(fenetre,"Txt1","Score : ",50,50,120,30);
ajouterTexte(fenetre,"Score","250 Points",170,50,120,30);
ajouterTexte(fenetre,"Score","0 Point",170,50,120,30);
AjouterChamp(fenetre,"SolutionProp","","A1B3C4D5",100,520,300,30);
ajouterBouton(fenetre, "valider", "Valider", 200 , 560 , 100 , 30);
ajouterBouton(fenetre, "abandon", "Abandonner", 200 , 650 , 100 , 30);
Expand All @@ -124,7 +124,7 @@ package body p_vue_graph is

finFenetre(fenetre);
montrerFenetre(fenetre);
appuiBoutonSolution(attendreBouton(fenetre), fenetre);
appuiBoutonJeu(attendreBouton(fenetre), fenetre);

end fenetreJeu;

Expand Down Expand Up @@ -164,7 +164,7 @@ package body p_vue_graph is
ouvreFenetreSolutions("fout.txt", fenetre);
end if;
elsif Elem = "jeu" then
fenetreJeu;
debutJeu;
elsif Elem = "Fermer" then
CacherFenetre(fenetre);
else
Expand Down Expand Up @@ -224,13 +224,17 @@ package body p_vue_graph is
end appuiBoutonSolution;

procedure appuiBoutonJeu (Elem : in string; fenetre : in out TR_Fenetre) is
pts : integer;
begin --
if Elem = "SolutionProp" or Elem ="valider"then
if Elem = "SolutionProp" or Elem ="valider" then
verifSol(fenetre, consulterContenu(fenetre, "SolutionProp"));
pts := compterPoints;
changerTexte(fenetre, "Score", trim(Integer'image(pts), BOTH) & (if pts >= 2 then " Points" else " Point"));
appuiBoutonJeu(attendreBouton(fenetre),fenetre);
elsif Elem = "abandon" then
finJeu(fenetre, true);
else
appuiBoutonJeu(attendreBouton(fenetre),fenetre);
elsif Elem = "abandon" then
appuiBoutonJeu(attendreBouton(fenetre),fenetre);
else
appuiBoutonJeu(attendreBouton(fenetre),fenetre);
end if;
end appuiBoutonJeu;

Expand All @@ -257,16 +261,18 @@ package body p_vue_graph is
end loop;
end affichageSol;

procedure debutJeu(fen: in out TR_Fenetre) is
procedure debutJeu is
-- {} => {Lance le jeu}
begin
nbCasesSolution := 0;
create(fichierJeu, IN_FILE, "solutionsTrouvees");
open(fichierSolution, IN_FILE, (if contigue then "foutcont.txt" else "fout.txt"));
fenetreJeu;
-- TODO: ouverture fenetre pseudo
end debutJeu;

function compterPoints return integer is
-- {} => {résultat = nombre de points du joueur}
-- {fichierJeu ouvert} => {résultat = nombre de points du joueur}
sol: string(1..15);
nb: integer;
score : integer := 0;
Expand Down Expand Up @@ -296,38 +302,44 @@ package body p_vue_graph is
close(f);
end enregistrerScore;

procedure finJeu is
procedure finJeu(fen: in out TR_Fenetre; abandon: in boolean) is
-- {} => {Finit le jeu}
begin
enregistrerScore((pseudo, compterPoints));
if not abandon then enregistrerScore((pseudo, compterPoints)); end if;
delete(fichierJeu);
-- TODO: fermer la fenêtre
close(fichierSolution);
cacherFenetre(fen);
fenetreAccueil;
end finJeu;

procedure verifSol(fen: in out TR_Fenetre; solution: in string) is
-- {} => {Vérifie si la solution est correcte}
estValide: boolean;
estValide, dejaTrouve: boolean;
combinaison: string := solution;
begin
if nbCasesSolution > 0 then
affichageSol(fen, dernier(1..nbCasesSolution*2), FL_COL1);
end if;
dernier := (others => ' ');
dernier(solution'range) := solution;
nbCasesSolution := solution'length / 2;

resultatExiste(fichierSolution, solution, estValide);
if estValide then -- la solution existe

resultatExiste(fichierJeu, solution, estValide);
if estValide then -- la solution n'a pas encore été découverte
affichageSol(fen, solution, FL_CHARTREUSE);
reset(fichierJeu, APPEND_FILE);
put_line(fichierJeu, solution);
if combinaison'length > 0 then
ordonne(combinaison);
if nbCasesSolution > 0 then
affichageSol(fen, dernier(1..nbCasesSolution*2), FL_COL1);
end if;
dernier := (others => ' ');
dernier(combinaison'range) := combinaison;
nbCasesSolution := combinaison'length / 2;
changerContenu(fen, "SolutionProp", "");

resultatExiste(fichierSolution, combinaison, estValide);
if estValide then -- la solution existe
resultatExiste(fichierJeu, combinaison, dejaTrouve);
if not dejaTrouve then -- la solution n'a pas encore été découverte
affichageSol(fen, combinaison, FL_CHARTREUSE);
reset(fichierJeu, APPEND_FILE);
put_line(fichierJeu, combinaison);
else
affichageSol(fen, combinaison, FL_WHEAT);
end if;
else
affichageSol(fen, solution, FL_WHEAT);
affichageSol(fen, combinaison, FL_TOMATO);
end if;
else
affichageSol(fen, solution, FL_RED);
end if;
end verifSol;

Expand Down
8 changes: 5 additions & 3 deletions p_vue_graph.ads
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,21 @@ package p_vue_graph is

procedure appuiBoutonSolution (Elem : in string; fenetre : in out TR_Fenetre);

procedure appuiBoutonJeu (Elem : in string; fenetre : in out TR_Fenetre);

procedure actualisationInfos(fen: in out TR_Fenetre; combinaisonOld: integer);
-- {} => {Actualisation des informations pour la solution nbSol}

procedure debutJeu(fen: in out TR_Fenetre);
procedure debutJeu;
-- {} => {Lance le jeu}

function compterPoints return integer;
-- {} => {résultat = nombre de points du joueur}
-- {fichierJeu ouvert} => {résultat = nombre de points du joueur}

procedure enregistrerScore(score: in TR_Score);
-- {} => {le score a été enregistré dans le fichier de scores}

procedure finJeu;
procedure finJeu(fen: in out TR_Fenetre; abandon: in boolean);
-- {} => {Finit le jeu}

procedure affichageSol(fen: in out TR_Fenetre; combinaison: in string; coul: in FL_Color);
Expand Down
1 change: 0 additions & 1 deletion test.adb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ procedure test is
V: TV_Gaudi(1..16);

fout, foutcont: text_io.file_type;

begin
open(f, IN_FILE, "CarreGaudi");

Expand Down

0 comments on commit a3eea35

Please sign in to comment.