El programa que hemos desarrollado es el del juego de la vida,que consiste basicamente en un tablero con celulas,unas vivas y otras muertas,las cuales van a ir reviviendo o por lo contrario,muriendo,segun el numero de turnos que quieras jugar y segun las reglas del juego.Las cuales van a ser predeterminadas o introducidas de nuevo. {Empiece del programa} program juegodelavida; {Aqui hemos introducido la funcion uses crt para poder meter colores(textcolor) y limpiar pantalla(clear)} uses crt; {Primeramente hemos creado una matriz de tamaño 100*100 por poner una longitud,ya que deberia ser de 4 a 20.} type tpmatriz=array[1..100,1..100] of char; {Seguidamente hemos creado el primer procedimiento,que es simplemente el menu del juego,con los correspondientes writeln,IORESULT...} procedure menu(var x:integer); begin repeat textcolor(yellow); writeln('-------------------'); writeln('[ ELJUEGODELAVIDA ]'); WRITELN('-------------------'); textcolor(green); writeln('MENU DEL JUEGO'); writeln('1-Generar mundo aleatorio'); writeln('2-Ejecuci¢n con valores por defecto'); writeln('3-Ejecuci¢n con valores introducidos por el usuario'); writeln('4-Salir'); writeln('5-Cargar mundo'); textcolor(white); writeln('Pulsa un n£mero para elegir la acci¢n que deseas realizar'); {$I-} readln(x); {$I+} until ioresult=0; {Restringimos entre 1-5} while (x<1) or(x>5) do repeat begin writeln('Pulsa un n£mero para elegir la acci¢n que deseas realizar'); readln(x); end; until (x>0) and (x<6); end; {Aqui comenzamos el segundo procedimiento que consiste en general el primer mundo,la primera matriz,pidiendo por pantalla tanto el tamaño del tablero,como la probabilidad de casillas vivas,todo ello con sus correspondientes restricciones( de 4-20,0-100)} procedure generarmundoaleatorio(var m1:tpmatriz ;var a:integer); VAR i,j,n:integer; p:real; begin begin{Pedir tamaño matriz} writeln('Has elegido: Generar mundo aleatorio'); repeat writeln('Dame el tamaño que quieres que tenga el tablero entre 4 y 20 casillas por lado'); {$I-} readln(a); {$I+} until ioresult=0; while (a<4)or (a>20) do repeat begin writeln('Dame el tamaño que quieres que tenga el tablero entre 4 y 20 casillas por lado'); {$I-} readln(a); {$I+} end; until (a>3)and(a<21); end; begin{Pedir probabilidad} repeat writeln('Dame la probabilidad de que cada casilla este viva,de 0 a 100.'); {$I-} readln(p); {$I+} until ioresult=0; while (p<0)or (p>100) do repeat begin writeln('Dame la probabilidad de que cada casilla este viva,de 0 a 100.'); readln(p); end; until (p>=0) and (p<=100); end; begin{rellenar matriz} Randomize; for i:=1 to a do for j:=1 to a do begin n:=random(100)+1; begin if (n<=p) then m1[i][j]:='x' else m1[i][j]:='o'; end; if (i=1)or(i=a)or(j=1)or(j=a)then {Para hacer que las de los lados salgan muertas} m1[i][j]:='o'; if j=a then writeln(m1[i][j]) else write(m1[i][j]); end; end; end; {Tercer procedure,es el encargado de crear las diferentes matrices segun el numero de turnos que haya,y con ello que vaya jugando en si,cambiandose las celulas segun las reglas. Para ello hemos utilizado 3 contadores,2 para que cuenten las celulas vecinas segun reglas y 1 para el numero de turnos. Este procedure es con valores predeterminados} Procedure ejecucion(vAR m1,m2:tpmatriz;var a:integer); var n,i,j,k,l,contador,contador1,contadorturnos,m,t:integer; const x=3; y=2; z=4; begin repeat writeln('¨Cuantos turnos quieres jugar?'); <------{Aqui tambien hay IORESULT} readln(n); until n>0; repeat {Para que te saque el resultado final o por el contrario,paso a paso} writeln('Si quieres que aparezca todos los turnos presiona 1,Si solo quieres ver el turno final pulsa 2'); readln(t); <------{Aqui tambien hay IORESULT} until (t<3)and (t>0); contadorturnos:=0; if t=1 then repeat for i:=2 to (a-1) do for j:=2 to (a-1) do {Todos estos FOR son para recorrer la matriz y que vaya mirando si estan vivas o muertas} begin contador:=0; contador1:=0; begin if m1[i][j]='o' then begin for k:=(i-1)to(i+1)do for l:=(j-1) to(j+1) do {begin} begin if m1[k][l]='x' then contador:=contador+1; end; if contador=x then m2[i][j]:='x' else m2[i][j]:='o'; {end} end else begin for k:=(i-1)to(i+1)do <----{Para que te recorra las celulas vecinas} for l:=(j-1)to(j+1) do { begin} begin if m1[k][l]='x' then contador1:=contador1+1; end; if (contador1>y) and (contador1<=z)then m2[i][j]:='x' else m2[i][j]:='o'; {end;} end; end; end; for i:=1 to a do for j:=1 to a do begin if (i=1)or(i=a)or(j=1)or(j=a)then m2[i][j]:='o'; if j=a then writeln(m2[i][j]) else write(m2[i][j]); end; contadorturnos:=contadorturnos+1; readln; for i:=1 to a do for j:=1 to a do m1[i][j]:=m2[i][j]; until contadorturnos= n; if t=2 then begin repeat for i:=2 to (a-1) do for j:=2 to (a-1) do begin contador:=0; contador1:=0; begin if m1[i][j]='o' then begin for k:=(i-1)to(i+1)do for l:=(j-1) to(j+1) do {begin} begin if m1[k][l]='x' then contador:=contador+1; end; if contador=x then m2[i][j]:='x' else m2[i][j]:='o'; {end} end else begin for k:=(i-1)to(i+1)do for l:=(j-1)to(j+1) do { begin} begin if m1[k][l]='x' then contador1:=contador1+1; end; if (contador1>y) and (contador1<=z)then m2[i][j]:='x' else m2[i][j]:='o'; {end;} end; end; end; contadorturnos:=contadorturnos+1; for i:=1 to a do for j:=1 to a do m1[i][j]:=m2[i][j]; until contadorturnos= n; if contadorturnos=n then for i:=1 to a do for j:=1 to a do begin if (i=1)or(i=a)or(j=1)or(j=a)then m2[i][j]:='o'; if j=a then writeln(m2[i][j]) else write(m2[i][j]); end; end; end; {Cuarto procedure,es basicamente igual que el anterior pero la unica diferencia es que los valores de X,Y,Z se los pides por pantalla,no son predeterminados.} Procedure ejecucion2(vAR m1,m2:tpmatriz;var a:integer); var n,i,j,k,l,contador,contador1,contadorturnos,m,t,x,y,z:integer; begin repeat writeln('¨Qu‚ valor le quieres dar a la x?'); readln(x); until (x>=0)and (x<=8); repeat writeln('¨Qu‚ valor le quieres dar a la y?'); readln(y); until (y>=0)and (y<=8); repeat writeln('¨Qu‚ valor le quieres dar a la z?'); readln(z); until (z>=0)and (z<=8)and (z>=y); repeat writeln('¨Cuantos turnos quieres jugar?'); readln(n); until n>0; repeat writeln('Si quieres que aparezca todos los turnos presiona 1,Si solo quieres ver el turno final pulsa 2'); readln(t); until (t<3)and (t>0); contadorturnos:=0; z:=z+1; if t=1 then repeat for i:=2 to (a-1) do for j:=2 to (a-1) do begin contador:=0; contador1:=0; begin if m1[i][j]='o' then begin for k:=(i-1)to(i+1)do for l:=(j-1) to(j+1) do {begin} begin if m1[k][l]='x' then contador:=contador+1; end; if contador=x then m2[i][j]:='x' else m2[i][j]:='o'; {end} end else begin for k:=(i-1)to(i+1)do for l:=(j-1)to(j+1) do { begin} begin if m1[k][l]='x' then contador1:=contador1+1; end; if (contador1>y) and (contador1<=z)then m2[i][j]:='x' else m2[i][j]:='o'; {end;} end; end; end; for i:=1 to a do for j:=1 to a do begin if (i=1)or(i=a)or(j=1)or(j=a)then m2[i][j]:='o'; if j=a then writeln(m2[i][j]) else write(m2[i][j]); end; contadorturnos:=contadorturnos+1; readln; for i:=1 to a do for j:=1 to a do m1[i][j]:=m2[i][j]; until contadorturnos= n; if t=2 then begin repeat for i:=2 to (a-1) do for j:=2 to (a-1) do begin contador:=0; contador1:=0; begin if m1[i][j]='o' then begin for k:=(i-1)to(i+1)do for l:=(j-1) to(j+1) do {begin} begin if m1[k][l]='x' then contador:=contador+1; end; if contador=x then m2[i][j]:='x' else m2[i][j]:='o'; {end} end else begin for k:=(i-1)to(i+1)do for l:=(j-1)to(j+1) do { begin} begin if m1[k][l]='x' then contador1:=contador1+1; end; if (contador1>y) and (contador1<=z)then m2[i][j]:='x' else m2[i][j]:='o'; {end;} end; end; end; contadorturnos:=contadorturnos+1; for i:=1 to a do for j:=1 to a do m1[i][j]:=m2[i][j]; until contadorturnos= n; if contadorturnos=n then for i:=1 to a do for j:=1 to a do begin if (i=1)or(i=a)or(j=1)or(j=a)then m2[i][j]:='o'; if j=a then writeln(m2[i][j]) else write(m2[i][j]); end; end; end; {Comienzo programa principal} var x1,anchura:integer; matriz,matriz2:tpmatriz; begin repeat menu(x1); {Aqui simplemente hemos llamado a los procedimientos antes descritos,numerandolos segun el menu.} if x1=1 then generarmundoaleatorio(matriz,anchura); if x1=2 then ejecucion(matriz,matriz2,anchura); if x1=3 then ejecucion2(matriz,matriz2,anchura); until x1=4 end. {Fin del Programa} {Por ultimo comentar,que no hemos metio el fichero cargar_mundo por desconocer como hacerlo} ---------------------------- (añadido tras someter) ---------------------------- 18:08:53 11/12/09 -> Segun los datos introducidos los ficheros son: G07P06D2 -> Los autores del trabajo son: Bueno Latorre , David Valero Martin, Miguel Nombres originales de los archivos entregados -> JUEGODEL.PAS, JUEGODELAVIDA.txt