/* Vérification en colonne */
si NON gagne Alors
i←1
Tant que i<=3 ET NON gagne
Si p[1][i]!=" " ET p[1][i]=p[2][i] ET p[1][i]=p[3][i] alors
gagne←VRAI
FinSi
i←i+1
FinTantQue
FinSi
/* Vérification des deux diagonales */
Si NON gagne Alors
Si p[1][1]!=" " ET ((p[1][1]=p[2][2] ET p[1][1]=p[3][3]) OU (p[1][3
]=p[2][2] ET p[1][3]=p[3][1])) Alors
Gagne←VRAI
FinSi
FinSi
nbtours←nbtours+1 ;
Jusqu’à gagne=VRAI OU nbtour=9
Si gagne Alors
Afficher pion," a gagné !"
Sinon
Afficher "Personne ne gagne."
FinSi
FIN
Comme indiqué, ce programme n’est pas optimisé. Ainsi les boucles et tests qui déterminent si les lignes et les
colonnes sont gagnantes font appel à des indices statiques. Or si vous souhaitiez par exemple étendre cet algorithme
à un "Puissance 4" qui est fondamentalement la même chose, vous auriez des tests à rallonge.
Voici le résultat en Java, l’affichage ayant été légèrement amélioré et les coordonnées adaptées en fonction des indices
des tableaux démarrant à 1 :
import java.io.*;
class chap5_morpion {
public static void main(String[] args) {
char[][] p=new char[3][3];
int i,j,x=0,y=0,nbtours=0;
boolean gagne;
char pion=’ ’;
String tx="",ty="";
BufferedReader saisie;
saisie=new BufferedReader(new InputStreamReader(System.in));
/* Initialisation du tableau */
for(i=0;i<3;i++) for(j=0;j<3;j++) p[i][j]=’ ’;
gagne=false;
/* Boucle principale */
do {
if(pion!=’o’) pion=’o’; else pion=’x’;
/* Saisie des coordonnees */
do {
/* Plateau */
System.out.println(" 1 2 3");
for(i=0;i<3;i++) {
System.out.println((i+1) +"|"+p[i][0]+"|"+p[i][1]+"|
"+p[i][2]+"|");
}
System.out.println("Au tour de "+pion);
System.out.println("Coordonnees ? (x,y)");
try {
tx=saisie.readLine();
y=saisie.readLine();
- 4 -
© ENI Editions - All rigths reserved - Jonifar lina
106
