1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| program morpion;
const Nmax = 7;
type jeu = array [1..Nmax,1..Nmax] of char;
procedure init (var T : jeu);
var x,y : integer;
begin
for x := 1 to Nmax do
for y := 1 to Nmax do
T[x,y] := '_'
end;
procedure aff(T : jeu);
var x,y : integer;
begin
for x := 1 to Nmax do
begin
for y:= 1 to Nmax do
write(' | ',T[x,y]);
writeln
end
end;
procedure change (var j : char);
begin
if j = 'X' then j := 'O'
else j := 'X'
end;
procedure valide (var T : jeu; j : char);
var x,y : integer;
verif : boolean;
begin
verif := false;
repeat
write('No ligne et colonne :');
readln(x,y);
if T[x,y] = '_' then
begin
T[x,y] := j;
verif := true
end
else writeln('Coup non valide !')
until (verif)
end;
function rempli (T : jeu) : boolean; // Savoir si la partie est terminée parce que la grille est remplie (en grille 7*7 c'est pourtant peu probable :D)
var i,j : integer;
begin
rempli := true;
for i := 1 to Nmax do
for j := 1 to Nmax do
if T[i,j] = '_' then rempli := false
end;
function gagnant (T : jeu) : char; // Ne fonctionne apparemment pas, pas d'erreur à l'exécution pourtant :S
var i,j : integer;
begin
gagnant:= 'r';
i := 1;
while (i <= Nmax) and (gagnant = 'r') do
begin
gagnant := T[i,1];
for j := 1 to 4 do
if T[i,j] = T[i,j+1] then gagnant := 'r'; // En fait à chaque début de ligne il va vérifier si 5 pions se suivent
i := i + 1;
end;
j := 1;
while (j <= Nmax) and (gagnant = 'r') do
begin
gagnant := T[1,j];
for i := 1 to 4 do
if T[i,j] = T[i+1,j] then gagnant := 'r'; // Pareil pour les colonnes :)
j := j + 1
end
end;
var T : jeu; j : char;
begin
init(T);
j := 'O';
aff(T);
while (gagnant(T) = 'r') and not(rempli(T)) do
begin
change(j);
valide(T,j);
aff(T)
end;
if rempli(T) then writeln('Egalite !') else writeln('Gagnant : ',gagnant(T));
readln
end. |
Partager