PROGRAM esempio_4;
GLOBAL
memoria;
musica;
suono1,suono2,suono3;
numero_colonne[15];
colonne[15];
frutta;
frequenza;
caduta;
punti;
livello;
superato;
cubi;
cuore;
BEGIN
set_fps(25, 0);
set_mode(320, 240, 16);
load_fpg("lezioni\lezione-4\esem-4.fpg");
load_fnt("lezioni\lezione-4\esem-4.fnt");
musica = load_song("lezioni\lezione-4\badmoon.mod",1);
suono1 = load_wav("lezioni\lezione-4\slam.wav");
suono2 = load_wav("lezioni\lezione-4\bloink.wav");
suono3 = load_wav("lezioni\lezione-4\beep1.wav");
Menu();
END
//************************************************************************//
// PROCESSO MENU' //
//************************************************************************//
PROCESS Menu()
BEGIN
delete_text(0);
for(x=0;x<=15;x++)numero_colonne[x] = 226; end
for(x=0;x<=15;x++)colonne[x] = 0; end
cubi=0;
punti=0;
cuore=0;
let_me_alone();
fade_on();
play_song(musica);
write (1, 100, 60, 3, "Difficoltà:");
write (1, 100, 90, 3, "1. Facile");
write (1, 100, 120, 3, "2. Normale");
write (1, 100,150, 3, "3. Difficile");
write (1, 100,180, 3, "Esc. Esci");
graph = write_in_map (1, "Slug", 4); //
Pone il titolo
size = 200;
x = 160;
y = 20;
timer=0;
LOOP // finisce se viene selezionato un livello
FRAME;
if(key(_esc) and timer>=50)
fade_off();
exit("www.gemixstudio.it",0);
end
// stabilisce le varie opzioni di difficoltà
IF (key(_1))
livello_selezionato(1);
BREAK;
END
IF (key(_2))
livello_selezionato(2);
BREAK;
END
IF (key(_3))
livello_selezionato(3);
BREAK;
END
END
delete_text(0);
Inizio();
END
//************************************************************************//
// PROCESSO LIVELLO_SELEZIONATO //
//************************************************************************//
PROCESS livello_selezionato(l)
BEGIN
// assegna le varie opzioni in base al livello
selezionato
IF (l == 1)
frequenza = 150;
frutta = 6;
caduta = 4;
livello=2;
superato=48;
END
IF (l == 2)
frequenza = 120;
frutta = 4;
caduta = 8;
livello=4;
superato=80;
END
IF (l == 3)
frequenza = 70;
frutta = 2;
caduta = 10;
livello=6;
superato=112;
END
END
//************************************************************************//
// PROCESSO INIZIO //
//************************************************************************//
PROCESS Inizio()
BEGIN
put_screen(0,20);
size = 50;
WRITE_INT(1,10,0,0,OFFSET punti);
WRITE_INT(1,280,0,0,OFFSET cuore);
put(0,11,260,15);
Slug(100,200,100);
Vita(120,8);
Vita(100,8);
Vita( 80,8);
Attore1();
END
//************************************************************************//
// PROCESSO VITA //
//************************************************************************//
PROCESS Vita(x, y)
BEGIN
size = 50;
timer[1] = 0;
//WRITE(0,10,35,0,"MEMORIA LIBERA:");
//WRITE_INT(0,100,35,0,OFFSET memoria);
LOOP
//memoria=Memory_Free(); // questa funzione ci
occore durante la progettazione dei giochi
// in quanto ci da sempre la memoria disponibile del computer
IF ((timer[1] % 50) > 25)
graph = 1;
ELSE
graph = 2;
END
IF (timer[1] > 120)
flags = 1; // gira a sinistra
x--; // cammina
ELSE
flags = 0; // gira a destra
x++;
END
FRAME ;
IF (timer[1] > 240) timer[1] = 0; END
if(key(_esc))fade_off(); clear_screen(); Menu(); end
END
END
//************************************************************************//
// PROCESSO SLUG //
//************************************************************************//
PROCESS Slug(x, y, size)
PRIVATE
prex;
salto;
altezza_a;
a;b;c;
x2;
BEGIN
z=-10;
LOOP
IF (size < 100) size += 2; END
IF ((timer[1] % 50) > 25) // Anima il grafico
graph = 1;
ELSE
graph = 2;
END
c=0; // correggiamo la posizione del nostro personaggio
nelle colonne
b=0;
for(a=0;a<=x;a++)
b++;
if(b==20) b=0;c++;end
end
if(b<=19 and a==x)c++; end
altezza_a=colonne[c];
altezza_a*=20;
altezza_a=206-altezza_a;
IF (salto > 0) // salto in curso
y -= salto;
salto--;
ELSE
IF (y < altezza_a )
y+=5;
ELSE
IF (collision(TYPE Mattoni))
if(flags == 0) x=c*20+10; else x=c*20+9; end end //
correggiamo la posizione del nostro personaggio nelle colonne
y = altezza_a;
IF (key(_up)) salto = 7; END // e possibile saltare
solo se ha il suolo
IF (key(_SPACE) and cuore>=1) cuore--; salto=14; END //
e possibile saltare solo se ha il suolo e la disponibilità
END
END
prex=x;
IF (key(_left)) x-=5; flags = 1; END
IF (key(_right)) x+=5; flags = 0; END
IF (x < 9) x = 9; END
IF (x > 310) x = 310; END
IF (collision(TYPE Mattoni)) x = prex; END
if (cubi==superato)
frame(5000);
flags = 0;
from x2=1 to 340 step+1;
x+=x2;
frame;
end
end
FRAME;
END
END
//************************************************************************//
// PROCESSO ATTORE 1 //
//************************************************************************//
PROCESS Attore1()
PRIVATE
a;
b;
cade[15];
img;
BEGIN
x=30;
y=0;
//graph = 3;// il nostro attore fantasma se gli
assegniamo un grafico verrà visualizzato
b=1;
LOOP
IF (a)
b++;
x+=20;
ELSE
b--;
x-=20;
END
IF(rand(0,200)> frequenza AND cade[b]<=livello)
IF(cubi>=25 )frequenza--;END
img=rand(3,11);
if(img<=5)
cade[b]+=1;
Mattoni(x,y,b,img);
else
Doni(x,y,b,img);
end
frame(2000);
END
if (cubi==superato)
WRITE(1,110,10,0,"*HURRA!*");
frame(20000);
fade_off();
clear_screen();
menu();
break;
end
IF (x>=310) a=false; END
IF (x<=10) a=true; END
FRAME;
END
END
//************************************************************************//
// PROCESSO MATTONI //
//************************************************************************//
PROCESS Mattoni(x,y,altezza,graph)
PRIVATE
b_y;
r=20;
BEGIN
b_y=numero_colonne[altezza]-=20;
z=10;
WHILE (r>0)
r--;
y ++;
FRAME;
END
LOOP
IF (collision(TYPE Slug) AND (graph<=5))
Morto();
END
IF (y<b_y)
y += caduta;
else
y=b_y;
sound (suono3, 64, 512);
colonne[altezza]+=1;
cubi++;
BREAK;
END
FRAME;
END
loop
frame;
end
END
//************************************************************************//
// PROCESSO DONI //
//************************************************************************//
PROCESS Doni(x,y,altezza,graph)
PRIVATE
b_y;
r=20;
tempo;
BEGIN
b_y=numero_colonne[altezza];
b_y-=20;
z=100;
WHILE (r>0)
r--;
y ++;
FRAME;
END
LOOP
IF (collision(TYPE Slug))if(graph==11)cuore++;end sound (suono1, 64,
512);graph=21;punti+=10; break;END
IF (y<b_y)
y += caduta;
else
y=b_y;
sound (suono3, 64, 512);
BREAK;
END
FRAME;
END
tempo=0;
loop
tempo++;
if(size>=1 and tempo>60)size-=10;end
IF (collision(TYPE Slug))if(graph==11)cuore++;end sound (suono1, 64,
512);graph=21;punti+=10; END
frame;
end
END
//************************************************************************//
// PROCESSO MORTO //
//************************************************************************//
PROCESS Morto()
PRIVATE
proc;
BEGIN
sound (suono2, 64, 256);
// ottiene ID del protagonista
proc = get_id(TYPE Slug);
// scomponi in varie miniature il protagonista
Slugx (proc.x, proc.y, -30, -10);
Slugx (proc.x, proc.y, 30, -10);
Slugx (proc.x, proc.y, -20, -0);
Slugx (proc.x, proc.y, 20, -20);
Slugx (proc.x, proc.y, -10, -40);
Slugx (proc.x, proc.y, 10, -40);
Slugx (proc.x, proc.y, -10, 0);
Slugx (proc.x, proc.y, 10, 0);
signal (proc, S_KILL); // elimina il protagonista
WHILE (get_id(TYPE Slugx)) // attende che non
vi siano miniature nello schermo
FRAME;
END
proc = get_id(TYPE Vita);
IF (proc);
FROM x = 0 TO 20; FRAME; END
Slug(proc.x, proc.y, 50);
signal (proc, S_KILL); // elimina una vita
ELSE
FROM x = 0 TO 40; FRAME; END // aspetta un poco
fade_off();
clear_screen();
Menu(); // Ricomincia il gioco
END
END
//************************************************************************//
// PROCESSO SLUGX //
//************************************************************************//
PROCESS Slugx (x, y, vel_x, vel_y)
BEGIN
graph = 1;
size = 25;
resolution = 10;
x *= 10; y *= 10;
WHILE (y < 20000)
y += vel_y;
x += vel_x;
vel_y += 10;
angle += 2000;
FRAME;
END
END |