----------------------------------------------------------------------- -- Programa: MINAS -- Programador: Miguel Flores Jaime (F5179622) -- Fecha: Noviembre 1998 -- Modificado por: - -- Fechas Modificacion: - ------------------------------------------------------------------------ -- Este programa es un juego en el que se trata de hacer llegar a -- nuestro protagonista al otro lado de un campo minado en el que hay -- 35 minas repartidas aleatoriamente (funciones: xaleatorio, yaleatorio) -- sin que le explote ninguna. El campo esta representado por una matriz -- booleana de 80 x 24 (array: campo_minas) en la que TRUE representa -- mina y FALSE vac¡o. -- Un problema que queda por solucionar es conseguir leer caracteres del -- teclado sin necesidad de pulsar enter. ------------------------------------------------------------------------ with Ada.Text_IO, Ada.Numerics.Discrete_Random, Screen; use Ada.Text_IO, Screen; PROCEDURE MINAS IS ------------------------------ VARIABLES ------------------------------------- xpos, ypos: integer; xmina, ymina: integer; campo_minas: array (1..80 ,1..24) of boolean; num_minas: integer; caracter: character; ----------------------- PROCEDIMIENTOS Y FUNCIONES --------------------------- FUNCTION xaleatorio RETURN integer IS subtype tp_rango is positive range 1..80; package random_80 IS NEW Ada.Numerics.Discrete_Random(tp_rango); g: random_80.Generator; begin random_80.Reset(g); return (random_80.Random(g)); END xaleatorio; FUNCTION yaleatorio RETURN integer IS subtype tp_rango is positive range 1..24; package random_24 IS NEW Ada.Numerics.Discrete_Random(tp_rango); g: random_24.Generator; begin random_24.Reset(g); return (random_24.Random(g)); END yaleatorio; PROCEDURE borrar_matriz IS i,j: integer; begin i:=1;j:=1; while (j<=24) loop while (i<=80) loop campo_minas(i,j):=FALSE; i:=i+1; end loop; i:=1; j:=j+1; end loop; END borrar_matriz; PROCEDURE dibujar_minas IS i,j: integer; begin i:=1;j:=1; while (j<=24) loop while (i<=80) loop if (campo_minas(i,j)=TRUE) then move_cursor(Row=>j,Column=>i); put("X"); end if; i:=i+1; end loop; i:=1; j:=j+1; end loop; END dibujar_minas; -------------------------------- PRINCIPIO ----------------------------------- BEGIN clear_screen; move_cursor(Row=>1,Column=>1); put("Movimientos:"); new_line; put("[ q: arriba, a: abajo, o: izquierda, p: derecha ] + ENTER."); new_line; put("Introduce cualquier caracter para continuar..."); get(caracter); borrar_matriz; num_minas:=0; while(num_minas<35) loop xmina:=xaleatorio; ymina:=yaleatorio; if(campo_minas(xmina,ymina)=FALSE) then campo_minas(xmina,ymina):=TRUE; num_minas:=num_minas+1; end if; end loop; clear_screen; xpos:=40; ypos:=24; while(ypos/=1) AND (campo_minas(xpos,ypos)=FALSE) loop move_cursor(Row=>ypos,Column=>xpos); put("O"); move_cursor(Row=>1,Column=>1); get(caracter); move_cursor(Row=>ypos,Column=>xpos); put(" "); if(caracter='q') AND (ypos/=1) then ypos:=ypos-1; end if; if(caracter='a') AND (ypos/=24) then ypos:=ypos+1; end if; if(caracter='p') AND (xpos/=80) then xpos:=xpos+1; end if; if(caracter='o') AND (xpos/=1) then xpos:=xpos-1; end if; end loop; dibujar_minas; move_cursor(Row=>1,Column=>1); if (ypos=1) AND (campo_minas(xpos, ypos)=FALSE) then put("ENHORABUENA!!! HAS LOGRADO ATRAVESAR EL CAMPO DE MINAS."); else put("BOOOOOMMMMM!!! ESTAS MUERTO."); move_cursor(Row=>ypos,Column=>xpos); put("*"); end if; END MINAS; ----------------------------------- FIN --------------------------------------