home *** CD-ROM | disk | FTP | other *** search
- program jdlavie;
- uses crt;
- const
- nbl=24;
- nbc=80;
- cstrep=1;
- popproie=500;
- poppredateur=50;
- cstrepredateur=3;
- cstvie=8;
- croissanceproie=2;
- croissancepredateur=3;
- poptueur=0;
- cstueur=3;
- cstvietueur=15;
-
-
- type
-
- tableau=ARRAY[1..nbc+2,1..nbl+2] of integer;
-
- var t1,t3,t5,t6,t7,t8:tableau;
- i,j,k,k2,gene: integer;
-
-
- PROCEDURE init;
- BEGIN
- for i:=1 to nbl+2 do
- for j:=1 to nbc+2 do BEGIN
- t1[j,i]:=0;
- t3[j,i]:=0;
- t5[j,i]:=0;
- t6[j,i]:=0;
- t7[j,i]:=0;
- t8[j,i]:=0;
- END;
- RANDOMIZE;
- for i:=1 to popproie do
- t1[random(nbc-10)+5,random(nbl-5)+2]:=1;
- for i:=1 to poppredateur do
- t3[random(nbc-10)+5,random(nbl-5)+2]:=1;
- for i:=1 to poptueur do
- t7[random(nbc-10)+5,random(nbl-5)+2]:=1;
-
- END;
- function F(j:byte):byte;
- BEGIN
- if (j=1) or (j=nbc-1) then if j=1 then F:=nbc-2 else F:=2
- else F:=j;
- END;
- function G(j:byte):byte;
- BEGIN
- if (j=1) or (j=nbl-1) then if j=2 then G:=nbl-2 else G:=2
- else G:=j;
- END;
-
-
- PROCEDURE OPTI(c,b,a:integer;var t1,t2,tr: TABLEAU);
- BEGIN
- if (t2[j-1*b,i-1*a]<>0) and (tr[j-1*b,i-1*a]=c) then
- BEGIN
- t2[F(j+1),G(i+1)]:=t2[j,i];
- t2[F(j+1*b),G(i+1*a)]:=t2[j,i];
- tr[F(j+1*b),G(i+1*a)]:=0
- end
- else
- BEGIN
- t2[F(j-1*b),G(i-1*a)]:=t1[j,i];t2[j,i]:=0;
- END;
- END;
-
- PROCEDURE transfert(var t1,tr: TABLEAU;c:integer);
- var R: byte;
- t2: TABLEAU;
- BEGIN
- t2:=t1;
- for i:=1 to nbl-1 do
- for j:=1 to nbc-1 do
- if t1[j,i]<>0 then
- BEGIN
- R:=random(4);
- case R of
- 0:opti(c,1,0,t1,t2,tr);
- 1:opti(c,-1,0,t1,t2,tr);
- 2:opti(c,0,-1,t1,t2,tr);
- 3:opti(c,0,1,t1,t2,tr);
- END;
- END;
- t1:=t2;
- END;
-
- PROCEDURE affichage;
- var compt,nbrequin,nbtueur: integer;
- BEGIN
- GOTOXY(1,1);
- compt:=0;nbrequin:=0;nbtueur:=0;
- for i:=2 to nbl-2 do
- for j:=2 to nbc+1 do
- if t7[j,i]>0 then BEGIN nbtueur:=nbtueur+1;
- textcolor(4);
- write('@'); end else
- if t3[j,i]>0 then BEGIN nbrequin:=nbrequin+1;
- textcolor(3);
- write('R'); end else
- case t1[j,i] of
- 1: BEGIN
- textcolor(1);write('o');
- compt:=compt+1;
- END;
- 0: BEGIN
- textcolor(1);write(' ');
- END;
- end;
- write('GENERATION :',gene,' ');
- write('POISSON ',compt,' ');write('REQUIN ',nbrequin,' ');
- write('TUEUR ',nbtueur,' ');
- end;
-
- PROCEDURE FAIM(var t3,t1,t:TABLEAU;b: byte);
- BEGIN
- for i:=2 to nbl+1 do
- for j:=2 to nbc+1 do
- BEGIN
- if (t3[j,i]>0) and ((t1[j,i]>0) or (t[j,i]>0)) then
- Begin
- t3[j,i]:=1;
- t1[j,i]:=0;
- t[j,i]:=0;
- END;
- if t3[j,i]>0 then t3[j,i]:=t3[j,i]+1;
- if t3[j,i]>=b then t3[j,i]:=0;
- END;
- END;
-
- PROCEDURE REPRODUCTION(var t:tableau;b:byte);
- BEGIN
- for i:=1 to nbl+1 do
- for j:=1 to nbc+1 do
- if (t[j,i]<b) then t[j,i]:=t[j,i]+1;
- END;
-
-
- BEGIN
- clrscr;
- init;
- gene:=0;
- affichage;
- REPEAT
- reproduction(t8,cstueur);
- transfert(t7,t8,cstueur);
- faim(t7,t3,t3,cstvietueur);
- for k2:=1 to croissancepredateur do
- BEGIN
- transfert(t3,t5,cstrepredateur);
- reproduction(t5,cstrepredateur);
- faim(t3,t1,t1,cstvie);
-
- END;
- for k:=1 to croissanceproie do
- BEGIN
- transfert(t1,t6,cstrep);
- reproduction(t6,cstrep);
- END;
- gene:=gene+1;
- affichage;
- UNTIL KEYPRESSED;
- readln;
- END.
-
-