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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
|
program test;
uses crt;
Const
NLIGNES = 1; //nombre de lignes du jeu
NCOLONNES = 120; //nombre de colonnes du jeu
CHAR_VIVANTE = '#'; //caractere a afficher pour une cellule vivante
CHAR_MORTE = '_'; //caractere a afficher pour une cellule morte
valeurExterieurGauche=FALSE;
valeurExterieurDroite=FALSE;
Type
tTerrain = array [1..NCOLONNES] of boolean;
//le terrain du jeu de la vie, un tableau a une dimensions
tRegle = array [0..7] of boolean;
//une regle (de naissance ou de survie) du jeu
Var
i,j:integer;
un, un_1: tTerrain;
choixUtilisateur : integer ; //le choix de l'utilisateur dans le menu
//pour rentrer la regle
function rentrerregle : tRegle;
var t : tRegle;
var rep: integer ;
begin
writeln('taper votre chiffre (1..256)');
readln(rep);
for i:=0 to 7 do
if (((rep-1) SHR i) mod 2)=1 then
t[i]:=true
else
t[i]:=false;
rentrerregle:=t;
end;
//affiche une case du jeu de la vie
procedure afficherCase(const b :boolean);
begin
if b then
write(CHAR_VIVANTE)
else
write(CHAR_MORTE);
end;
//retourne un booleen au hasard
function booleenHasard : boolean;
begin
if (random(2)=0) then
booleenHasard:=false
else
booleenHasard:=true;
end;
//rempli un terrain au hasard
function terrainHasard : tTerrain;
var rVal: tTerrain;
begin
randomize;
for i:=1 to NLIGNES do
for j:=1 to NCOLONNES do
rVal[j]:= booleenHasard;
terrainHasard:=rVal;
end;
procedure afficherTerrain(const t : tTerrain);
var j : integer;
begin
for j:=1 to NCOLONNES do
afficherCase(t[j]);
writeln;
end;
//fonction etat suivant
function etatSuivant(precedente,courant,suivante:boolean) : boolean;
var cas:integer;
var regle:tRegle;
begin
for j := 1 to NCOLONNES do
regle[j]:=False;
cas:=0;
if(precedente) then
cas := cas+4;
if(courant) then
cas := cas+2;
if(suivante) then
cas := cas+1;
etatSuivant :=regle[cas];
end;
//fonction qui compte les voisins
function quelvoisin (const generationCourante : tTerrain):tTerrain ;
var generationSuivante:tTerrain;
var m : integer;
begin
generationSuivante[1]:=etatSuivant(valeurExterieurGauche,generationCourante[1],generationCourante[2]);
for m:=2 to Ncolonnes-1 do
generationSuivante[m]:=etatSuivant(generationCourante[m-1],generationCourante[m],generationCourante[m+1]);
generationSuivante[Ncolonnes]:=etatSuivant(generationCourante[Ncolonnes-1],generationCourante[Ncolonnes],valeurExterieurDroite);
quelvoisin:=generationSuivante;
end;
procedure calculdesgenerations;
var i,j:integer;
var regle:tRegle;
begin
for j := 1 to NLIGNES do
begin
afficherTerrain(un);
for i := 1 to NColonnes do
un_1[i]:=regle[quelvoisin[i]];
un:=un_1;
end;
readln;
end;
// rentrer un motif manuellement
procedure Terrainmanuel(var t : tTerrain);
var c : char;
var pos : byte;
begin
pos := 0;
repeat
ClrScr;
afficherTerrain(t);
Writeln('Appuyer sur ''q'' pour terminer.');
gotoXY(pos,1);
c := readkey;
case c of
'K' : if (pos>1) then
pos := pos-1;
'M' : if (pos<120) then
pos := pos+1;
' ' : t[pos] := not(t[pos]);
end;
gotoXY(pos,1);
until ((c='Q') OR (c='q'))
end;
//Menu
function afficherMenu : integer;
var rVal : integer;
begin
ClrScr;
writeln('0 : Saisir un motif de depart');
writeln('1 : Generer un motif de depart aleatoire');
writeln('2 : choix de la regle');
writeln('3 : Lancer le jeu de la vie');
//writeln('4 : choix du nombre de generations');
writeln('5 : Quitte le jeu');
readln(rVal);
afficherMenu:=rVal;
end;
procedure effectuerMenu(const i : integer);
begin
case i of
0 : Terrainmanuel(un);
1 : Un := terrainHasard;
2 : rentrerregle;
3 : calculdesgenerations;
{4 : begin
ClrScr;
writeln('Nombre maximum de generations : ');
readln(generationMaxi);
end;
}
end;
end;
//Programme principal
begin
//initialisation des variables
//generationMaxi := 40;
//rep:=30;
//repete le menu jusqu'a ce que l utilisateur quitte le jeu
repeat
choixUtilisateur := afficherMenu;
effectuerMenu (choixUtilisateur);
until (choixUtilisateur=5)
end. |
Partager