Programme morpion sur ADA GIDE : vérifier si la case est vide.

Bonjour,
J'ai programmé un morpion avec ADA GIDE mais lorsqu'on entre une coordonnée deux fois de suite le rond est effacé et remplacé par la croix et inversément.
Veuillez bien m'aider à compléter mon sous programme.
Merci.

Voici mon code:

with ada.text_io;
use ada.text_io;
with ada.integer_text_io;
use ada.integer_text_io;

PROCEDURE Morpion IS

--Creation du tableau
TYPE T_Grille IS ARRAY (1..50, 1..50) OF Character;
Grille:T_Grille;
X,Y:Integer;
Vide:Boolean;

--Affichage des coordonnees
PROCEDURE AffichageCoordonnees IS
BEGIN
For I in 1..50 loop
Put('|');
If I<10 then
Put(' ');
End if;
Put(I,0);
End loop;
Put('|');
New_Line;
END AffichageCoordonnees;

--Affichage du tableau
PROCEDURE AffichageTableau IS
begin
FOR I IN 1..50 LOOP --Affichage des lignes
FOR J IN 1..50 LOOP --Affichage des colonnes
Put("| ");
Put(Grille(I,J));
END LOOP;
Put('|');
Put(I,0);
New_Line;
END LOOP;
END AffichageTableau;

--Verification : les coordonnees recues sont elles valables ?
PROCEDURE VerificationCoordonnees IS
begin
Put("Saisissez le numero de la ligne de votre pion: "); Get(X);
WHILE (X<1) OR (X>50) LOOP
Put("Le numero de la ligne n'est pas comprise dans le tableau."); New_Line;
Put("Saisissez le numero de la ligne de votre pion: "); Get(X);
End loop;
Put("Saisissez le numero de la colonne de votre pion: "); Get(Y);
WHILE (Y<1) OR (Y>50) LOOP
Put("Le numero de la colonne n'est pas comprise dans le tableau"); New_Line;
Put("Saisissez le numero de la colonne de votre pion: "); Get(Y);
END LOOP;
END VerificationCoordonnees;

--Verification : il n'existe aucun pion sur la case choisie
PROCEDURE VerificationPions (S : in integer) IS
begin
IF S mod(2)=0 THEN --Condition : differencier pions
Grille(X,Y):= 'X';
end if;
if S mod(2)=1 then
Grille(X,Y):= 'O';
END IF;
end VerificationPions;

Begin
Vide:= True;
--Initialisation du tableau
Grille:=(1..50 =>(1..50 => ' '));
AffichageCoordonnees;
-- Affiche Le tableau
AffichageTableau;
-- On fait une boucle pour mettre les pions dans le tableau
FOR S IN 1..2500 LOOP
VerificationCoordonnees;
--Verification : il n'existe aucun pion sur la case choisie
VerificationPions (S mod(2));
--Verfication : gagné ou perdu ?
AffichageCoordonnees;
AffichageTableau;
End loop;
End morpion;

Et voici le sous programme:

--Verification : il n'existe aucun pion sur la case choisie
PROCEDURE VerificationPions (S : in integer) IS
begin
IF S mod(2)=0 THEN --Condition : differencier pions
Grille(X,Y):= 'X';
end if;
if S mod(2)=1 then
Grille(X,Y):= 'O';
END IF;
end VerificationPions;

2 réponses

  1. Bonjour

    je ne connais pas ce langage, mais de ce que j'en comprends, tu ne testes pas s'il y a un pion, tu places le nouveau c'est tout.
    0
    1. Contributeur Ambassadeur
      bonjour, ne devrais-tu pas calculer X et Y en fonction de S?
      0