PRÁCTICA Nº 3: 1 sesión (del 3 de Abril al 9 de Abril de 1998)

Listas. Simulador de Traca

Objetivos

Implementación de las estructuras de datos necesarias para definir una lista circular doblemente enlazada y de funciones que permitan realizar operaciones básicas sobre dicha lista.

Aplicación de esta lista a la implementación del simulador de una traca.

Especificaciones

Se puede considerar una traca como una lista enlazada de petardos, de tal modo que el orden en el que están colocados en la lista define el orden en el que éstos irán estallando. El objetivo de esta práctica es crear un programa que permita definir interactivamente una traca compuesta de múltiples petardos, distribuirlos sobre una plaza bidimensional, modificar sus características (potencia, posición en la plaza y tiempo de duración de la mecha en segundos), y por fin encender la traca y contemplar la simulación.

Para la implementación de la lista de petardos se utilizará la siguiente estructura:

Petardo = Registro

x : 1..AnchoPlaza; (* Posición ‘x’ del petardo en la plaza *)

y : 1..AltoPlaza; (* Posición ‘y’ del petardo en la plaza *)

mecha: 1..4; (* Duración de su mecha *)

tam : TamGrande..TamPeque; (* Tamaño del petardo *)

sig : Puntero a Petardo; (* Puntero al siguiente en la lista *)

ant : Puntero a Petardo; (* Puntero al anterior en la lista *)

Fin_Registro.

Todo el programa ha de ser escrito en un único fichero llamado Traca.pas y ha de contener entre otros los siguientes procedimientos:

Para la representación gráfica de esta práctica se proporcionará una unidad ya compilada, de nombre tracaaux.tpu que contiene todas las funciones necesarias para realizar la interfaz gráfica con el usuario. El contenido de la unidad se detalla a continuación.

Contenido de la unidad Tracaaux.tpu

Se ha de considerar que los petardos están distribudidos en una plaza de dimensiones AnchoPlaza x AltoPlaza (definidas en tracaaux.tpu). En dicha unidad también se encuentran definidas las siguientes funciones:

Procedure DibujarFondo;

Dibuja la parte de la pantalla que permanece siempre dibujada, es decir el texto que indica las opciones y las barras que separan las distintas zonas de la pantalla (ver Figura).

Procedure VaciarPlaza;

Dibuja la plaza vacía, es decir borra las cosas que habían sido dibujadas anteriormente en esa zona.

Procedure MostrarInfoPetardo(x ,y ,tam ,mecha:integer);

Dibuja los datos de un petardo en la esquina inferior derecha de la pantalla (ver Figura).

Procedure Retardo(segs: integer);

Produce un retardo de aproximadamente segs segundos. Se utiliza para simular el tiempo que tarda en consumirse la mecha de cada petardo .

Procedure DibujarPetardo(x ,y ,tamanho ,modo :integer);

Dibuja un petardo en la plaza en la posición indicada por las coordenadas x e y. La variable tamanho hace referencia a la potencia del petardo y puede tomar tres valores distintos definidos como constantes en tracaaux.tpu: TamGrande ( =0), , TamMedio ( =1) y TamPeque ( =2). A su vez la variable modo hace referencia a la forma en que ha de ser representado el petardo en pantalla, y puede tomar los siguientes valores: ModoNormal que es el estado normal del petardo , ModoSelect modo en el que aparece el petardo que esta seleccionado, ModoExplos que representa al petardo en el momento de estallar, ModoFinal que representa al petardo una vez que ha estallado.

Los petardos en modo normal se dibujan como símbolos cuadrados ( ¦ Tamaño Pequeño, ¦ Tamaño mediano ¦ Tamaño Grande). El petardo seleccionado se dibuja con los mismos símbolos, pero empleando un color especial. Los petardos que ya han explotado se dibujan con una X y el que está estallando se dibuja con un pequeño array de caracteres (ver Figura).

Interface con el usuario

El programa ha de presentar las siguientes opciones (tal y como se puede observar en la figura) :

En la práctica esto podría ser implementado mediantr la utilización de un bucle Repeat..Until en el que se lea el valor de una tecla pulsada usando la función ReadKey.

Tareas Opcionales

Realizar una versión modificada del procedimiento GenerarPetsAlAzar que genere una traca, pero ordenada de menor a mayor tamaño (es decir, que estallen al final los mas grandes). Esta opción será activada con la tecla v.

ENTREGA DE PROGRAMAS: Al finalizar la sesión de prácticas correspondiente.