Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
-PacMan- - entita.pas

entita.pas

Caricato da:
Scarica il programma completo

  1. (*Nome modulo:  entita*)
  2. (*Versione:             0.7-beta*)
  3. (*Licenza:              GNU GPL*)
  4. (*Rilascio:             08/07/2010*)
  5. (*Autore:               Francesco Marrone (alias Giarados)*)
  6. (*Descrizione:  in questo modulo viene descritta la classe entita da cui
  7.                                 ereditano ghosts e pacmen. Si è preferito raggruppare i campi
  8.                                 in comune tra le due classi in modo tale da non vederli
  9.                                 ripetuti nelle loro dichiarazioni. *)
  10.  
  11.  
  12. unit entita;
  13.  
  14. interface
  15.  
  16. {queste variabili vengono utilizzate nel main delle classi
  17. ghosts e pacmen per regolare i propri stati}
  18.  
  19. {quando pacman mangia un supercibo setta questa variabile a true. Di conseguenza tutti i fantasmi fuggono e sono "commestibili"}
  20. var fuga:boolean;
  21.  
  22. {se pacman riceve ESC setta questa variabile a true. allora il ciclo principale del main del gioco viene terminato}
  23. var uscita:boolean;
  24.  
  25. {Quando pacman viene mangiato setta questa variabile true. Tutti i fantasmi e pacman stesso vengono reinizzializzati
  26. alle loro posizioni iniziali}
  27. var killato:boolean;
  28.  
  29. {Quando pacman viene killato con 0 vite setta questa variabile true. Si esce in automatico dal main del gioco}
  30. var gameover:boolean;
  31.  
  32. {Se pacman mangia tutto il cibo allora setta vittoria a true. Ciò fa reinizzializzare tutte le entità in gioco
  33. e aumenta di 1 le vite di pacman}
  34. var vittoria:boolean;
  35.  
  36. {Rappresenta il livello di gioco. Ogni volta che vittoria=true questa variabile viene incrementata di 1.}
  37. var livello:byte;
  38.  
  39. {Funzione che restituisce l'orario attuale espresso in secondi
  40. a partire dalla mezzanotte}
  41. function  tempo:real;
  42.  
  43.  
  44. {utilizzando la funzione tempo la procedura pausa è un'alternativa
  45. a delay (contenuta in crt)
  46. NOTA: va sostituita in tutti i moduli a delay}
  47. procedure pausa(t:real);
  48.  
  49.  
  50. {Definizione della classe entita.}
  51. type
  52.         _entita=object
  53.        
  54.         protected
  55.        
  56.                 {rappresentato l'ascissa e l'ordinata corrente
  57.                 dell'entità}
  58.                 x:byte;
  59.                 y:byte;
  60.                
  61.                 {sono le coordinate da cui sbucano fuori le entita}
  62.                 x_iniziale:byte;
  63.                 y_iniziale:byte;
  64.                
  65.                 {Descrivono il movimento in x e y.}
  66.                 vettore_x:shortint;
  67.                 vettore_y:shortint;
  68.                
  69.                 nospace:boolean;
  70.                
  71.                 {il campo colore era utilizzato nelle prime versioni
  72.                 dato che ancora il gioco non utilizzava le bitmaps.
  73.                 Come è facilmente intuibile rappresentano il colore
  74.                 delle entita.
  75.                 PS: ancora è utile codesto campo}
  76.                 colore:byte;
  77.                
  78.                 {Se settata a true allora i ghosts fuggono e pacman sa che
  79.                 i ghosts stanno fuggendo}
  80.                 infuga:boolean;
  81.                
  82.                 {Sarebbe il contatore che dice:
  83.                 "-3 secondi e torni allo stato normale"
  84.                 "-2 secondi e torni allo stato normale"
  85.                 "-1 secondi e torni allo stato normale"
  86.                 anche pacman la usa:
  87.                 "-3 secondi e non li posso più mangiare"
  88.                 "-2 secondi e non li posso più mangiare"
  89.                 "-1 secondi e non li posso più mangiare"}
  90.                 contatore_fuga:byte;
  91.                
  92.                 {le entità tengono conto della traslazione del
  93.                 campo per la loro rappresentazione grafica}
  94.                 traslazione_x:byte;
  95.                 traslazione_y:byte;
  96.                
  97.                 {avete mai fatto caso all'ondulamento della gonnellina
  98.                 dei fantasmi? oppure al fatto che un attimo pacman
  99.                 ha la bocca aperta e l'attimo dopo è chiusa?
  100.                 beh, tutto è regolato da stato_immagine e dal suo alternare
  101.                 tra TRUE e FALSE}
  102.                 stato_immagine:boolean;
  103.                
  104.                 {se immagine_caricata è TRUE allora significa
  105.                 che l'inizializzazione delle bitmaps è andata
  106.                 a buon fine, altrimente qualcuna era mancante.
  107.                 In questo caso si fa uso della vecchia modalità grafica
  108.                 con un cursore di dimensione dimensione_cella*dimensione_cella
  109.                 di colore colore}
  110.                 immagine_caricata:boolean;
  111.                
  112.                 {array contenente gli indirizzi alle bitmaps caricate in
  113.                 memoria}
  114.                 immagini:array[1..5] of pointer;
  115.                
  116.                 {accendi_cursore è ancora presente.
  117.                 Primo: per oscurare la cella in cui l'entità si trovava
  118.                 in precedenza
  119.                 Secondo: nel caso in cui una o più bitmaps siano mancanti}
  120.                 procedure accendi_cursore(ascissa,ordinata,color:byte);
  121.                
  122.                 public
  123.                
  124.                 {Il distruttore è lo stesso per tutte e due le classi
  125.                 dato che di memoria da liberare vi è solo quella di immagini}
  126.                 destructor free;
  127. end;
  128.  
  129. implementation
  130.  
  131. uses wingraph,mura,dos;
  132.  
  133. {Libera la memoria occupata dalle immagini}
  134. destructor _entita.free;
  135. begin
  136. if not nospace then
  137. begin
  138.         freemem(immagini[1]);
  139.         freemem(immagini[2]);
  140.         freemem(immagini[3]);
  141.         freemem(immagini[4]);
  142.         freemem(immagini[5]);
  143. end;
  144. end;
  145.  
  146. {Procedura che accende un cursore colorato di dimensione dimensione_cella*dimensione_cella
  147. NOTA: da eliminare il case of. In fin dei conti i colori sono dichiarati nella wingraph
  148. come delle costanti di tipo longword. Basta passare quelle}
  149. procedure _entita.accendi_cursore(ascissa,ordinata,color:byte);
  150. var a:integer;
  151. begin
  152. if not nospace then
  153. begin
  154.         case color of
  155.         1:      setcolor(yellow);
  156.         2:      setcolor(red);
  157.         3:      setcolor(white);
  158.         4:      setcolor(blue);
  159.         5:      setcolor(green);
  160.         6:      setcolor(orange);
  161.         7:      setcolor(pink);
  162.         else    setcolor(black);       
  163.         end;
  164.        
  165.         for a:=ascissa*dimensione_cella+1 to ascissa*dimensione_cella+dimensione_cella-1 do
  166.                 line(a,ordinata*dimensione_cella+1,a,ordinata*dimensione_cella+dimensione_cella-1);
  167. end;
  168. end;
  169.  
  170.  
  171. {Calcola l'ammontare di secondi trascorsi dalla mezzanotte}
  172. function  tempo:real;
  173. var h,m,s,s100:word;
  174. begin
  175.         GetTime(h, m, s, s100);
  176.         tempo:=3600*(h+0.0) + 60*m + s + 0.01*s100;
  177. end;
  178.  
  179. {Utile alternativa a delay
  180. NOTA: da sostituirsi a tutti i delay nei moduli}
  181. procedure pausa(t:real);
  182. var t0:real;
  183. begin
  184.         t0:=tempo;
  185.         while tempo-t0<t do;
  186. end;
  187.  
  188. end.