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- - mura.pas

mura.pas

Caricato da:
Scarica il programma completo

  1. (*Nome modulo:  mura*)
  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 campo e alcune costanti
  7.                                 il cui utilizzo è strettamente legato alla classe campo*)
  8.  
  9. unit mura;
  10.  
  11. interface
  12.  
  13. {Il tipo matrice null'altro è che un array bidimensionale dinamico}
  14. type matrice=array of array of byte;
  15.  
  16. type
  17.         registrazione=record
  18.         id:shortint;
  19.         x_iniziale:byte;
  20.         y_iniziale:byte;
  21. end;
  22.  
  23. {La costante dimensione_cella è il valore in pixel del'altezza e
  24. della larghezza di ogni singola cella del campo da gioco ogni
  25. valore può esservi sostituito...automaticamente verrà disattivata
  26. la "modalità grafica" e al posto delle immagini di pacman e dei
  27. fantasmi verrà visualizzato un cursore colorato di larghezza
  28. dimensione_cella x dimensione_cella.}
  29. const dimensione_cella=15;
  30.  
  31. {Qui vengono dichiarati i valori dei vari tipi di celle, ergo
  32. tutti i valori che possono incontrati nella matrice che rappresenta
  33. il terreno da gioco.
  34. Al momento ghost non è usata. Ma ben presto verrà utilizzata per
  35. risolvere il problema del settaggio automatico delle posizioni iniziali
  36. dei fantasmi.}
  37. const cella_vuota=0;            {Una cella vuota}
  38. const cella_muro=1;                     {Un pezzo di muro}
  39. const cella_cibo=2;                     {Una pallina luminosa piccola}
  40. const cella_super_cibo=3;       {Una pallina luminosa grande che fa fuggire e rende vulnerabili i fantasmi}
  41. const unwalkable_ghosts=4;      {Cella contenente un muro rosso attraversabile dai pacmen ma non dai fantasmi}
  42. const unwalkable_pacmen=5;      {Cella contenente un muro rosso attraversabile dai fantasmi ma non dai pacmen}
  43. const ghost=6;                          {Leggere sopra per capire il senso di questo tipo}
  44. const pacman=7;
  45. {Nonostante questi due valori (a mio parere) andrebbero messi
  46. nel private della classe campo e resi disponibili/modificabili
  47. tramite gli adeguati metodi esse vengono lasciate come due variabili globali.
  48. Ciò limita la possibilità di gestire 2 o più campi contemporaneamente.
  49. Verrano presto eliminate.
  50. NOTA ESSENZIALE: non rappresentano il numero di riga/colonne del campo!
  51. numero_colonne=dimensione_x_campo+1
  52. numero_riga=dimensione_y_campo+1}
  53. var dimensione_x_campo:byte;
  54. var dimensione_y_campo:byte;
  55.  
  56. {Il numero massimo di entità che si possono registrare nel campo
  57. sarà uguale a numero_max_entita. A questa costante faranno riferimento
  58. dei metodi nelle classi pacmen e ghosts}
  59. const numero_max_entita=4;
  60.  
  61. {Questa funzione restituisce true se il file filestr esiste
  62. altrimenti false se è inesistente.}
  63. function thisfileexists(filestr:string):boolean;
  64.  
  65. {Definizione della classe campo.}
  66. type
  67.         campo=object
  68.        
  69.         private
  70.        
  71.         {Questa matrice rappresenta il campo. Facendo parte del membro
  72.         private non è accessibile dall'esterno e in seguito verranno definite
  73.         alcuni metodi per interagirvi}
  74.         campo_array:matrice;
  75.        
  76.         {Questa variabile contiene il valore attuale di entità registrate.
  77.         E' anche possibile che: numero_max_entita <> numero_entita.}
  78.         numero_entita:byte;
  79.        
  80.         {Questo array gestisce i dati di ogni entità registrata nel campo.
  81.         Inoltre interagisce con gli stati delle entità. Quando pacman deve mangiare
  82.         un fantasma modifica il suo status in questo array e di conseguenza il fantasma
  83.         cambia status. Per accedervi le entità utilizzano il metodo set_xy_entita che
  84.         restituisce un id tramite il quale si può riaccedere alla propria colonna in
  85.         xy_entita. Le registrazioni non devono per forza essere pari a numero_max_entita.
  86.         Il numero corrente viene registrato da numero_entita. Quindi non ci si pone il problema
  87.         di non sapere quante entità siano attualmente in campo
  88.         Esempio:
  89.        
  90.        
  91.         |       1       |       2       |       ...     |       numero_max_entita       |       --Ogni colonna fa riferimento all'id che vi si è registrato--
  92. 0       |x_e_1  |x_e_2  |x_e_...|x_e_nme                                |       --La cella nella riga 0 contiene l'ascissa dell'entità a cui appartie la colonna stessa
  93. 1       |y_e_1  |y_e_2  |y_e_...|y_e_nme                                |       --La cella nella riga 1 contiene l'ordinata dell'entità a cui appartie la colonna stessa
  94. 2       |status1|status2|status.|status_nme                             |       --La cella nella riga 2 contiene lo status dell'entità a cui appartie la colonna stessa
  95.         }
  96.         xy_entita:array[1..numero_max_entita,0..2] of byte;
  97.        
  98.         {Nella rappresentazione grafica del campo questo può essere traslato.
  99.         La posizone dell'angolo in alto a SX viene regolata tramite le due variabili
  100.         sottostanti}
  101.         posizionex:byte;
  102.         posizioney:byte;
  103.        
  104.         {Il nome suona strano del metodo sottostante, e in effetti lo è. Andrebbe letto
  105.         set_dimensione_matrice, ma era troppo lungo e ho preferito accorciare :D.
  106.         Questo metodo serve per settare la dimensione del campo e inizializzare tutte le
  107.         cella a cella_vuota. Viene utilizzato nel costruttore per inizializzare il tutto
  108.         e nel metodo publico svuota_campo}
  109.         procedure settadimatrice(altezza,larghezza:byte; init:boolean);
  110.        
  111.         {Tutti i seguenti metodi più o meno corrispondono ai tipi di celle esistenti.
  112.         Essi non fanno altro che rappresentare graficamente le celle. Non vengono chiamati
  113.         direttamente ma tramite l'utilizzo del metodo pubblico disegna_mappa}
  114.         procedure rappresenta_cibo(ascissa,ordinata:byte);
  115.         procedure rappresenta_vuoto(ascissa,ordinata:byte);
  116.         procedure rappresenta_muro(ascissa,ordinata:byte);
  117.         procedure rappresenta_super_cibo(ascissa,ordinata:byte);
  118.         procedure rappresenta_unwalkable_pacmen(ascissa,ordinata:byte);
  119.         procedure rappresenta_unwalkable_ghosts(ascissa,ordinata:byte);
  120.         procedure rappresenta_cella_ghost(ascissa,ordinata:byte);
  121.         procedure rappresenta_cella_pacman(ascissa,ordinata:byte);
  122.  
  123.         public
  124.                
  125.         {Costruttore della classe}
  126.         constructor crea(ascissa,ordinata:byte; input:string);
  127.        
  128.         {Restituisce il tipo di cella(ascissa,ordinata)}
  129.         function get_stato_cella(ascissa,ordinata:smallint; editormode:boolean):byte;
  130.        
  131.         {Queste due funzioni restituiscono rispettivamente posizionex e posizioney}
  132.         function get_posizionex():byte;
  133.         function get_posizioney():byte;
  134.        
  135.         {Restituisce il numero di entità ATTUALMENTE in gioco}
  136.         function get_numero_entita():byte;
  137.        
  138.         {Queste due funzioni servono per ottene le coordinate dell'entità
  139.         di id "indice"}
  140.         function get_x_entita(indice:byte):byte;
  141.         function get_y_entita(indice:byte):byte;
  142.        
  143.         {Restituisce lo status attuale dell'entità in questione.
  144.         Il valore restituito non ha alcun senso qui e viene interpretato
  145.         solo dalle classi ghost e pacmen}
  146.         function get_status_entita(indice:byte):byte;
  147.        
  148.         {Funzione che si occupa di registrare l'entità che la chiama restituendo
  149.         a questa un id tramite il quale è possibile fare riferimento ai propri dati.
  150.         Tramite questa ci si propone di risolvere il problema della "inizializzazione automatica"
  151.         delle posizioni dei fantasmi. Quindi ben preso potrebbe restituire come risultato una struct
  152.         contenente i valori utili per inizializzare la posizione iniziale dell'elemento che si registra.
  153.         Oppure un valore d'errore se non vi è più posto per ulteriori entità nel campo in uso}
  154.         function set_xy_entita(status:byte; needanid:boolean):registrazione;
  155.        
  156.         {Si utilizzi per ridimensionare il campo.}
  157.         procedure scala_campo(ascissa,ordinata:shortint);
  158.        
  159.         {Ogni entità registrata fa ad essa riferimento per aggiorare la propria posizione
  160.         nel campo}
  161.         procedure mod_xy_entita(indice,nuova_ascissa,nuova_ordinata:byte);
  162.        
  163.         {Ogni entità registrata fa ad essa riferimento per aggiorare il proprio status}
  164.         procedure mod_xy_status(indice,nuovo_status:byte);
  165.        
  166.         {Svuota campo viene utilizzato unicamente (almeno per ora) nell'editor e serve
  167.         a rendere completamente vuoto il campo da gioco}
  168.         procedure svuota_campo;
  169.        
  170.         function goodmap():boolean;
  171.        
  172.         {Modifica il contenuto di una determinata cella. "Stato" viene inteso per contenuto.
  173.         Non c'entra nulla con le entità registrate. Questo metodo viene utilizzato principalmente
  174.         da pacmen (per svuotare le celle dopo avervi mangiato) e nell'editor per appunto editare
  175.         la mappa}
  176.         procedure mod_stato_cella(ascissa,ordinata,nuovo_valore:byte);
  177.        
  178.         {Viene utilizzato solo nell'editor. Questo metodo esposporta la mappa nel file
  179.         output. Overwrite se settato a true consente la sovrascrittura automatica altrimenti
  180.         se settato a false non permette la sovrascrittura di file esistenti}
  181.         procedure esporta_mappa(output:string; overwrite:boolean);
  182.        
  183.         {Il metodo disegna_mappa si occupa della rappresentazione grafica della mappa o di sole
  184.         parti di essa.}
  185.         procedure disegna_mappa(ascissa_A,ordinata_A,ascissa_B,ordinata_B:byte; editormode:boolean);
  186. end;
  187.  
  188. implementation
  189.  
  190. uses wingraph,wincrt,sysutils;
  191.  
  192. {Il nome suona strano del metodo sottostante, e in effetti lo è. Andrebbe letto
  193. set_dimensione_matrice, ma era troppo lungo e ho preferito accorciare :D.
  194. Questo metodo serve per settare la dimensione del campo e inizializzare tutte le
  195. cella a cella_vuota. Viene utilizzato nel costruttore per inizializzare il tutto
  196. e nel metodo publico svuota_campo}
  197. procedure campo.settadimatrice(altezza,larghezza:byte; init:boolean);
  198. var
  199.         a,b:byte;
  200. begin
  201.         setlength(campo_array,altezza);         {Vengono settate inizialmente le colonne dell'array a altezza}
  202.        
  203.         a:=0;
  204.         for a:=0 to altezza-1 do
  205.                 setlength(campo_array[a],larghezza);    {In seguto, ad una ad una, viene settata la larghezza di ogni colonna}
  206.                                                                                                 {Utilizzare setlength sarebbe una scelta più sbrigativa. Non so perchè però
  207.                                                                                                 tengo queste 2 riga di codice in più}
  208.                                                                                                
  209.         {Durante lo sviluppo ho incontrato parecchi problemi con questa procedura,
  210.         il problema sta qui sotto nel ciclo for. Per eventuali modifiche
  211.         tienilo a mente.}
  212.         if init then    {se init è vero allora il campo viene svuotato--è questo il caso di crea e svuota_campo. Ma non di scala}
  213.         begin
  214.                 a:=0; b:=0;
  215.                 for a:=0 to altezza-1 do
  216.                         for b:=0 to larghezza-1 do
  217.                                 campo_array[a,b]:=cella_vuota;
  218.         end;
  219. end;
  220.  
  221. {Questa funzione restituisce true se il file filestr esiste
  222. altrimenti false se è inesistente.}
  223. function thisfileexists(filestr:string):boolean;
  224. var
  225.         result:boolean;
  226.         f:textfile;
  227. begin
  228.         result:=false;
  229.        
  230.         {$I-}   Assign(f,filestr);
  231.                         Reset(f);               {$I+}
  232.                        
  233.         if (IOResult=0) then
  234.         begin
  235.                 close(f);
  236.                 result:=true;
  237.         end;
  238.  
  239.         thisfileexists:=result;
  240. end;
  241.  
  242. function campo.goodmap():boolean;
  243. var
  244.         a,b:byte;
  245.         howmanyghosts,howmanypacmen:integer;
  246. begin
  247.         howmanyghosts:=0;
  248.         howmanypacmen:=0;
  249.         a:=0;
  250.         b:=0;
  251.        
  252.         for a:=0 to dimensione_x_campo do
  253.                 for b:=0 to dimensione_y_campo do
  254.                 begin
  255.                         if campo_array[a,b]=pacman then howmanypacmen+=1;
  256.                         if campo_array[a,b]=ghost then howmanyghosts+=1;
  257.                 end;
  258.        
  259.         if ((howmanypacmen=1) and (howmanyghosts>0)) then goodmap:=true
  260.         else goodmap:=false;
  261. end;
  262.  
  263. {Costruttore della classe campo.
  264. Ess inizialla la dimensione e la traslazione del campo, importando anche la esistente da input.}
  265. constructor campo.crea(ascissa,ordinata:byte; input:string);
  266. var
  267.         a:integer;
  268.         {b:integer;}
  269.         f:textfile;
  270.         altezza,larghezza:byte;
  271.         buffer:longint;
  272. begin
  273.         {Se l'input è vacante, oppure il file input non esiste la dimensione del campo
  274.         viene settata a 28X28 (modello standard in questo gioco sino alla fine della v.0.6.*).
  275.         Viene ricreata la mappa standard}
  276.         if ((input='') or (thisfileexists(input)=false)) then
  277.         begin
  278.                 writeln('E'' stata scelta la strada del file che non esiste!');
  279.                 dimensione_x_campo:=28;
  280.                 dimensione_y_campo:=28;
  281.                 settadimatrice(dimensione_x_campo+1,dimensione_y_campo+1,true);
  282.                 if 0=0 then {un modo per levarmi dai piedi un bel pò di riga :D}
  283.                 begin
  284.                         campo_array[0,1]:=cella_muro;
  285.                         campo_array[0,2]:=cella_muro;
  286.                         campo_array[0,3]:=cella_muro;
  287.                         campo_array[0,4]:=cella_muro;
  288.                         campo_array[0,5]:=cella_muro;
  289.                         campo_array[0,6]:=cella_muro;
  290.                         campo_array[0,7]:=cella_muro;
  291.                         campo_array[0,8]:=cella_muro;
  292.                         campo_array[0,12]:=cella_muro;
  293.                         campo_array[0,14]:=cella_muro;
  294.                         campo_array[0,18]:=cella_muro;
  295.                         campo_array[0,19]:=cella_muro;
  296.                         campo_array[0,20]:=cella_muro;
  297.                         campo_array[0,21]:=cella_muro;
  298.                         campo_array[0,22]:=cella_muro;
  299.                         campo_array[0,23]:=cella_muro;
  300.                         campo_array[0,24]:=cella_muro;
  301.                         campo_array[0,25]:=cella_muro;
  302.                         campo_array[0,26]:=cella_muro;
  303.                         campo_array[0,27]:=cella_muro;
  304.                         campo_array[0,28]:=cella_muro;
  305.                         campo_array[1,0]:=cella_muro;
  306.                         campo_array[1,1]:=cella_cibo;
  307.                         campo_array[1,2]:=cella_cibo;
  308.                         campo_array[1,3]:=cella_super_cibo;
  309.                         campo_array[1,4]:=cella_cibo;
  310.                         campo_array[1,5]:=cella_cibo;
  311.                         campo_array[1,6]:=cella_cibo;
  312.                         campo_array[1,7]:=cella_cibo;
  313.                         campo_array[1,8]:=cella_muro;
  314.                         campo_array[1,12]:=cella_muro;
  315.                         campo_array[1,14]:=cella_muro;
  316.                         campo_array[1,18]:=cella_muro;
  317.                         campo_array[1,19]:=cella_cibo;
  318.                         campo_array[1,20]:=cella_cibo;
  319.                         campo_array[1,21]:=cella_cibo;
  320.                         campo_array[1,22]:=cella_cibo;
  321.                         campo_array[1,23]:=cella_super_cibo;
  322.                         campo_array[1,24]:=cella_muro;
  323.                         campo_array[1,25]:=cella_cibo;
  324.                         campo_array[1,26]:=cella_cibo;
  325.                         campo_array[1,27]:=cella_cibo;
  326.                         campo_array[1,28]:=cella_muro;
  327.                         campo_array[2,0]:=cella_muro;
  328.                         campo_array[2,1]:=cella_cibo;
  329.                         campo_array[2,2]:=cella_muro;
  330.                         campo_array[2,3]:=cella_muro;
  331.                         campo_array[2,4]:=cella_muro;
  332.                         campo_array[2,5]:=cella_cibo;
  333.                         campo_array[2,6]:=cella_muro;
  334.                         campo_array[2,7]:=cella_cibo;
  335.                         campo_array[2,8]:=cella_muro;
  336.                         campo_array[2,12]:=cella_muro;
  337.                         campo_array[2,14]:=cella_muro;
  338.                         campo_array[2,18]:=cella_muro;
  339.                         campo_array[2,19]:=cella_cibo;
  340.                         campo_array[2,20]:=cella_muro;
  341.                         campo_array[2,21]:=cella_muro;
  342.                         campo_array[2,22]:=cella_muro;
  343.                         campo_array[2,23]:=cella_cibo;
  344.                         campo_array[2,24]:=cella_muro;
  345.                         campo_array[2,25]:=cella_cibo;
  346.                         campo_array[2,26]:=cella_muro;
  347.                         campo_array[2,27]:=cella_cibo;
  348.                         campo_array[2,28]:=cella_muro;
  349.                         campo_array[3,0]:=cella_muro;
  350.                         campo_array[3,1]:=cella_cibo;
  351.                         campo_array[3,2]:=cella_muro;
  352.                         campo_array[3,4]:=cella_muro;
  353.                         campo_array[3,5]:=cella_cibo;
  354.                         campo_array[3,6]:=cella_muro;
  355.                         campo_array[3,7]:=cella_cibo;
  356.                         campo_array[3,8]:=cella_muro;
  357.                         campo_array[3,12]:=cella_muro;
  358.                         campo_array[3,14]:=cella_muro;
  359.                         campo_array[3,18]:=cella_muro;
  360.                         campo_array[3,19]:=cella_cibo;
  361.                         campo_array[3,20]:=cella_muro;
  362.                         campo_array[3,22]:=cella_muro;
  363.                         campo_array[3,23]:=cella_cibo;
  364.                         campo_array[3,24]:=cella_cibo;
  365.                         campo_array[3,25]:=cella_cibo;
  366.                         campo_array[3,26]:=cella_muro;
  367.                         campo_array[3,27]:=cella_cibo;
  368.                         campo_array[3,28]:=cella_muro;
  369.                         campo_array[4,0]:=cella_muro;
  370.                         campo_array[4,1]:=cella_cibo;
  371.                         campo_array[4,2]:=cella_muro;
  372.                         campo_array[4,4]:=cella_muro;
  373.                         campo_array[4,5]:=cella_cibo;
  374.                         campo_array[4,6]:=cella_muro;
  375.                         campo_array[4,7]:=cella_cibo;
  376.                         campo_array[4,8]:=cella_muro;
  377.                         campo_array[4,12]:=cella_muro;
  378.                         campo_array[4,14]:=cella_muro;
  379.                         campo_array[4,18]:=cella_muro;
  380.                         campo_array[4,19]:=cella_cibo;
  381.                         campo_array[4,20]:=cella_muro;
  382.                         campo_array[4,22]:=cella_muro;
  383.                         campo_array[4,23]:=cella_muro;
  384.                         campo_array[4,24]:=cella_muro;
  385.                         campo_array[4,25]:=cella_cibo;
  386.                         campo_array[4,26]:=cella_muro;
  387.                         campo_array[4,27]:=cella_cibo;
  388.                         campo_array[4,28]:=cella_muro;
  389.                         campo_array[5,0]:=cella_muro;
  390.                         campo_array[5,1]:=cella_cibo;
  391.                         campo_array[5,2]:=cella_muro;
  392.                         campo_array[5,3]:=cella_muro;
  393.                         campo_array[5,4]:=cella_muro;
  394.                         campo_array[5,5]:=cella_cibo;
  395.                         campo_array[5,6]:=cella_muro;
  396.                         campo_array[5,7]:=cella_cibo;
  397.                         campo_array[5,8]:=cella_muro;
  398.                         campo_array[5,9]:=cella_muro;
  399.                         campo_array[5,10]:=cella_muro;
  400.                         campo_array[5,11]:=cella_muro;
  401.                         campo_array[5,12]:=cella_muro;
  402.                         campo_array[5,14]:=cella_muro;
  403.                         campo_array[5,15]:=cella_muro;
  404.                         campo_array[5,16]:=cella_muro;
  405.                         campo_array[5,17]:=cella_muro;
  406.                         campo_array[5,18]:=cella_muro;
  407.                         campo_array[5,19]:=cella_cibo;
  408.                         campo_array[5,20]:=cella_muro;
  409.                         campo_array[5,21]:=cella_muro;
  410.                         campo_array[5,22]:=cella_muro;
  411.                         campo_array[5,23]:=cella_muro;
  412.                         campo_array[5,24]:=cella_muro;
  413.                         campo_array[5,25]:=cella_cibo;
  414.                         campo_array[5,26]:=cella_muro;
  415.                         campo_array[5,27]:=cella_cibo;
  416.                         campo_array[5,28]:=cella_muro;
  417.                         campo_array[6,0]:=cella_muro;
  418.                         campo_array[6,1]:=cella_cibo;
  419.                         campo_array[6,2]:=cella_cibo;
  420.                         campo_array[6,3]:=cella_cibo;
  421.                         campo_array[6,4]:=cella_cibo;
  422.                         campo_array[6,5]:=cella_cibo;
  423.                         campo_array[6,6]:=cella_cibo;
  424.                         campo_array[6,7]:=cella_cibo;
  425.                         campo_array[6,8]:=cella_cibo;
  426.                         campo_array[6,9]:=cella_cibo;
  427.                         campo_array[6,10]:=cella_cibo;
  428.                         campo_array[6,11]:=cella_cibo;
  429.                         campo_array[6,12]:=cella_cibo;
  430.                         campo_array[6,13]:=cella_cibo;
  431.                         campo_array[6,14]:=cella_cibo;
  432.                         campo_array[6,15]:=cella_cibo;
  433.                         campo_array[6,16]:=cella_cibo;
  434.                         campo_array[6,17]:=cella_cibo;
  435.                         campo_array[6,18]:=cella_cibo;
  436.                         campo_array[6,19]:=cella_cibo;
  437.                         campo_array[6,20]:=cella_cibo;
  438.                         campo_array[6,21]:=cella_cibo;
  439.                         campo_array[6,22]:=cella_cibo;
  440.                         campo_array[6,23]:=cella_cibo;
  441.                         campo_array[6,24]:=cella_cibo;
  442.                         campo_array[6,25]:=cella_cibo;
  443.                         campo_array[6,26]:=cella_muro;
  444.                         campo_array[6,27]:=cella_cibo;
  445.                         campo_array[6,28]:=cella_muro;
  446.                         campo_array[7,0]:=cella_muro;
  447.                         campo_array[7,1]:=cella_cibo;
  448.                         campo_array[7,2]:=cella_muro;
  449.                         campo_array[7,3]:=cella_muro;
  450.                         campo_array[7,4]:=cella_muro;
  451.                         campo_array[7,5]:=cella_cibo;
  452.                         campo_array[7,6]:=cella_muro;
  453.                         campo_array[7,7]:=cella_muro;
  454.                         campo_array[7,8]:=cella_muro;
  455.                         campo_array[7,9]:=cella_muro;
  456.                         campo_array[7,10]:=cella_muro;
  457.                         campo_array[7,11]:=cella_muro;
  458.                         campo_array[7,12]:=cella_muro;
  459.                         campo_array[7,14]:=cella_muro;
  460.                         campo_array[7,15]:=cella_muro;
  461.                         campo_array[7,16]:=cella_muro;
  462.                         campo_array[7,17]:=cella_muro;
  463.                         campo_array[7,18]:=cella_muro;
  464.                         campo_array[7,19]:=cella_cibo;
  465.                         campo_array[7,20]:=cella_muro;
  466.                         campo_array[7,21]:=cella_muro;
  467.                         campo_array[7,22]:=cella_muro;
  468.                         campo_array[7,23]:=cella_cibo;
  469.                         campo_array[7,24]:=cella_muro;
  470.                         campo_array[7,25]:=cella_muro;
  471.                         campo_array[7,26]:=cella_muro;
  472.                         campo_array[7,27]:=cella_cibo;
  473.                         campo_array[7,28]:=cella_muro;
  474.                         campo_array[8,0]:=cella_muro;
  475.                         campo_array[8,1]:=cella_cibo;
  476.                         campo_array[8,2]:=cella_muro;
  477.                         campo_array[8,4]:=cella_muro;
  478.                         campo_array[8,5]:=cella_cibo;
  479.                         campo_array[8,8]:=cella_muro;
  480.                         campo_array[8,19]:=cella_cibo;
  481.                         campo_array[8,20]:=cella_muro;
  482.                         campo_array[8,22]:=cella_muro;
  483.                         campo_array[8,23]:=cella_cibo;
  484.                         campo_array[8,24]:=cella_muro;
  485.                         campo_array[8,26]:=cella_muro;
  486.                         campo_array[8,27]:=cella_cibo;
  487.                         campo_array[8,28]:=cella_muro;
  488.                         campo_array[9,0]:=cella_muro;
  489.                         campo_array[9,1]:=cella_cibo;
  490.                         campo_array[9,2]:=cella_muro;
  491.                         campo_array[9,4]:=cella_muro;
  492.                         campo_array[9,5]:=cella_cibo;
  493.                         campo_array[9,6]:=cella_muro;
  494.                         campo_array[9,8]:=cella_muro;
  495.                         campo_array[9,10]:=cella_muro;
  496.                         campo_array[9,11]:=cella_muro;
  497.                         campo_array[9,12]:=cella_muro;
  498.                         campo_array[9,13]:=cella_muro;
  499.                         campo_array[9,14]:=cella_muro;
  500.                         campo_array[9,15]:=cella_muro;
  501.                         campo_array[9,16]:=cella_muro;
  502.                         campo_array[9,18]:=cella_muro;
  503.                         campo_array[9,19]:=cella_cibo;
  504.                         campo_array[9,20]:=cella_muro;
  505.                         campo_array[9,22]:=cella_muro;
  506.                         campo_array[9,23]:=cella_cibo;
  507.                         campo_array[9,24]:=cella_muro;
  508.                         campo_array[9,25]:=cella_muro;
  509.                         campo_array[9,26]:=cella_muro;
  510.                         campo_array[9,27]:=cella_cibo;
  511.                         campo_array[9,28]:=cella_muro;
  512.                         campo_array[10,0]:=cella_muro;
  513.                         campo_array[10,1]:=cella_cibo;
  514.                         campo_array[10,2]:=cella_muro;
  515.                         campo_array[10,4]:=cella_muro;
  516.                         campo_array[10,5]:=cella_cibo;
  517.                         campo_array[10,6]:=cella_muro;
  518.                         campo_array[10,8]:=cella_muro;
  519.                         campo_array[10,10]:=cella_muro;
  520.                         campo_array[10,11]:=unwalkable_ghosts;
  521.                         campo_array[10,12]:=unwalkable_ghosts;
  522.                         campo_array[10,13]:=unwalkable_ghosts;
  523.                         campo_array[10,14]:=unwalkable_ghosts;
  524.                         campo_array[10,15]:=unwalkable_ghosts;
  525.                         campo_array[10,16]:=cella_muro;
  526.                         campo_array[10,18]:=cella_muro;
  527.                         campo_array[10,19]:=cella_cibo;
  528.                         campo_array[10,20]:=cella_muro;
  529.                         campo_array[10,22]:=cella_muro;
  530.                         campo_array[10,23]:=cella_cibo;
  531.                         campo_array[10,24]:=cella_cibo;
  532.                         campo_array[10,25]:=cella_cibo;
  533.                         campo_array[10,26]:=cella_muro;
  534.                         campo_array[10,27]:=cella_cibo;
  535.                         campo_array[10,28]:=cella_muro;
  536.                         campo_array[11,0]:=cella_muro;
  537.                         campo_array[11,1]:=cella_cibo;
  538.                         campo_array[11,2]:=cella_muro;
  539.                         campo_array[11,4]:=cella_muro;
  540.                         campo_array[11,5]:=cella_cibo;
  541.                         campo_array[11,6]:=cella_muro;
  542.                         campo_array[11,8]:=cella_muro;
  543.                         campo_array[11,10]:=cella_muro;
  544.                         campo_array[11,11]:=unwalkable_ghosts;
  545.                         campo_array[11,12]:=unwalkable_ghosts;
  546.                         campo_array[11,13]:=unwalkable_ghosts;
  547.                         campo_array[11,14]:=unwalkable_ghosts;
  548.                         campo_array[11,15]:=unwalkable_ghosts;
  549.                         campo_array[11,16]:=cella_muro;
  550.                         campo_array[11,18]:=cella_muro;
  551.                         campo_array[11,19]:=cella_cibo;
  552.                         campo_array[11,20]:=cella_muro;
  553.                         campo_array[11,22]:=cella_muro;
  554.                         campo_array[11,23]:=cella_cibo;
  555.                         campo_array[11,24]:=cella_muro;
  556.                         campo_array[11,25]:=cella_cibo;
  557.                         campo_array[11,26]:=cella_muro;
  558.                         campo_array[11,27]:=cella_cibo;
  559.                         campo_array[11,28]:=cella_muro;
  560.                         campo_array[12,0]:=cella_muro;
  561.                         campo_array[12,1]:=cella_cibo;
  562.                         campo_array[12,2]:=cella_muro;
  563.                         campo_array[12,3]:=cella_muro;
  564.                         campo_array[12,4]:=cella_muro;
  565.                         campo_array[12,5]:=cella_cibo;
  566.                         campo_array[12,6]:=cella_muro;
  567.                         campo_array[12,8]:=cella_muro;
  568.                         campo_array[12,10]:=cella_muro;
  569.                         campo_array[12,11]:=unwalkable_ghosts;
  570.                         campo_array[12,12]:=unwalkable_ghosts;
  571.                         campo_array[12,13]:=unwalkable_ghosts;
  572.                         campo_array[12,14]:=ghost;
  573.                         campo_array[12,15]:=unwalkable_ghosts;
  574.                         campo_array[12,16]:=cella_muro;
  575.                         campo_array[12,18]:=cella_muro;
  576.                         campo_array[12,19]:=cella_cibo;
  577.                         campo_array[12,20]:=cella_muro;
  578.                         campo_array[12,21]:=cella_muro;
  579.                         campo_array[12,22]:=cella_muro;
  580.                         campo_array[12,23]:=cella_cibo;
  581.                         campo_array[12,24]:=cella_muro;
  582.                         campo_array[12,25]:=cella_cibo;
  583.                         campo_array[12,26]:=cella_muro;
  584.                         campo_array[12,27]:=cella_cibo;
  585.                         campo_array[12,28]:=cella_muro;
  586.                         campo_array[13,0]:=cella_muro;
  587.                         campo_array[13,1]:=cella_cibo;
  588.                         campo_array[13,2]:=cella_cibo;
  589.                         campo_array[13,3]:=cella_cibo;
  590.                         campo_array[13,4]:=cella_cibo;
  591.                         campo_array[13,5]:=cella_cibo;
  592.                         campo_array[13,6]:=cella_muro;
  593.                         campo_array[13,10]:=unwalkable_pacmen;
  594.                         campo_array[13,11]:=unwalkable_ghosts;
  595.                         campo_array[13,12]:=unwalkable_ghosts;
  596.                         campo_array[13,13]:=unwalkable_ghosts;
  597.                         campo_array[13,14]:=ghost;
  598.                         campo_array[13,15]:=unwalkable_ghosts;
  599.                         campo_array[13,16]:=cella_muro;
  600.                         campo_array[13,18]:=cella_muro;
  601.                         campo_array[13,19]:=cella_cibo;
  602.                         campo_array[13,20]:=cella_cibo;
  603.                         campo_array[13,21]:=cella_cibo;
  604.                         campo_array[13,22]:=cella_cibo;
  605.                         campo_array[13,23]:=cella_cibo;
  606.                         campo_array[13,24]:=cella_muro;
  607.                         campo_array[13,25]:=cella_cibo;
  608.                         campo_array[13,26]:=cella_cibo;
  609.                         campo_array[13,27]:=cella_cibo;
  610.                         campo_array[13,28]:=cella_muro;
  611.                         campo_array[14,0]:=cella_muro;
  612.                         campo_array[14,1]:=cella_muro;
  613.                         campo_array[14,2]:=cella_muro;
  614.                         campo_array[14,3]:=cella_muro;
  615.                         campo_array[14,4]:=cella_muro;
  616.                         campo_array[14,5]:=cella_cibo;
  617.                         campo_array[14,6]:=cella_muro;
  618.                         campo_array[14,7]:=cella_muro;
  619.                         campo_array[14,8]:=cella_muro;
  620.                         campo_array[14,10]:=unwalkable_pacmen;
  621.                         campo_array[14,15]:=unwalkable_ghosts;
  622.                         campo_array[14,16]:=cella_muro;
  623.                         campo_array[14,17]:=pacman;
  624.                         campo_array[14,18]:=cella_muro;
  625.                         campo_array[14,19]:=cella_muro;
  626.                         campo_array[14,20]:=cella_muro;
  627.                         campo_array[14,21]:=cella_muro;
  628.                         campo_array[14,22]:=cella_muro;
  629.                         campo_array[14,23]:=cella_cibo;
  630.                         campo_array[14,24]:=cella_muro;
  631.                         campo_array[14,25]:=cella_muro;
  632.                         campo_array[14,26]:=cella_muro;
  633.                         campo_array[14,27]:=cella_cibo;
  634.                         campo_array[14,28]:=cella_muro;
  635.                         campo_array[15,0]:=cella_muro;
  636.                         campo_array[15,1]:=cella_cibo;
  637.                         campo_array[15,2]:=cella_cibo;
  638.                         campo_array[15,3]:=cella_cibo;
  639.                         campo_array[15,4]:=cella_cibo;
  640.                         campo_array[15,5]:=cella_cibo;
  641.                         campo_array[15,6]:=cella_muro;
  642.                         campo_array[15,10]:=unwalkable_pacmen;
  643.                         campo_array[15,11]:=unwalkable_ghosts;
  644.                         campo_array[15,12]:=unwalkable_ghosts;
  645.                         campo_array[15,13]:=unwalkable_ghosts;
  646.                         campo_array[15,14]:=ghost;
  647.                         campo_array[15,15]:=unwalkable_ghosts;
  648.                         campo_array[15,16]:=cella_muro;
  649.                         campo_array[15,18]:=cella_muro;
  650.                         campo_array[15,19]:=cella_cibo;
  651.                         campo_array[15,20]:=cella_cibo;
  652.                         campo_array[15,21]:=cella_cibo;
  653.                         campo_array[15,22]:=cella_cibo;
  654.                         campo_array[15,23]:=cella_cibo;
  655.                         campo_array[15,24]:=cella_muro;
  656.                         campo_array[15,25]:=cella_cibo;
  657.                         campo_array[15,26]:=cella_cibo;
  658.                         campo_array[15,27]:=cella_cibo;
  659.                         campo_array[15,28]:=cella_muro;
  660.                         campo_array[16,0]:=cella_muro;
  661.                         campo_array[16,1]:=cella_cibo;
  662.                         campo_array[16,2]:=cella_muro;
  663.                         campo_array[16,3]:=cella_muro;
  664.                         campo_array[16,4]:=cella_muro;
  665.                         campo_array[16,5]:=cella_cibo;
  666.                         campo_array[16,6]:=cella_muro;
  667.                         campo_array[16,8]:=cella_muro;
  668.                         campo_array[16,10]:=cella_muro;
  669.                         campo_array[16,11]:=unwalkable_ghosts;
  670.                         campo_array[16,12]:=unwalkable_ghosts;
  671.                         campo_array[16,13]:=unwalkable_ghosts;
  672.                         campo_array[16,14]:=ghost;
  673.                         campo_array[16,15]:=unwalkable_ghosts;
  674.                         campo_array[16,16]:=cella_muro;
  675.                         campo_array[16,18]:=cella_muro;
  676.                         campo_array[16,19]:=cella_cibo;
  677.                         campo_array[16,20]:=cella_muro;
  678.                         campo_array[16,21]:=cella_muro;
  679.                         campo_array[16,22]:=cella_muro;
  680.                         campo_array[16,23]:=cella_cibo;
  681.                         campo_array[16,24]:=cella_muro;
  682.                         campo_array[16,25]:=cella_cibo;
  683.                         campo_array[16,26]:=cella_muro;
  684.                         campo_array[16,27]:=cella_cibo;
  685.                         campo_array[16,28]:=cella_muro;
  686.                         campo_array[17,0]:=cella_muro;
  687.                         campo_array[17,1]:=cella_cibo;
  688.                         campo_array[17,2]:=cella_muro;
  689.                         campo_array[17,4]:=cella_muro;
  690.                         campo_array[17,5]:=cella_cibo;
  691.                         campo_array[17,6]:=cella_muro;
  692.                         campo_array[17,8]:=cella_muro;
  693.                         campo_array[17,10]:=cella_muro;
  694.                         campo_array[17,11]:=unwalkable_ghosts;
  695.                         campo_array[17,12]:=unwalkable_ghosts;
  696.                         campo_array[17,13]:=unwalkable_ghosts;
  697.                         campo_array[17,14]:=unwalkable_ghosts;
  698.                         campo_array[17,15]:=unwalkable_ghosts;
  699.                         campo_array[17,16]:=cella_muro;
  700.                         campo_array[17,18]:=cella_muro;
  701.                         campo_array[17,19]:=cella_cibo;
  702.                         campo_array[17,20]:=cella_muro;
  703.                         campo_array[17,22]:=cella_muro;
  704.                         campo_array[17,23]:=cella_cibo;
  705.                         campo_array[17,24]:=cella_muro;
  706.                         campo_array[17,25]:=cella_cibo;
  707.                         campo_array[17,26]:=cella_muro;
  708.                         campo_array[17,27]:=cella_cibo;
  709.                         campo_array[17,28]:=cella_muro;
  710.                         campo_array[18,0]:=cella_muro;
  711.                         campo_array[18,1]:=cella_cibo;
  712.                         campo_array[18,2]:=cella_muro;
  713.                         campo_array[18,4]:=cella_muro;
  714.                         campo_array[18,5]:=cella_cibo;
  715.                         campo_array[18,6]:=cella_muro;
  716.                         campo_array[18,8]:=cella_muro;
  717.                         campo_array[18,10]:=cella_muro;
  718.                         campo_array[18,11]:=unwalkable_ghosts;
  719.                         campo_array[18,12]:=unwalkable_ghosts;
  720.                         campo_array[18,13]:=unwalkable_ghosts;
  721.                         campo_array[18,14]:=unwalkable_ghosts;
  722.                         campo_array[18,15]:=unwalkable_ghosts;
  723.                         campo_array[18,16]:=cella_muro;
  724.                         campo_array[18,18]:=cella_muro;
  725.                         campo_array[18,19]:=cella_cibo;
  726.                         campo_array[18,20]:=cella_muro;
  727.                         campo_array[18,22]:=cella_muro;
  728.                         campo_array[18,23]:=cella_cibo;
  729.                         campo_array[18,24]:=cella_cibo;
  730.                         campo_array[18,25]:=cella_cibo;
  731.                         campo_array[18,26]:=cella_muro;
  732.                         campo_array[18,27]:=cella_cibo;
  733.                         campo_array[18,28]:=cella_muro;
  734.                         campo_array[19,0]:=cella_muro;
  735.                         campo_array[19,1]:=cella_cibo;
  736.                         campo_array[19,2]:=cella_muro;
  737.                         campo_array[19,4]:=cella_muro;
  738.                         campo_array[19,5]:=cella_cibo;
  739.                         campo_array[19,6]:=cella_muro;
  740.                         campo_array[19,8]:=cella_muro;
  741.                         campo_array[19,10]:=cella_muro;
  742.                         campo_array[19,11]:=cella_muro;
  743.                         campo_array[19,12]:=cella_muro;
  744.                         campo_array[19,13]:=cella_muro;
  745.                         campo_array[19,14]:=cella_muro;
  746.                         campo_array[19,15]:=cella_muro;
  747.                         campo_array[19,16]:=cella_muro;
  748.                         campo_array[19,18]:=cella_muro;
  749.                         campo_array[19,19]:=cella_cibo;
  750.                         campo_array[19,20]:=cella_muro;
  751.                         campo_array[19,22]:=cella_muro;
  752.                         campo_array[19,23]:=cella_cibo;
  753.                         campo_array[19,24]:=cella_muro;
  754.                         campo_array[19,25]:=cella_muro;
  755.                         campo_array[19,26]:=cella_muro;
  756.                         campo_array[19,27]:=cella_cibo;
  757.                         campo_array[19,28]:=cella_muro;
  758.                         campo_array[20,0]:=cella_muro;
  759.                         campo_array[20,1]:=cella_cibo;
  760.                         campo_array[20,2]:=cella_muro;
  761.                         campo_array[20,4]:=cella_muro;
  762.                         campo_array[20,5]:=cella_cibo;
  763.                         campo_array[20,8]:=cella_muro;
  764.                         campo_array[20,19]:=cella_cibo;
  765.                         campo_array[20,20]:=cella_muro;
  766.                         campo_array[20,22]:=cella_muro;
  767.                         campo_array[20,23]:=cella_cibo;
  768.                         campo_array[20,24]:=cella_muro;
  769.                         campo_array[20,26]:=cella_muro;
  770.                         campo_array[20,27]:=cella_cibo;
  771.                         campo_array[20,28]:=cella_muro;
  772.                         campo_array[21,0]:=cella_muro;
  773.                         campo_array[21,1]:=cella_cibo;
  774.                         campo_array[21,2]:=cella_muro;
  775.                         campo_array[21,3]:=cella_muro;
  776.                         campo_array[21,4]:=cella_muro;
  777.                         campo_array[21,5]:=cella_cibo;
  778.                         campo_array[21,6]:=cella_muro;
  779.                         campo_array[21,7]:=cella_muro;
  780.                         campo_array[21,8]:=cella_muro;
  781.                         campo_array[21,9]:=cella_muro;
  782.                         campo_array[21,10]:=cella_muro;
  783.                         campo_array[21,11]:=cella_muro;
  784.                         campo_array[21,12]:=cella_muro;
  785.                         campo_array[21,14]:=cella_muro;
  786.                         campo_array[21,15]:=cella_muro;
  787.                         campo_array[21,16]:=cella_muro;
  788.                         campo_array[21,17]:=cella_muro;
  789.                         campo_array[21,18]:=cella_muro;
  790.                         campo_array[21,19]:=cella_cibo;
  791.                         campo_array[21,20]:=cella_muro;
  792.                         campo_array[21,21]:=cella_muro;
  793.                         campo_array[21,22]:=cella_muro;
  794.                         campo_array[21,23]:=cella_cibo;
  795.                         campo_array[21,24]:=cella_muro;
  796.                         campo_array[21,25]:=cella_muro;
  797.                         campo_array[21,26]:=cella_muro;
  798.                         campo_array[21,27]:=cella_cibo;
  799.                         campo_array[21,28]:=cella_muro;
  800.                         campo_array[22,0]:=cella_muro;
  801.                         campo_array[22,1]:=cella_cibo;
  802.                         campo_array[22,2]:=cella_cibo;
  803.                         campo_array[22,3]:=cella_cibo;
  804.                         campo_array[22,4]:=cella_cibo;
  805.                         campo_array[22,5]:=cella_cibo;
  806.                         campo_array[22,6]:=cella_cibo;
  807.                         campo_array[22,7]:=cella_cibo;
  808.                         campo_array[22,8]:=cella_cibo;
  809.                         campo_array[22,9]:=cella_cibo;
  810.                         campo_array[22,10]:=cella_cibo;
  811.                         campo_array[22,11]:=cella_cibo;
  812.                         campo_array[22,12]:=cella_cibo;
  813.                         campo_array[22,13]:=cella_cibo;
  814.                         campo_array[22,14]:=cella_cibo;
  815.                         campo_array[22,15]:=cella_cibo;
  816.                         campo_array[22,16]:=cella_cibo;
  817.                         campo_array[22,17]:=cella_cibo;
  818.                         campo_array[22,18]:=cella_cibo;
  819.                         campo_array[22,19]:=cella_cibo;
  820.                         campo_array[22,20]:=cella_cibo;
  821.                         campo_array[22,21]:=cella_cibo;
  822.                         campo_array[22,22]:=cella_cibo;
  823.                         campo_array[22,23]:=cella_cibo;
  824.                         campo_array[22,24]:=cella_cibo;
  825.                         campo_array[22,25]:=cella_cibo;
  826.                         campo_array[22,26]:=cella_muro;
  827.                         campo_array[22,27]:=cella_cibo;
  828.                         campo_array[22,28]:=cella_muro;
  829.                         campo_array[23,0]:=cella_muro;
  830.                         campo_array[23,1]:=cella_cibo;
  831.                         campo_array[23,2]:=cella_muro;
  832.                         campo_array[23,3]:=cella_muro;
  833.                         campo_array[23,4]:=cella_muro;
  834.                         campo_array[23,5]:=cella_cibo;
  835.                         campo_array[23,6]:=cella_muro;
  836.                         campo_array[23,7]:=cella_cibo;
  837.                         campo_array[23,8]:=cella_muro;
  838.                         campo_array[23,9]:=cella_muro;
  839.                         campo_array[23,10]:=cella_muro;
  840.                         campo_array[23,11]:=cella_muro;
  841.                         campo_array[23,12]:=cella_muro;
  842.                         campo_array[23,14]:=cella_muro;
  843.                         campo_array[23,15]:=cella_muro;
  844.                         campo_array[23,16]:=cella_muro;
  845.                         campo_array[23,17]:=cella_muro;
  846.                         campo_array[23,18]:=cella_muro;
  847.                         campo_array[23,19]:=cella_cibo;
  848.                         campo_array[23,20]:=cella_muro;
  849.                         campo_array[23,21]:=cella_muro;
  850.                         campo_array[23,22]:=cella_muro;
  851.                         campo_array[23,23]:=cella_muro;
  852.                         campo_array[23,24]:=cella_muro;
  853.                         campo_array[23,25]:=cella_cibo;
  854.                         campo_array[23,26]:=cella_muro;
  855.                         campo_array[23,27]:=cella_cibo;
  856.                         campo_array[23,28]:=cella_muro;
  857.                         campo_array[24,0]:=cella_muro;
  858.                         campo_array[24,1]:=cella_cibo;
  859.                         campo_array[24,2]:=cella_muro;
  860.                         campo_array[24,4]:=cella_muro;
  861.                         campo_array[24,5]:=cella_cibo;
  862.                         campo_array[24,6]:=cella_muro;
  863.                         campo_array[24,7]:=cella_cibo;
  864.                         campo_array[24,8]:=cella_muro;
  865.                         campo_array[24,12]:=cella_muro;
  866.                         campo_array[24,14]:=cella_muro;
  867.                         campo_array[24,18]:=cella_muro;
  868.                         campo_array[24,19]:=cella_cibo;
  869.                         campo_array[24,20]:=cella_muro;
  870.                         campo_array[24,22]:=cella_muro;
  871.                         campo_array[24,23]:=cella_muro;
  872.                         campo_array[24,24]:=cella_muro;
  873.                         campo_array[24,25]:=cella_cibo;
  874.                         campo_array[24,26]:=cella_muro;
  875.                         campo_array[24,27]:=cella_cibo;
  876.                         campo_array[24,28]:=cella_muro;
  877.                         campo_array[25,0]:=cella_muro;
  878.                         campo_array[25,1]:=cella_cibo;
  879.                         campo_array[25,2]:=cella_muro;
  880.                         campo_array[25,4]:=cella_muro;
  881.                         campo_array[25,5]:=cella_cibo;
  882.                         campo_array[25,6]:=cella_muro;
  883.                         campo_array[25,7]:=cella_cibo;
  884.                         campo_array[25,8]:=cella_muro;
  885.                         campo_array[25,12]:=cella_muro;
  886.                         campo_array[25,14]:=cella_muro;
  887.                         campo_array[25,18]:=cella_muro;
  888.                         campo_array[25,19]:=cella_cibo;
  889.                         campo_array[25,20]:=cella_muro;
  890.                         campo_array[25,22]:=cella_muro;
  891.                         campo_array[25,23]:=cella_cibo;
  892.                         campo_array[25,24]:=cella_cibo;
  893.                         campo_array[25,25]:=cella_cibo;
  894.                         campo_array[25,26]:=cella_muro;
  895.                         campo_array[25,28]:=cella_muro;
  896.                         campo_array[26,0]:=cella_muro;
  897.                         campo_array[26,1]:=cella_cibo;
  898.                         campo_array[26,2]:=cella_muro;
  899.                         campo_array[26,3]:=cella_muro;
  900.                         campo_array[26,4]:=cella_muro;
  901.                         campo_array[26,5]:=cella_cibo;
  902.                         campo_array[26,6]:=cella_muro;
  903.                         campo_array[26,7]:=cella_cibo;
  904.                         campo_array[26,8]:=cella_muro;
  905.                         campo_array[26,12]:=cella_muro;
  906.                         campo_array[26,14]:=cella_muro;
  907.                         campo_array[26,18]:=cella_muro;
  908.                         campo_array[26,19]:=cella_cibo;
  909.                         campo_array[26,20]:=cella_muro;
  910.                         campo_array[26,21]:=cella_muro;
  911.                         campo_array[26,22]:=cella_muro;
  912.                         campo_array[26,23]:=cella_cibo;
  913.                         campo_array[26,24]:=cella_muro;
  914.                         campo_array[26,25]:=cella_cibo;
  915.                         campo_array[26,26]:=cella_muro;
  916.                         campo_array[26,28]:=cella_muro;
  917.                         campo_array[27,0]:=cella_muro;
  918.                         campo_array[27,1]:=cella_cibo;
  919.                         campo_array[27,2]:=cella_cibo;
  920.                         campo_array[27,3]:=cella_super_cibo;
  921.                         campo_array[27,4]:=cella_cibo;
  922.                         campo_array[27,5]:=cella_cibo;
  923.                         campo_array[27,6]:=cella_cibo;
  924.                         campo_array[27,7]:=cella_cibo;
  925.                         campo_array[27,8]:=cella_muro;
  926.                         campo_array[27,12]:=cella_muro;
  927.                         campo_array[27,14]:=cella_muro;
  928.                         campo_array[27,18]:=cella_muro;
  929.                         campo_array[27,19]:=cella_cibo;
  930.                         campo_array[27,20]:=cella_cibo;
  931.                         campo_array[27,21]:=cella_cibo;
  932.                         campo_array[27,22]:=cella_cibo;
  933.                         campo_array[27,23]:=cella_super_cibo;
  934.                         campo_array[27,24]:=cella_muro;
  935.                         campo_array[27,25]:=cella_cibo;
  936.                         campo_array[27,26]:=cella_cibo;
  937.                         campo_array[27,28]:=cella_muro;
  938.                         campo_array[28,0]:=cella_muro;
  939.                         campo_array[28,1]:=cella_muro;
  940.                         campo_array[28,2]:=cella_muro;
  941.                         campo_array[28,3]:=cella_muro;
  942.                         campo_array[28,4]:=cella_muro;
  943.                         campo_array[28,5]:=cella_muro;
  944.                         campo_array[28,6]:=cella_muro;
  945.                         campo_array[28,7]:=cella_muro;
  946.                         campo_array[28,8]:=cella_muro;
  947.                         campo_array[28,12]:=cella_muro;
  948.                         campo_array[28,14]:=cella_muro;
  949.                         campo_array[28,18]:=cella_muro;
  950.                         campo_array[28,19]:=cella_muro;
  951.                         campo_array[28,20]:=cella_muro;
  952.                         campo_array[28,21]:=cella_muro;
  953.                         campo_array[28,22]:=cella_muro;
  954.                         campo_array[28,23]:=cella_muro;
  955.                         campo_array[28,24]:=cella_muro;
  956.                         campo_array[28,25]:=cella_muro;
  957.                         campo_array[28,26]:=cella_muro;
  958.                         campo_array[28,27]:=cella_muro;
  959.                         campo_array[28,28]:=cella_muro;
  960.  
  961.                 end
  962.        
  963.        
  964.        
  965.         end
  966.         {Altrimenti se il file input esiste esso viene importato}
  967.         else    begin
  968.                                 Assign(f,input);
  969.                                 reset(f);
  970.                        
  971.                                 a:=0;   {si terrà traccia della posizione del valore che viene letto grazie ad a
  972.                                                 che ad ogni iterazione verra incrementato di 1}
  973.                                
  974.                                 while not eof(f) do
  975.                                 begin
  976.                                         case a of
  977.                                         0:              begin
  978.                                                                 {lettura della larghezza del campo. Essa è il primo valore in un file mappa}
  979.                                                                 read(f,larghezza);
  980.                                                                
  981.                                                                 {dimensione_x_campo ovviamente viene settato a larghezza-1.
  982.                                                                  dimensione_x_campo viene dunque visto come l'indice più alto della mappa}
  983.                                                                 dimensione_x_campo:=larghezza-1;
  984.                                                         end;
  985.                                         1:              begin
  986.                                                                 {lettura dell'altezza del campo. Essa è il secondo valore in un file mappa}
  987.                                                                 read(f,altezza);
  988.                                                                
  989.                                                                 {settaggio della dimensione del campo tramite l'apposito metodo}
  990.                                                                 settadimatrice(larghezza,altezza,true);
  991.                                                                
  992.                                                                 {stesso disorso di dimensione_x_campo}
  993.                                                                 dimensione_y_campo:=altezza-1;
  994.                                                         end;
  995.                                         else    begin
  996.                                                                 {dopo la seconda lettura vengono importati i dati riguardanti le signole celle
  997.                                                                 - esse vengono memorizzate su file nel seguente formato:
  998.                                                                 cella_salvata=(valore_contenuto*10000)+(x*100)+y
  999.                                                                
  1000.                                                                 se per caso i valori salvati dovessero erroneamente essere fuori range semplicemente
  1001.                                                                 non vengono considerati dato che se venissero utilizzati ne verrebbe fuori una violazione
  1002.                                                                 d'accesso}
  1003.                                                                 read(f,buffer);
  1004.                                                                 if ((trunc((buffer mod 10000)/100)<=dimensione_x_campo) and ((buffer mod 100)<=dimensione_y_campo)) then
  1005.                                                                         campo_array[trunc((buffer mod 10000)/100),(buffer mod 100)]:=trunc(buffer div 10000);
  1006.                                                         end;
  1007.                                         end;
  1008.                                        
  1009.                                         a:=a+1; {a++..tiene traccia dell'iterazione in corso}
  1010.                                 end;
  1011.                                
  1012.                                 close(f);
  1013.                                
  1014.                         {       assign(f,'debug.txt');
  1015.                                 rewrite(f);
  1016.                                 a:=0; b:=0;
  1017.                                
  1018.                                 for a:=0 to dimensione_x_campo do
  1019.                                         for b:=0 to dimensione_y_campo do
  1020.                                         begin
  1021.                                                 case campo_array[a,b] of
  1022.                                                 cella_muro:                             writeln(f,'                     campo_array['+inttostr(a)+','+inttostr(b)+']:=cella_muro;');
  1023.                                                 cella_cibo:                             writeln(f,'                     campo_array['+inttostr(a)+','+inttostr(b)+']:=cella_cibo;');                   
  1024.                                                 cella_super_cibo:               writeln(f,'                     campo_array['+inttostr(a)+','+inttostr(b)+']:=cella_super_cibo;');
  1025.                                                 unwalkable_ghosts:              writeln(f,'                     campo_array['+inttostr(a)+','+inttostr(b)+']:=unwalkable_ghosts;');
  1026.                                                 unwalkable_pacmen:              writeln(f,'                     campo_array['+inttostr(a)+','+inttostr(b)+']:=unwalkable_pacmen;');
  1027.                                                 ghost:                                  writeln(f,'                     campo_array['+inttostr(a)+','+inttostr(b)+']:=ghost;');
  1028.                                                 pacman:                                 writeln(f,'                     campo_array['+inttostr(a)+','+inttostr(b)+']:=pacman;');
  1029.                                                 end;
  1030.                                                
  1031.                                         end;
  1032.                                 close(f);}
  1033.                         end;
  1034.  
  1035.         {naturalmente quando il campo viene creato ancora nessuna entità è
  1036.         registrata quindi numero_entita viene settato a 0}
  1037.         numero_entita:=0;
  1038.        
  1039.         {la traslazione del campo viene settata tramite questi due parametri
  1040.         che sono stati passati al costruttore}
  1041.         posizionex:=ascissa;
  1042.         posizioney:=ordinata;
  1043. end;
  1044.        
  1045.        
  1046. {Restituisce il tipo di cella(ascissa,ordinata)}
  1047. function campo.get_stato_cella(ascissa,ordinata:smallint; editormode:boolean):byte;
  1048. var result:byte;
  1049. begin
  1050.         {se la cella a cui si fa riferimento esiste viene restituito il suo valore.
  1051.         Altrimenti viene viene restituita cella_vuota se il valore è proprio fuori range, se
  1052.         questa cella esce dal range di poco (+1 o -1) allora viene restituito il contenuto
  1053.         della cella presente dall'altro capo della mappa.}
  1054.         if (((ascissa<=dimensione_x_campo) and (ordinata<=dimensione_y_campo)) and ((ascissa>=0) and (ordinata>=0))) then
  1055.                 result:=campo_array[ascissa,ordinata]
  1056.         else
  1057.         begin
  1058.                         if ascissa=dimensione_x_campo+1 then result:=campo_array[0,ordinata]
  1059.                         else if ascissa=-1 then result:=campo_array[dimensione_x_campo,ordinata]
  1060.                         else if ordinata=dimensione_y_campo+1 then result:=campo_array[ascissa,0]
  1061.                         else if ordinata=-1 then result:=campo_array[ascissa,dimensione_y_campo]
  1062.                         else result:=cella_vuota;
  1063.         end;
  1064.        
  1065. if not editormode then
  1066.         case result of
  1067.                 pacman:         result:=cella_vuota;
  1068.                 ghost:          result:=cella_vuota;
  1069.         end;
  1070.        
  1071.         get_stato_cella:=result;
  1072. end;
  1073.  
  1074. {restituisce il numero delle entità attualmente registrate nel campo}  
  1075. function campo.get_numero_entita():byte;
  1076. begin
  1077.         get_numero_entita:=numero_entita;
  1078. end;
  1079.  
  1080. {restituisce l'ascissa dell'entità il cui ID è indice}
  1081. function campo.get_x_entita(indice:byte):byte;
  1082. begin
  1083.         get_x_entita:=xy_entita[indice,0];
  1084. end;
  1085.  
  1086. {restituisce l'ordinata dell'entità il cui ID è indice}
  1087. function campo.get_y_entita(indice:byte):byte;
  1088. begin
  1089.         get_y_entita:=xy_entita[indice,1];
  1090. end;
  1091.  
  1092. {funzione che registra le entità nel campo. Ben documentata nella dichiarazione
  1093. della classe. E' al momento la principale candidata a risolvere il problema
  1094. delle posizioni iniziali dei fantasmi} 
  1095. function campo.set_xy_entita(status:byte; needanid:boolean):registrazione;
  1096. var
  1097.         a,b:byte;
  1098.         found:boolean;
  1099.         tmp:registrazione;
  1100. begin
  1101.  
  1102.         a:=0;
  1103.         b:=0;
  1104.         found:=false;
  1105.         tmp.id:=0;
  1106.         tmp.x_iniziale:=0;
  1107.         tmp.y_iniziale:=0;
  1108.  
  1109.         if needanid then
  1110.         begin
  1111.                 for a:=0 to dimensione_x_campo do
  1112.                         for b:=0 to dimensione_y_campo do
  1113.                         begin
  1114.                                 if campo_array[a,b]=ghost then
  1115.                                 begin
  1116.                                         found:=true;
  1117.                                         tmp.x_iniziale:=a;
  1118.                                         tmp.y_iniziale:=b;
  1119.                                 end;
  1120.                         end;
  1121.        
  1122.                 case found of
  1123.                 true:   begin
  1124.                                         {Il numero delle entità attualmente in gioco viene incrementato di 1}
  1125.                                         numero_entita:=numero_entita+1;
  1126.                                         {E il numero attuale viene restituito come id.
  1127.                                         Di conseguenza chi prima si registra avrà un id più
  1128.                                         basso chi si registra per ultimo avrà il più alto}
  1129.                                         tmp.id:=numero_entita;
  1130.                                        
  1131.                                         xy_entita[numero_entita,0]:=tmp.x_iniziale;
  1132.                                         xy_entita[numero_entita,1]:=tmp.y_iniziale;
  1133.                                         xy_entita[numero_entita,2]:=status;
  1134.                                        
  1135.                                         campo_array[tmp.x_iniziale,tmp.y_iniziale]:=cella_vuota;
  1136.                                 end;
  1137.                 false:  begin
  1138.                                         tmp.id:=-1;
  1139.                                         tmp.x_iniziale:=0;
  1140.                                         tmp.y_iniziale:=0;
  1141.                                 end;
  1142.                 end;
  1143.         end
  1144.        
  1145.  
  1146. else begin
  1147.                 for a:=0 to dimensione_x_campo do
  1148.                         for b:=0 to dimensione_y_campo do
  1149.                         begin
  1150.                                 if campo_array[a,b]=pacman then
  1151.                                 begin
  1152.                                         found:=true;
  1153.                                         tmp.x_iniziale:=a;
  1154.                                         tmp.y_iniziale:=b;
  1155.                                 end;
  1156.                         end;
  1157.                        
  1158.                 case found of
  1159.                 true:   begin
  1160.                                         tmp.id:=1;
  1161.                                         campo_array[tmp.x_iniziale,tmp.y_iniziale]:=cella_vuota;
  1162.                                 end;
  1163.                 false:  begin
  1164.                                         repeat
  1165.                                                 tmp.id:=0;
  1166.                                                 randomize;
  1167.                                                 tmp.x_iniziale:=trunc(random()*dimensione_x_campo+1);
  1168.                                                 randomize;
  1169.                                                 tmp.y_iniziale:=trunc(random()*dimensione_y_campo+1);
  1170.                                         until campo_array[tmp.x_iniziale,tmp.y_iniziale]<>cella_muro;
  1171.                                 end;
  1172.                 end;
  1173.        
  1174.        
  1175.         end;
  1176.  
  1177.         {Vengono settati i dati iniziali passati dall'entita
  1178.         che si sta registrando}
  1179.         set_xy_entita:=tmp;
  1180.                
  1181. end;   
  1182.  
  1183. {restituisce lo status dell'entità registrata con ID=indice
  1184. nessun controllo viene eseguito sul valore restituito
  1185. l'interpretazione viene lasciata al chiamante}
  1186. function campo.get_status_entita(indice:byte):byte;
  1187. begin
  1188.         get_status_entita:=xy_entita[indice,2];
  1189. end;
  1190.        
  1191. {Le due funzioni seguenti restituiscono le coordinate
  1192. cartesiane dell'angolo in alto a SX del campo rispetto alla finestra
  1193. grafica in cui esso viene disegnato}   
  1194. function campo.get_posizionex():byte;
  1195. begin
  1196.         get_posizionex:=posizionex;
  1197. end;
  1198.  
  1199. function campo.get_posizioney():byte;
  1200. begin
  1201.         get_posizioney:=posizioney;
  1202. end;
  1203.  
  1204. {Modifica il contenuto della cella(ascissa,ordinata) sostituendo ciò
  1205. che vi era prima con nuovo_valore. Viene eseguito un controllo sull'input
  1206. solo valori consentiti vengono settati}
  1207. procedure campo.mod_stato_cella(ascissa,ordinata,nuovo_valore:byte);
  1208. begin
  1209.         if (((ascissa<=dimensione_x_campo) and (ascissa>=0)) and ((ordinata<=dimensione_y_campo) and (ordinata>=0))) then
  1210.         begin
  1211.                 case nuovo_valore of
  1212.                 cella_vuota:            campo_array[ascissa,ordinata]:=nuovo_valore;
  1213.                
  1214.                 cella_muro:                     campo_array[ascissa,ordinata]:=nuovo_valore;
  1215.                
  1216.                 cella_cibo:                     campo_array[ascissa,ordinata]:=nuovo_valore;
  1217.                
  1218.                 cella_super_cibo:       campo_array[ascissa,ordinata]:=nuovo_valore;
  1219.                
  1220.                 unwalkable_ghosts:      campo_array[ascissa,ordinata]:=nuovo_valore;
  1221.                
  1222.                 unwalkable_pacmen:      campo_array[ascissa,ordinata]:=nuovo_valore;
  1223.                
  1224.                 pacman: campo_array[ascissa,ordinata]:=nuovo_valore;
  1225.                
  1226.                 ghost:  campo_array[ascissa,ordinata]:=nuovo_valore;
  1227.                 else writeln('Valore non consentito!');
  1228.        
  1229.                 end;
  1230.         end;
  1231. end;
  1232.  
  1233. {Ogni entità registrata fa ad essa riferimento per aggiorare la propria posizione
  1234. nel campo}
  1235. procedure campo.mod_xy_entita(indice,nuova_ascissa,nuova_ordinata:byte);
  1236. begin
  1237.         xy_entita[indice,0]:=nuova_ascissa ;
  1238.         xy_entita[indice,1]:=nuova_ordinata ;
  1239. end;
  1240.  
  1241. {Ogni entità registrata fa ad essa riferimento per aggiorare il proprio status}
  1242. procedure campo.mod_xy_status(indice,nuovo_status:byte);
  1243. begin
  1244.         xy_entita[indice,2]:=nuovo_status;
  1245. end;
  1246.  
  1247. {Viene utilizzato solo nell'editor. Questo metodo esposporta la mappa nel file
  1248. output. Overwrite se settato a true consente la sovrascrittura automatica altrimenti
  1249. se settato a false non permette la sovrascrittura di file esistenti}
  1250. procedure campo.esporta_mappa(output:string; overwrite:boolean);
  1251. var
  1252.         f:textfile;
  1253.         a,b:byte;
  1254.         scrittura_in_corso:boolean;
  1255. begin
  1256.         {la stringa 0 viene riconosciuta come input non valido e
  1257.         non viene esportata alcuna mappa. Ciò è finalizzato alla
  1258.         gestione di alcune eccezzioni nell'editor}
  1259.         if output<>'0' then
  1260.         begin
  1261.                 scrittura_in_corso:=false; {scrittura_in_corso determina se alla fine la mappa vada esportata o no
  1262.                                                                         viene inizialmente settata a false}
  1263.        
  1264.                 {$I-}   Assign(f,output);
  1265.                                 append(f);                      {$I+}
  1266.                        
  1267.                 if IOResult=0 then
  1268.                 begin
  1269.                         if overwrite then       {se il file esiste e overwrite è true allora viene sovrascritto
  1270.                                                                 altrimenti non accade nulla e scrittura_in_corso viene lasciato false}
  1271.                         begin
  1272.                                 rewrite(f);
  1273.                                 scrittura_in_corso:=true;
  1274.                         end                    
  1275.                 end
  1276.                
  1277.                 else    begin
  1278.                                         {se il file non esiste allora viene creato}
  1279.                                         rewrite(f);
  1280.                                         scrittura_in_corso:=true;
  1281.                                 end;
  1282.                        
  1283.        
  1284.                 if not scrittura_in_corso then close(f) {se non si deve sovrascrivere il file f allora esso viene chiuso}
  1285.                
  1286.                 else    begin
  1287.                                         {altrimenti si passa alla scrittura}
  1288.                                         write(f,dimensione_x_campo+1);
  1289.                                         write(f,' ');
  1290.                                         writeln(f,dimensione_y_campo+1);
  1291.                                        
  1292.                                         {ricordo che cella_salvata=(valore_contenuto*10000)+(x*100)+y}
  1293.                                         for a:=0 to dimensione_x_campo do
  1294.                                                 for b:=0 to dimensione_y_campo do
  1295.                                                         writeln(f,(campo_array[a,b]*10000)+(a*100)+b);
  1296.                                                
  1297.                                         close(f);
  1298.                                 end;
  1299.         end;
  1300.  
  1301. end;
  1302.  
  1303. {Rappresenta un vuoto. Viene utilizzato nella rappresentazione
  1304. degli altri tipi di cella per pulire ciò che era contenuto
  1305. precedentemente nella cella}
  1306. procedure campo.rappresenta_vuoto(ascissa,ordinata:byte);
  1307. begin
  1308.         ascissa:=ascissa+posizionex;
  1309.         ordinata:=ordinata+posizioney;
  1310.         setviewport((ascissa*dimensione_cella)+1,(ordinata*dimensione_cella)+1,(ascissa*dimensione_cella)+dimensione_cella-1,(ordinata*dimensione_cella)+dimensione_cella-1,true);
  1311.         clearviewport;
  1312.         setviewport(0,0,getmaxx,getmaxy,false);
  1313. end;
  1314.        
  1315. {una cirsconferenza di colore giallo e di raggio 1 con un
  1316. puntino al centro rappresenta il cibo ordinario}
  1317. procedure campo.rappresenta_cibo(ascissa,ordinata:byte);
  1318. begin
  1319.         rappresenta_vuoto(ascissa,ordinata);
  1320.        
  1321.         ascissa:=ascissa+posizionex;
  1322.         ordinata:=ordinata+posizioney;
  1323.                        
  1324.         setcolor(yellow);
  1325.         circle((ascissa*dimensione_cella)+trunc(dimensione_cella/2)+1,(ordinata*dimensione_cella)+trunc(dimensione_cella/2)+1,1);
  1326.         putpixel((ascissa*dimensione_cella)+trunc(dimensione_cella/2)+1,(ordinata*dimensione_cella)+trunc(dimensione_cella/2)+1,yellow);
  1327.        
  1328.         setcolor(black);
  1329. end;
  1330.        
  1331. {un rettangolo rosso rientrato inattraversabile dai pacmen}
  1332. procedure campo.rappresenta_unwalkable_pacmen(ascissa,ordinata:byte);
  1333. begin
  1334.         rappresenta_vuoto(ascissa,ordinata);
  1335.        
  1336.         ascissa:=ascissa+posizionex;
  1337.         ordinata:=ordinata+posizioney;
  1338.        
  1339.         setcolor(red);
  1340.         rectangle(((ascissa*dimensione_cella)+1),((ordinata*dimensione_cella)+4),((ascissa*dimensione_cella)+dimensione_cella-1),((ordinata*dimensione_cella)+8));
  1341. end;
  1342.        
  1343. {muro inattraversabile ne dai fantasmi ne dai pacmen}  
  1344. procedure campo.rappresenta_muro(ascissa,ordinata:byte);
  1345. begin
  1346.         rappresenta_vuoto(ascissa,ordinata);
  1347.        
  1348.         ascissa:=ascissa+posizionex;
  1349.         ordinata:=ordinata+posizioney;
  1350.  
  1351.         setcolor(blue);
  1352.         rectangle((ascissa*dimensione_cella)+1,(ordinata*dimensione_cella)+1,(ascissa*dimensione_cella)+dimensione_cella-1,(ordinata*dimensione_cella)+dimensione_cella-1);
  1353.  
  1354.         setcolor(black);
  1355. end;
  1356.  
  1357. {delle palline di dimensione che varia a seconda di dimensione_cella
  1358. rappresentano il super cibo che mette i fantasmi in fuga e li indebolisce}
  1359. procedure campo.rappresenta_super_cibo(ascissa,ordinata:byte);
  1360. var a:byte;
  1361. begin
  1362.         rappresenta_vuoto(ascissa,ordinata);
  1363.        
  1364.         ascissa:=ascissa+posizionex;
  1365.         ordinata:=ordinata+posizioney;
  1366.        
  1367.         setcolor(yellow);
  1368.         a:=0;
  1369.         for a:=trunc(dimensione_cella/2)-4 downto 1 do
  1370.                 circle((ascissa*dimensione_cella)+trunc(dimensione_cella/2)+1,(ordinata*dimensione_cella)+trunc(dimensione_cella/2)+1,a);
  1371.         putpixel((ascissa*dimensione_cella)+trunc(dimensione_cella/2)+1,(ordinata*dimensione_cella)+trunc(dimensione_cella/2)+1,yellow);
  1372.        
  1373.         setcolor(black);
  1374. end;
  1375.  
  1376. procedure campo.rappresenta_unwalkable_ghosts(ascissa,ordinata:byte);
  1377. begin
  1378.         rappresenta_vuoto(ascissa,ordinata);
  1379.        
  1380.         ascissa:=ascissa+posizionex;
  1381.         ordinata:=ordinata+posizioney;
  1382.        
  1383.         setcolor(red);
  1384.        
  1385.         line(ascissa*dimensione_cella+1,ordinata*dimensione_cella+1,ascissa*dimensione_cella-1+dimensione_cella,ordinata*dimensione_cella-1+dimensione_cella);
  1386.         line(ascissa*dimensione_cella-1+dimensione_cella,ordinata*dimensione_cella+1,ascissa*dimensione_cella+1,ordinata*dimensione_cella-1+dimensione_cella);
  1387.         setcolor(black);
  1388. end;
  1389.  
  1390.  
  1391. procedure campo.rappresenta_cella_ghost(ascissa,ordinata:byte);
  1392. begin
  1393.         rappresenta_vuoto(ascissa,ordinata);
  1394.  
  1395.         ascissa:=ascissa+posizionex;
  1396.         ordinata:=ordinata+posizioney;
  1397.        
  1398.         setcolor(green);
  1399.         if dimensione_cella>=15 then SetTextStyle(CourierNewFont,HorizDir,2)
  1400.         else SetTextStyle(CourierNewFont,HorizDir,1);
  1401.        
  1402.         outtextxy(ascissa*dimensione_cella+2,ordinata*dimensione_cella,'F');
  1403.         SetTextStyle(CourierNewFont,HorizDir,2);
  1404. end;
  1405.  
  1406. procedure campo.rappresenta_cella_pacman(ascissa,ordinata:byte);
  1407. begin
  1408.         rappresenta_vuoto(ascissa,ordinata);
  1409.  
  1410.         ascissa:=ascissa+posizionex;
  1411.         ordinata:=ordinata+posizioney;
  1412.        
  1413.         setcolor(orange);
  1414.         if dimensione_cella>=15 then SetTextStyle(CourierNewFont,HorizDir,2)
  1415.         else SetTextStyle(CourierNewFont,HorizDir,1);
  1416.        
  1417.         outtextxy(ascissa*dimensione_cella+2,ordinata*dimensione_cella,'P');
  1418.         SetTextStyle(CourierNewFont,HorizDir,2);
  1419. end;
  1420.  
  1421.  
  1422. {disegna il rettangolo di mappa di vertici (ascissa_A,ordinata_A,ascissa_B,ordinata_B)
  1423. se è in editor mode allora sarà possibile visualizzare anche i campi che normalmente il
  1424. gioco verrebbero omessio}      
  1425. procedure campo.disegna_mappa(ascissa_A,ordinata_A,ascissa_B,ordinata_B:byte; editormode:boolean);
  1426. var a,b:byte;
  1427. begin
  1428.         a:=0; b:=0;
  1429.         for a:=ascissa_A to ascissa_B do
  1430.                 for b:=ordinata_A to ordinata_B do
  1431.                 case campo_array[a,b] of
  1432.                         cella_vuota:            rappresenta_vuoto(a,b);
  1433.                         cella_muro:                     rappresenta_muro(a,b);
  1434.                         cella_cibo:                     rappresenta_cibo(a,b);
  1435.                         cella_super_cibo:       rappresenta_super_cibo(a,b);
  1436.                         unwalkable_ghosts:      begin
  1437.                                                                         if not editormode then
  1438.                                                                                 rappresenta_vuoto(a,b)
  1439.                                                                         else rappresenta_unwalkable_ghosts(a,b);
  1440.                                                                 end;
  1441.                         unwalkable_pacmen:      rappresenta_unwalkable_pacmen(a,b);
  1442.                         ghost:                          begin
  1443.                                                                         if editormode then
  1444.                                                                                 rappresenta_cella_ghost(a,b)
  1445.                                                                         else rappresenta_vuoto(a,b);
  1446.                                                                 end;
  1447.                         pacman:                         begin
  1448.                                                                         if not editormode then
  1449.                                                                                 rappresenta_vuoto(a,b)
  1450.                                                                         else rappresenta_cella_pacman(a,b);
  1451.                                                                 end;
  1452.                 end;
  1453.                
  1454.        
  1455.                
  1456.         setcolor(white);
  1457.         rectangle(posizionex*dimensione_cella,posizioney*dimensione_cella,(1+dimensione_x_campo+posizionex)*dimensione_cella+1,(1+dimensione_y_campo+posizioney)*dimensione_cella+1);
  1458.         setcolor(black);
  1459. end;
  1460.  
  1461. {Viene utilizzato per ridimensionare il campo (solo nell'editor).
  1462. Se il campo non è ridoto ad una sola colonna o ad una sola riga
  1463. allora è possibile continuare a ridimensionarlo}
  1464. procedure campo.scala_campo(ascissa,ordinata:shortint);
  1465. begin
  1466.         if (((ascissa>=-1) and (ascissa<=1)) and ((ordinata>=-1) and (ordinata<=1))) then
  1467.         begin
  1468.                 if not ((length(campo_array)=1) or (length(campo_array[0])=1)) then
  1469.                 begin
  1470.                         setlength(campo_array,length(campo_array)+ascissa,length(campo_array[0])+ordinata);
  1471.                         dimensione_x_campo:=dimensione_x_campo+ascissa;
  1472.                         dimensione_y_campo:=dimensione_y_campo+ordinata;
  1473.                 end
  1474.                 else if ((length(campo_array)=1) or (length(campo_array[0])=1)) then
  1475.                 begin
  1476.                         if ((ascissa=1) or (ordinata=1)) then
  1477.                         begin
  1478.                                 setlength(campo_array,length(campo_array)+ascissa,length(campo_array[0])+ordinata);
  1479.                                 dimensione_x_campo:=dimensione_x_campo+ascissa;
  1480.                                 dimensione_y_campo:=dimensione_y_campo+ordinata;
  1481.                        
  1482.                         end;
  1483.                
  1484.                 end;
  1485.         end;
  1486. end;
  1487.  
  1488. {svuota campo pulisce tutto il campo svuotando
  1489. dal loro contenuto tutte le celle}
  1490. procedure campo.svuota_campo;
  1491. var a,b:byte;
  1492. begin
  1493.         a:=0; b:=0;
  1494.        
  1495.         for a:=0 to dimensione_x_campo do
  1496.                 for b:=0 to dimensione_y_campo do
  1497.                         campo_array[a,b]:=cella_vuota;
  1498. end;
  1499.  
  1500. end.