program EljuegodelaVida; {Le damos el nombre al programa} Type matriz=array[1..10,1..10] of boolean; {Establecemos el tamaño de la matriz, en la que las opciones son viva o muerta para cada célula} procedure dibuja(m:matriz); var i,j:integer; begin for i:=1 to 10 do begin for j:=1 to 10 do begin if m[i,j] then write('1') else write('0'); end; writeln; end; end; procedure inicializarMatriz(var m:matriz); {Nos da una matriz inicial a partir de la cual evolucionamos} var probabilidad:real; i,j:integer; begin write('introduzca probabilidad de vida entre 0 y 1: '); read(probabilidad); for i:=1 to 10 do {Estos son los bordes de la matriz, que está formado de células muertas} begin m[1,i]:=false; m[10,i]:=false; m[i,1]:=false; m[i,10]:=false; end; for i:=2 to 9 do begin for j:=2 to 9 do begin if(random<=probabilidad) then m[i,j]:=true else m[i,j]:=false; end; end; dibuja(m); end; procedure Ejecucion(m:matriz); type datosJuego=Record turnos:integer; X,Y,Z:integer; modo:boolean; end; var datos:datosJuego; modo:integer; vivas,turn,i,j:integer; m2:matriz; begin m2:=m; write('Introduzca numero de turnos: '); read (datos.turnos); write('Introduzca X (3 por defecto): '); read(datos.X); if((datos.X<1) OR (datos.X>8)) then begin datos.X:=3; end; write('Introduzca Y (2 por defecto): '); {Marcamos el nº de células adyacetnes para que la célula viva o muera} read(datos.Y); if((datos.Y<1) OR (datos.Y>8)) then begin datos.Y:=2; end; write('Introduzca Z (3 por defecto): '); read(datos.Z); if((datos.Z<1) OR (datos.Z>8)) then begin datos.Z:=3; end; write('modo paso a paso(1) modo solo resultados <>1): '); read(modo); if(modo=1) then datos.modo:=true else datos.modo:=false; for turn:=1 to datos.turnos do begin for i:=2 to 9 do begin for j:=2 to 9 do begin vivas:=0; if m[i-1,j-1] then inc(vivas); {Condiciones para hacer un recuento de células vivas adyacentes} if m[i-1,j] then inc(vivas); if m[i-1,j+1] then inc(vivas); if m[i,j-1] then inc(vivas); if m[i,j+1] then inc(vivas); if m[i+1,j-1] then inc(vivas); if m[i+1,j] then inc(vivas); if m[i+1,j+1] then inc(vivas); if m[i,j] then begin if ((datos.Y>vivas) OR (vivas>datos.Z)) then m2[i,j]:=false; end else begin if vivas=datos.X then m2[i,j]:=true; end; end; end; m:=m2; if datos.modo then begin dibuja(m); readln(modo); end; end end; var m:matriz; begin randomize; {Nos aseguramos de la aleatoriedad del random y de que no se repita} writeln(' El Juego de la Vida '); writeln(' '); writeln('Este juego simula el crecimiento de distintas células'); inicializarMatriz(m); {Llamamos a los procedimientos} ejecucion(m); end. ---------------------------- (añadido tras someter) ---------------------------- 10:36:39 11/12/09 -> Segun los datos introducidos los ficheros son: G13P09D2 -> Los autores del trabajo son: Cabrero Sopena, David Gómez Pérez, Marta Nombres originales de los archivos entregados -> DISEÑO2.PAS, Diseño2.txt