/* 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
Précédent

- 106/220

Suivant