----------------------------------------------------------------------- -- Procedimiento: REBOTE -- Programador: Miguel Flores Jaime (F5179622) -- Fecha: Noviembre 1998 -- Modificado por: - -- Fechas Modificacion: - ------------------------------------------------------------------------ -- Este programa muestra una pelota rebotando en en las paredes de la -- pantalla (s¢lo si est  a 80 x 25 caracteres), partiendo de una -- posici¢n aleatoria (funciones: xaleatorio, yaleatorio). En realidad -- lo que se ve en pantalla no es m s que la representaci¢n -- (procedimiento: dibujar_matriz) de una matriz booleana de 80 x 24 -- (array: pantalla), donde TRUE es la pelota y FALSE el vac¡o. El -- c¢digo se podr¡a haber hecho much¡simo menos extenso sin el uso de -- matrices, pero yo entend¡ que en eso consist¡a el ejercicio. ------------------------------------------------------------------------ with Ada.Text_IO, Ada.Numerics.Discrete_Random, Screen; use Ada.Text_IO, Screen; PROCEDURE REBOTE IS ------------------------------ VARIABLES ------------------------------------- FRAMES: constant:=200; xpos, xvar, ypos, yvar: integer; pantalla: array (1..80 ,1..24) of boolean; i: integer; ----------------------- 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 pantalla(i,j):=FALSE; i:=i+1; end loop; i:=1; j:=j+1; end loop; END borrar_matriz; PROCEDURE dibujar_matriz IS i,j: integer; begin i:=1;j:=1; while (j<=24) loop while (i<=80) loop if (pantalla(i,j)=TRUE) then move_cursor(Row=>j-yvar,Column=>i-xvar); --Borra la posici¢n anterior put(" "); move_cursor(Row=>j,Column=>i); put("O"); end if; i:=i+1; end loop; i:=1; j:=j+1; end loop; END dibujar_matriz; -------------------------------- PRINCIPIO ----------------------------------- begin i:=0; xpos:= xaleatorio; xvar:=1; ypos:= yaleatorio; yvar:=1; clear_screen; while(i