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

Fermé
sefa4 Messages postés 1 Date d'inscription dimanche 19 novembre 2017 Statut Membre Dernière intervention 19 novembre 2017 - 19 nov. 2017 à 11:10
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 - 19 nov. 2017 à 14:00
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;
A voir également:

2 réponses

Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
19 nov. 2017 à 12:09
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
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
19 nov. 2017 à 14:00
bonjour, ne devrais-tu pas calculer X et Y en fonction de S?
0