PROGRAM SuperMegaHiperPeroNoMenosDivertidoJuegoDeLaVidaYaQueLaVidaPuedeSerMaravillosa; USES crt; TYPE matriz = ARRAY [1..20,1..20] OF integer; {Se hace las matrices} copia = ARRAY [1..20,1..20] OF integer; Procedure rellenar (numero : integer); {Este procedimiento rellena el 20 por cien del tablero} Var e, f, g : integer; mat1 : matriz; Begin clrscr; gotoXY (1,1); For e := 1 to numero do Begin {Se rellena el tablero incluidos los bordes} For f := 1 to numero do Begin g := random(10); {porcien (g)} If (g = 2) or (g = 1) then Begin mat1 [e,f] := 1; End Else Begin mat1 [e,f] := 0; End; End; End; For e := 1 to numero do {Los vordes se rellenan con celulas muertas} mat1 [e,1] := 0; For e := 1 to numero do mat1 [e,numero] := 0; For e := 1 to numero do mat1 [1,e] := 0; For e := 1 to numero do mat1 [numero,e] := 0; For e := 1 to numero do Begin For f := 1 to numero do {Se escriben las celulas vivas de colores} Begin gotoXY (e,f); If (mat1 [e,f] = 1) then Begin Textcolor (6); write ('#'); normvideo; End Else Begin write ('#'); End; End; End; End; Procedure copiamatriz (lado : integer); {Copia una matriz en la otra} Var e, f : integer; cop : copia; mat1: matriz; Begin For e := 1 to lado do Begin For f := 1 to lado do mat1 [e,f] := cop [e,f]; End; End; Procedure rellenamatcopia (cass, xx ,yy, zz : integer); {Este procedimiento rellena el tablero copia comparandolo con le mat1} Var a, b, c, d, e, f, g, h, vivamuerta, x, y, cuenta : integer; cop : copia; mat1: matriz; Begin For x := 2 to (cass-1) do Begin For y := 2 to (cass-1) do begin a := mat1 [x-1,y-1]; {Si algo falla cambiar la x por la y} b := mat1 [x,y-1]; c := mat1 [x+1,y-1]; d := mat1 [x-1,y]; e := mat1 [x+1,y]; f := mat1 [x-1,y+1]; g := mat1 [x,y+1]; h := mat1 [x+1,y+1]; cuenta := a+b+c+d+e+f+g+h; vivamuerta := mat1 [x,y]; cop [x,y]:= mat1 [x,y]; If (vivamuerta = 0) And (cuenta = xx) then begin cop [x,y]:= 1; end; if (vivamuerta = 1) OR ((cuenta < yy) And (cuenta > zz)) then begin cop [x,y]:= 0; end; end; end; end; Procedure dibujamatriz (nlado: integer); {Dibuja la matriz} var e, f: integer; mat5: matriz; begin For e := 1 to nlado do Begin For f := 1 to nlado do Begin gotoXY (e,f); If (mat5 [e,f] = 1) then Begin Textcolor (6); write ('#'); normvideo; End Else Begin write ('#'); End; end; end; end; VAR mat : matriz; x, y, z, p , pan, num, modo : integer; BEGIN clrscr; gotoXY (1,1); writeln ('Bienvenido al maravilloso juego de la vida'); writeln ('Introduzca un numero entre 4 y 20 de celdas por lado que desea que tenga el tablero'); readln (num); While (num < 4) OR (num > 20) do Begin writeln ('Este numero no es valido, introduzca uno entre 4 y 20'); readln (num); End; writeln ('Introduzca un numero entre 1 y 8 para que una celula MUERTA, en el siguiente turno VIVA'); readln (x); While (x < 1) OR (x > 8) do Begin writeln ('Este numero no es valido, introduzca uno entre 1 y 8'); readln (x); End; writeln ('Introduzca el valor minimo, entre 0 y 7, para que una celula VIVA en el siguiente turno se mantenga VIVA'); readln (y); While (y < 0) OR (y > 7) do Begin writeln ('Este numero no es valido, introduzca uno entre 0 y 7'); readln (y); End; writeln ('Introduzca el valor maximo, entre ',y+1,' y 8, para que una celula VIVA en el siguiente turno se mantenga VIVA'); readln (z); While (z <= y) OR (z > 8) do Begin writeln ('Este numero no es valido, introduzca uno entre ',y,' y 8'); readln (z); End; Writeln ('escribe el numero de pantallas de juego que sea entre dos y cien'); readln (p); While (p < 1) OR (p > 101) do Begin writeln ('Has introducido un numero que no esta entre 2 y 100 vuelve a introducirlo'); readln (p); End; Writeln('Indique con un "1" si quiere seguir el modo paso a paso, o con un "2" su quiere el modo solo resultados'); Readln (modo); While (modo <> 1) AND (modo <> 2) do Begin writeln ('Has introducido un numero que no esta entre 1 y 2 vuelve a introducirlo'); readln (modo); End; pan := 1; rellenar (num); while (pan < p) do {Repetira tantas veces como le indique el usuario} begin if (modo = 1) then readln; pan := pan +1; rellenamatcopia (num, x, y, z); copiamatriz (num); dibujamatriz (num); End; readln; End. ---------------------------- (aņadido tras someter) ---------------------------- 22:24:45 10/12/09 -> Segun los datos introducidos los ficheros son: G07P02D2 -> Los autores del trabajo son: Albesa Marin, Pablo Fernandez Jimenez, Fernando Nombres originales de los archivos entregados -> Vida.PAS, vida.TXT