(*Nome source: pacman*)
(*Versione: 0.7-beta*)
(*Licenza: GNU GPL*)
(*Rilascio: 06/09/2010*)
(*Autore: Francesco Marrone (alias Giarados)*)
(*Descrizione: menu + editor + main + credits + info --> tutto in questo modulo*)
program pacman_06;
uses mura,entita,
wincrt,wingraph,ghosts_pacmen,
pulsanti,main,editor;
const percorso_logo='images\logo.bmp';
const larghezza_logo=109;
const altezza_logo=350;
var
tasto_gioca,tasto_editor,tasto_uscita,tasto_info,tasto_comandi:pulsante;
tasti_allineati:byte;
gd,gm:smallint;
logo:pointer;
logo_caricato:boolean;
{la procedura credits mostra una schermata con i riconoscimenti ha chi ha
inventato il gioco e a chi l'ha riscritto in pascal o ha collaborato nello
sviluppo}
procedure credits;
var backtomaimenu:pulsante;
begin
backtomaimenu.crea(1, 19, 3, 4, 1, 2,'Back');
cleardevice;
setcolor(yellow);
SetTextStyle(boldfont,HorizDir,5);
outtextxy(100,1,'PacMan');
SetTextStyle(italicfont,HorizDir,2);
outtext(' v. '+versione);
outtextxy(10,70,'PacMan è un videogioco ideato da Tohru Iwatani');
outtextxy(10,80,'programmatore della Namco e pubblicato per la ');
outtextxy(10,90,'prima volta dalla Midway Games nel 1980 nel ');
outtextxy(10,100,'formato arcade da sala.');
outtextxy(10,120,'Il gioco che qui vi viene proposto è un remake');
outtextxy(10,130,'dell''originale progettato da Franesco Marrone');
outtextxy(10,140,'e da lui stesso sviluppato.');
outtextxy(10,160,'Viene rilasciato sotto lincenza GNU GPL.');
outtextxy(10,170,'Si troverà in allegato il testo della licenza');
outtextxy(10,180,'e il source code. Si prega di rispettare i');
outtextxy(10,190,'termini della suddetta e nel caso ridistribuiate');
outtextxy(10,200,'il gioco di allegare nuovamente la stessa e il');
outtextxy(10,210,'sorgente.');
outtextxy(10,230,'Sperando che abbiate una buona esperienza di');
outtextxy(10,240,'gioco vi ringrazio di utilizzare questo software');
outtextxy(10,260,'Segnalazione bug: marronciccio@gmail.com');
outtextxy(100,290,'Francesco Marrone (alias Giarados)');
while not backtomaimenu.pressato do backtomaimenu.disegna;
cleardevice;
SetTextStyle(CourierNewFont,HorizDir,2);
end;
{la procedura comandi mostra una breve guida a come
utilizzare la tastiera per giocare}
procedure comandi;
var backtomaimenu:pulsante;
begin
backtomaimenu.crea(1, 1, 3, 4, 1, 2,'Back');
cleardevice;
setcolor(yellow);
SetTextStyle(boldfont,HorizDir,5);
outtextxy(100,1,'PacMan');
SetTextStyle(boldfont,HorizDir,2);
outtext(' v. '+versione);
outtextxy(10,80, 'Movimento verso l''alto: Freccia Su');
outtextxy(10,100, 'Movimento verso il basso: Freccia Giù');
outtextxy(10,120, 'Movimento verso destra: Freccia DX');
outtextxy(10,140, 'Movimento verso sinistra: Freccia SX');
outtextxy(10,160, 'Pausa: Space Bar');
outtextxy(10,180, 'Uscita: Esc');
SetTextStyle(boldfont,HorizDir,4);
outtextxy(35,200,'Trucchi sbloccati');
SetTextStyle(boldfont,HorizDir,2);
{nel caso in cui si totalizza un punteggio superiore a X si sbloccheranno
determinati trucchi}
if highest>=30000 then
outtextxy(10,240, 'Gambe in spalla! SHIFT+F')
else outtextxy(10,240, '**************** *****');
if highest>=70000 then
outtextxy(10,260, 'One up! +')
else outtextxy(10,260, '**************** *****');
if highest>=90000 then
outtextxy(10,280, 'Walls off! SHIFT+V')
else outtextxy(10,280, '**************** *****');
while not backtomaimenu.pressato do backtomaimenu.disegna;
cleardevice;
SetTextStyle(CourierNewFont,HorizDir,2);
end;
begin
{viene caricato il logo..}
if thisbitmapexists(percorso_logo,larghezza_logo,altezza_logo)=1 then
begin
alloca_memoria(logo,percorso_logo,larghezza_logo,altezza_logo);
logo_caricato:=true;
end
else logo_caricato:=false;
{apre il file hishest_score e importa il punteggio massimo
se non esiste lo crea e vi scrive 0}
assign(score_file,'highest_scores');
if thisfileexists('highest_scores') then
begin
reset(score_file);
read(score_file,highest);
end
else begin
rewrite(score_file);
write(score_file,0);
end;
{la grafica viene inizializzata e vengono creati tutti i tasti}
gd:=NoPalette; gm:=mCustom;
setwindowsize(350,350);
initgraph(gd,gm,nome_gioco);
tasti_allineati:=10;
{se esiste il logo il layout del menu principale varia rispetto al caso in cui tale logo non esiste}
tasto_gioca.crea (tasti_allineati, 2, 3, 7, 1, 2,'Play');
if logo_caricato then tasti_allineati+=1;
tasto_editor.crea (tasti_allineati, 6, 3, 7, 1, 2,'Editor');
if logo_caricato then tasti_allineati+=1;
tasto_info.crea (tasti_allineati, 10, 3, 7, 1, 2,'Info');
if logo_caricato then tasti_allineati+=1;
tasto_comandi.crea (tasti_allineati, 14, 3, 7, 1, 2,'Comandi');
if logo_caricato then tasti_allineati+=1;
tasto_uscita.crea (tasti_allineati, 18, 3, 7, 1, 2,'Exit');
repeat
{se il logo è stato cariato allora viene mostrato}
if logo_caricato then putimage(0,0,logo^,normalput)
else begin
{altrimenti viene visualizzato il nome del gioco}
setcolor(yellow);
SetTextStyle(boldfont,VertDir,5);
outtextxy(55,300,nome_gioco);
SetTextStyle(CourierNewFont,HorizDir,2);
setcolor(getbkcolor);
end;
{vengono disegnati i tasti}
tasto_gioca.disegna;
tasto_editor.disegna;
tasto_info.disegna;
tasto_uscita.disegna;
tasto_comandi.disegna;
{se viene premuto il tasto gioca allora
viene avviata una sessione di gioco}
if tasto_gioca.pressato then
begin
closegraph;
gioco;
gd:=NoPalette; gm:=mCustom;
setwindowsize(350,350);
initgraph(gd,gm,nome_gioco);
end;
{se tasto_editor viene pressato
allora viene avviata una sessione dell'editor di mappa}
if tasto_editor.pressato then
begin
closegraph;
aneditor;
gd:=NoPalette; gm:=mCustom;
setwindowsize(350,350);
initgraph(gd,gm,nome_gioco);
end;
if tasto_info.pressato then credits;
if tasto_comandi.pressato then comandi;
until tasto_uscita.pressato or CloseGraphRequest; {ripeti il tutto sino a quando exit viene pressato o quando la finestra viene chiusa}
closegraph;
end.