PRÀCTICA Nº 3: 1 sessió
(des de 3 d’Abril a 9 d’Abril de 1998)Llistes. Simulador de Traca
Objectius
Implementació de les estructures de dades necessàries per a definir una llista circular doblement enllaçada i de funcions que realitzen operacions bàsiques sobre estes llistes.
Aplicació d’estes definicions i funcions a la implementació del simulador d’una traca.
Especificacions
Es pot considerar una traca com una llista enllaçada de petards, de tal manera que el orde en el que estan en la llista defineix l’orde en que aniran esclafint. L’objectiu d’esta pràctica és escriure un programa que deixe definir interactivament una traca composta de múltiples petards, distribuïts sobre una plaça bidimensional, modificar les seus característiques (potència, posició en la plaça i temps de durada de la metxa en segons), i per fi encendre la traca i contemplar la simulació.
Per a la implementació de la llista de petards s’utilitzarà la següent 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.
Tot el programa ha de ser escrit en un únic fitxer anomenat
Traca.pas i ha de contindre entre atres els següents procediments:Per a la representació gràfica d’esta pràctica es proporcionarà una unitat ja compilada, de nom
tracaaux.tpu que conté totes les funcions necessàries per a realitzar la interficie gràfica amb l’usuari. El contingut de la unitat es detalla a continuació.Contingut de la unitat Tracaaux.tpu
S’ha de considerar que els petards estan distribuïts en una plaça de dimensions
AnchoPlaza x AltoPlaza (definides en tracaaux.tpu). En esta unitat també s’encontren definides les següents funcions:Procedure DibujarFondo;
Dibuixa la part de la pantalla que està sempre dibuixada, es a dir, el text que indica les opcions i les barres que separen les distintes zones de la pantalla (mireu Figura).
Procedure VaciarPlaza;
Dibuixa la plaça buida, es a dir, esborra les coses s’havien dibuixat anteriorment en eixa zona.
Procedure MostrarInfoPetardo(x ,y ,tam ,mecha:integer);
Dibuixa les dades d’un petard en el cantó inferior dret de la pantalla (mireu Figura).
Procedure Retardo(segs: integer);
Produeix un retard d’aproximadament segs segons. S’utilitza per a simular el temps que tarda en consumir-se la metxa de cada petard .
Procedure DibujarPetardo(x ,y ,tamanho ,modo :integer);
Dibuixa un petard en la plaça en la posició indicada per les coordenades x i y. La variable tamanho fa referència a la potencia del petard i pot prendre tres valors diferents definides com a constants en
tracaaux.tpu: TamGrande (=0), TamMedio (=1) i TamPeque (=2). La variable modo fa referència a la forma en que ha de representar-se el petard en pantalla, i pot prendre els següents valors: ModoNormal que es el estat normal del petard, ModoSelect mode en el que apareix el petard que esta seleccionat, ModoExplos que representa el petard en el moment de esclafir, i ModoFinal que representa el petard una volta ha esclafit.Els petards en mode normal es dibuixen com símbols quadrats (¦ grandària menuda, ¦ grandària mitjana ¦ grandària gran). El petard seleccionat es dibuixa amb els mateixos símbols, però emprant un color especial. Els petards que ja han explotat es dibuixen amb una X i el que està esclafint es dibuixa amb un array de caràcters (mireu Figura).
Interficie amb l’usuari
El programa ha de presentar les següents opcions (tal i com es pot observar en la figura):
En la pràctica açó es podria implementar amb la utilització d’un bucle
Repeat..Until en el que es llegirà el valor de la tecla polsada usant la funció ReadKey.Tasques Opcionals
Realitzar una versió modificada del procediment
GenerarPetsAlAzar que genere una traca, però ordenada de menor a major grandària (es a dir, que esclaten al final els mes grans). Esta opció s’activarà amb la tecla v.
LLIURAMENT DE PROGRAMES: Al finalitzar la sessió de pràctiques corresponent.