Soyez le premier à donner votre avis sur cette source.
Snippet vu 12 372 fois - Téléchargée 32 fois
PROGRAM feu_de_foret; {by FHR} USES Crt; TYPE matrice = ARRAY [1..40,1..40] OF WORD; VAR t,tab1,tab2:matrice; s:CHAR; nbretours:WORD; bol:BOOLEAN; dens:WORD; PROCEDURE Affiche (tab:matrice); VAR i,j:WORD; BEGIN FOR i:=1 TO 40 DO BEGIN FOR j:=1 TO 40 DO BEGIN IF tab[i,j]=0 THEN Write(' '); IF tab[i,j]=1 THEN Write('X'); IF tab[i,j]=2 THEN BEGIN Textcolor(red); Write('O'); Textcolor(white); END; END; Writeln; END; END; PROCEDURE Aleat (VAR tab:matrice;d:WORD); VAR i,j,pif:WORD; BEGIN Randomize; FOR i:=1 TO 40 DO BEGIN FOR j:=1 TO 40 DO BEGIN pif:=Random(101); IF pif<d THEN tab[i,j]:=1 ELSE tab[i,j]:=0; END; Writeln; END; tab[Random(41),Random(41)]:=2; {cree un départ de feu} END; PROCEDURE Tabnul (VAR tab:matrice); VAR i,j:WORD; BEGIN Randomize; FOR i:=1 TO 40 DO BEGIN FOR j:=1 TO 40 DO tab[i,j]:=0; Writeln; END; END; FUNCTION Compte(i,j:WORD;tabl:matrice):WORD; {compte le nombre de cellules voisines} BEGIN IF (i<>1) AND (i<>40) AND (j<>1) AND (j<>40) THEN {cellule sympa} Compte:=tabl[i-1,j-1] DIV 2 + tabl[i-1,j] DIV 2 + tabl[i-1,j+1] DIV 2 +tabl[i,j-1] DIV 2 + + tabl[i,j+1] DIV 2 +tabl[i+1,j-1] DIV 2 + tabl[i+1,j] DIV 2 + tabl[i+1,j+1] DIV 2; IF i=1 THEN BEGIN IF j=1 THEN Compte:=tabl[1,2] DIV 2+tabl[2,2] DIV 2+tabl[2,1] DIV 2; IF j=40 THEN Compte:=tabl[1,39] DIV 2+tabl[2,39] DIV 2+tabl[2,40] DIV 2; IF (j<>1) AND (j<>40) THEN Compte:=tabl[1,j-1] DIV 2+tabl[1,j+1] DIV 2 +tabl[2,j-1] DIV 2+tabl[2,j] DIV 2+tabl[2,j+1] DIV 2; END; IF i=40 THEN BEGIN IF j=1 THEN Compte:=tabl[39,1] DIV 2+tabl[39,2] DIV 2+tabl[40,2] DIV 2; IF j=40 THEN Compte:=tabl[39,40] DIV 2+tabl[39,39] DIV 2+tabl[40,39] DIV 2; IF (j<>1) AND (j<>40) THEN Compte:=tabl[40,j-1] DIV 2+tabl[40,j+1] DIV 2+ tabl[39,j-1] DIV 2+tabl[39,j] DIV 2+tabl[39,j+1] DIV 2; END; IF (j=1) AND ((i<>1) AND (i<>40)) THEN Compte:=tabl[i-1,1] DIV 2+tabl[i+1,1] DIV 2+ tabl[i-1,2] DIV 2+tabl[i,2] DIV 2+tabl[i+1,2] DIV 2; IF (j=40) AND ((i<>1) AND (i<>40)) THEN Compte:=tabl[i-1,40] DIV 2+tabl[i+1,40] DIV 2 +tabl[i-1,39] DIV 2+tabl[i,39] DIV 2+tabl[i+1,39] DIV 2; END; PROCEDURE Evoluer(VAR tab:matrice); VAR i,j,k:WORD;buff:matrice; BEGIN FOR i:=1 TO 40 DO BEGIN FOR j:=1 TO 40 DO BEGIN k:=compte(i,j,tab); IF tab[i,j]=0 THEN buff[i,j]:=0; IF tab[i,j]=1THEN IF k=0 THEN buff[i,j]:=1 ELSE buff[i,j]:=2; IF tab[i,j]=2 THEN buff[i,j]:=0; END; END; tab:=buff; END; FUNCTION Comp(t1,t2:matrice):BOOLEAN; VAR i,j:WORD;bol:BOOLEAN; BEGIN i:=1; bol:=TRUE; WHILE (bol<>FALSE) AND (i<=40) DO BEGIN FOR j:=1 TO 40 DO IF t1[i,j]<>t2[i,j] THEN bol:=FALSE; i:=i+1; END; Comp:=bol; END; BEGIN bol:=FALSE; Clrscr; Write('Entree pour commencer'); Readln; REPEAT Write('Densit d arbres (%) ?'); readln(dens); nbretours:=0; Aleat(t,dens); REPEAT Delay(50); Clrscr; Writeln('Etape',nbretours); Writeln; Affiche(t); tab1:=t; nbretours:=nbretours+1; Evoluer(t); tab2:=t; bol:=Comp(tab1,tab2); UNTIL bol=TRUE; writeln('Fin.'); writeln('Encore ?'); readln(s); UNTIL s<>'o'; END.
21 juin 2004 à 18:52
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.