|
|
![]() ![]() ![]() ![]() | Il codice sorgente del gioco č molto complesso, č composto da pių di 6200 righe di programma!. Per questo motivo l'ho suddiviso in sezioni: Sezione 1 Menų del gioco Sezione 2 Gioco: comprende i processi del gioco vero e proprio Sezione 3 Tutorial: i processi che gestiscono il tutorial del gioco per l'utente Sezione 4 Multi Players: per il gioco in rete (parte non terminata) Sezione 5 Mappa del mondo: la mappa del mondo per la scelta dei livelli Sezione 6 Funzioni per i tasti: sono le funzioni che controllano quando il giocatore preme i tasti Sezione 7 Tabella dei record: qui viene gestito il file contenente i migliori punteggi Sezione 8 Editor dei livelli: per la creazione dei livelli
// Scot Davide // Classe 5°Bi // Anno 1999/2001 // Ultima modifica 18/06/01 // 1.00 Program Gioco_Principale; Global File_Fnt[1]; Byte Controllo; // Utilizzata dall'editor e da tipo gioco 2 e dai menu /* Timer del gioco sono usati 0 Per giocatore 1 Per Paletta 1 1 Per giocatore 2 Per Paletta 2 2 Per Tabella Giocatore 1 o Taballa a tempo 3 Per Tabella Giocatore 2 4 Schermata Continua o Schermata Continua_Doppio 5 Continua_Doppio 6 7 8 Gioco Utente[n].Tempo_Ani[n] 9 Per andare al tutorial da */ /* Gerarchia altezze -10 Scia palla -30 Palla -20 Paletta e Oggetti -40 Barre e Bonus -50 Sparo -100 Tebelle Varie -120 Palla all'Inizio */ Struct Tasti[1]
Byte Tipo_Sel;
/*
1 Tasti
2 Joy
*/
Byte Sinistra;
Byte Destra ;
Byte Bottone ;
End //=
// 1,75,77,28,
// 1,30,32,29; Struct Cont_Palla[1]
Byte Quante;
Ferma[2];
Struct Movimento[2] // Per controllo loop
x [19];
y [19];
End
Byte Velocita[2];
Angolo[2];
End; Struct Utente[1]
Matrice [36,50]; // Per controllo rimbalzi
Byte Blocco_Comandi;
Byte Lancio_Iniziale; // Per far decidere l'angolo
Byte Inizio_sn; // Per fare partire i timer delle tabelle
Int Punti_Colpi; // Punti proporzionali a mattoni in successione colpiti
Byte Tempo_Ani[5];
/* Uso velocit
animazioni
1 Paletta
2 e 3 Grafici Sparo
4 Palla
5 Decidi Angolo
*/
Byte Livello;
String Sezione[1];
Byte Numero_Blocchi;
Byte Numero_Tunnel;
Int Vite; // Int perch deve andare negativo nel gioco a vita
Byte Continua;
Punteggio;
End;Byte Esci_Gioco; /* Quando deve uscire da un gioco 0 Non esce da processo gioco 1 Esce e va a Mappa mondo 2 Esce, Inserisci record e Scelta 3 Esce, Scelta ma non inserisci record 4 Esce, ma non carica nessuna schermata */ Struct Cont_Paletta[1]
Byte Lung;
Byte Tipo;
End;Nome_Palette[]="Palett01.fpg","Palett02.fpg","Palett03.fpg"; Nome_Suoni[]="Suoni\Click.wav","Suoni\Back.wav","Suoni\SPaletta.wav",
"Suoni\Track.wav","Suoni\Tselect.wav","Suoni\Ogg1.wav",
"Suoni\Ogg2.wav", "Suoni\Ogg3.wav" ,"Suoni\All_P.wav",
"Suoni\All_M.wav","Suoni\Laser.wav","Suoni\Battle1.wav","Suoni\Battle2.wav";Nome_Sezioni[]="Foresta.fpg","America.fpg","Egitto.fpg"; Nome_Font[] ="Foresta.fnt","America.fnt","Egitto.fnt"; Struct Cont_Bonus[1]
Byte Contrario;
Byte Multi_Ball;
Byte Sparo_sn;
Byte Super_sn;
Byte Attaccata;
Byte Allungamento;
End; Struct Multi_Player[1]
Struct Paletta
X,Y,Graph;
End;
// Struct Palla[2]
// Id_Palla,X,Y,Graph;
// End
Byte Ready;
Int Vita;
End;Pos_Sch[1]=180,180; // Da la posizione dei due giocatori Byte Tipo_Gioco; // Tipo di gioco scelto Byte Tutorial_SN; // Se il tutorial in azione File_Contorni; File_Paletta[1]; File_Palla ; File_Blocchi; File_Bonus ; File_Oggetti; //Utilizzato da Mondo e da alcuni Men File_Tutorial; File_Record; File_Menu; Id_Font[1]; Id_Paletta[1]; memi; //Tamporano Byte prova_liv; // Temporaneo per prova livello Begin Set_fps (60,10); Set_mode (m640x480); Load_pal ("Gioco.pal");
Load ("Tasti.cfg",Offset (Tasti)); // Carica la configurazione dei tasti MKDir ("Livelli");
MKDir ("Livelli/Singolo");
MKDir ("Livelli/Doppio");
MKDir ("Livelli/VSTempo");
MKDir ("Livelli/VSLiv");
MKDir ("Livelli/VSVita");
MKDir ("Livelli/Multi");
MKDir ("Hit"); Mouse.File=Load_fpg ("Mouse.fpg"); Presentazione();
Loop
Frame;
End
End/* // Sezione 1 // // Menu Gioco */ // Presentazione Process Presentazione (); Begin Signal (Type Gioco_Principale,S_Freeze); Frame; Clear_Screen();
Fade_On();
File_Menu=Load_Fpg("Menu.fpg");
File=File_Menu;Put_Screen(File_Menu,201); Graph=410; Size=0; x=320; y=240; Repeat
Size+=1;
Angle+=3600;
Frame(100);
Until (Size==100);
Frame(500);
Repeat
y-=2;
Frame(100);
Until (y==140);Fade_Off(); Menu_Iniziale (); End // Menu iniziale Process Menu_Iniziale (); Private Contatore; Id_Opzioni[5]; Byte Vai_al_menu; Begin Signal (Type Gioco_Principale,S_Freeze); Frame; Clear_Screen();
Fade_On();
File_Menu=Load_Fpg("Menu.fpg");
File=File_Menu;
Define_Region (1,0 ,0,100,480);
Define_Region (2,540,0,100,480);
Start_Scroll(0,File_Menu,210,0,1,2);
Start_Scroll(1,File_Menu,210,0,2,2);Mouse.Graph=1; Graph=410; x=320; y=140; Put_Screen(File_Menu,201); Id_Opzioni[0]=Opzioni_Scelta (320,200,1,0); Frame (400); Id_Opzioni[1]=Opzioni_Scelta (320,250,2,1); Frame (400); Id_Opzioni[2]=Opzioni_Scelta (320,300,3,0); Frame (400); Id_Opzioni[3]=Opzioni_Scelta (320,350,4,1); Frame (400); Id_Opzioni[4]=Opzioni_Scelta (320,400,5,0); Frame (400); Id_Opzioni[5]=Opzioni_Scelta (320,450,6,1); Vai_al_menu=0;
Controllo=0;
Timer[9]=0;
Repeat
If (Mouse.Left)
If (Id_Opzioni[0].z==60) Vai_al_menu=1; End
If (Id_Opzioni[1].z==60) Vai_al_menu=2; End
If (Id_Opzioni[2].z==60) Vai_al_menu=3; End
If (Id_Opzioni[3].z==60) Vai_al_menu=4; End
If (Id_Opzioni[4].z==60) Vai_al_menu=5; End
If (Id_Opzioni[5].z==60) Vai_al_menu=6; End
End
If (Timer[9]>=1000) Vai_al_menu=7; End
Scroll[0].y0++;
Scroll[1].y0++;
Frame;
Until (Vai_Al_Menu>0);Controllo=100; Frame; Contatore=Get_Id (Type Opzioni_Scelta);
While (Contatore)
Frame;
Contatore=Get_Id (Type Opzioni_Scelta);
EndStop_Scroll(0); Stop_Scroll(1); Unload_fpg(File_Menu); Clear_Screen(); Fade_Off(); Switch (Vai_al_menu)
Case 1: Menu_Campagna(); End
Case 2: Menu_Versus(); End
Case 3: Tipo_Gioco=10; Editor(); End
Case 4: Tipo_Gioco=0; Visualizza_Record(Tipo_Gioco); End
Case 5: Menu_Opzioni(); End
Case 6: Exit ("Grazie per aver giocato",0); End
Case 7: Tutorial(); End
End
End// Menu camagna
Process Menu_Campagna ();
Private
Contatore;
Font[1];
Frasi[3];
String Frase;
Id_Opzioni[6];
Byte Vai_al_menu;
Begin
Signal (Type Gioco_Principale,S_Freeze);
For (Contatore=0; Contatore<=1; Contatore++)
Utente[Contatore].Vite=3;
Utente[Contatore].Continua=3;
Utente[Contatore].Numero_Blocchi=0;
Utente[Contatore].Punteggio=0;
Utente[Contatore].Livello=0;
Utente[Contatore].Sezione="A";
End Clear_Screen();
Controllo=0;
Fade_On();
File_Menu=Load_Fpg("Menu.fpg");
File_Oggetti=Load_Fpg("VisPalet.fpg");
Font[0]=Load_Fnt("Menu.fnt");
Font[1]=Load_Fnt("Menu2.fnt");
Define_Region (1,0 ,0,100,480);
Define_Region (2,540,0,100,480);Start_Scroll(0,File_Menu,210,0,1,2); Start_Scroll(1,File_Menu,210,0,2,2); Mouse.Graph=1; Put_Screen(File_Menu,201); Frasi[0]=Opzioni_Testo(320,50,"Modalita in campagna",100,1,Font[0]); Id_Opzioni[0]=Opzioni_Modalita (320,100,0); Frame (400); Frasi[1]=Opzioni_Testo(320,150,"Paletta giocatore 1",100,1,Font[0]); Id_Opzioni[1]=Opzioni_Cambia (320,200,1,1); Frame (400); Id_Opzioni[3]=Opzioni_Scelta (320,400,7,1); Frame (400); Id_Opzioni[4]=Opzioni_Scelta (320,450,8,0); Tipo_Gioco=1; Frase="Singolo"; Cont_Paletta[0].Tipo=0; Cont_Paletta[1].Tipo=0; Vai_al_menu=0;
Repeat
If (Id_Opzioni[0].z==40)
Frasi[3]=Write (Font[1],320,100,4,Frase);
End
If (Id_Opzioni[1].z==100)
Id_Opzioni[5]=Vis_Palette_OPT (320,205,0,800);
End
If (Frase=="Cooperativa") // In modo non ci siano errori
If (Id_Opzioni[2].z==100)
Id_Opzioni[6]=Vis_Palette_OPT (320,315,1,25);
End
End
If (Mouse.Left)
If (Id_Opzioni[0].z==60 And Timer[0]>=100)
Switch (Tipo_Gioco)
Case 1: Tipo_Gioco=2;
Frase="Cooperativa";
Frasi[2]=Opzioni_Testo(320,260,"Paletta giocatore 2",25,0,Font[0]);
Id_Opzioni[2]=Opzioni_Cambia (320,310,25,0);
Controllo=0;
End
Case 2: Tipo_Gioco=1;
Frase="Singolo";
Controllo=25;
End
End
Timer[0]=0;
End If (Id_Opzioni[1].z==40 And Timer[1]>=50)
Cont_Paletta[0].Tipo++;
If (Cont_Paletta[0].Tipo==3) Cont_Paletta[0].Tipo=0; End
Id_Opzioni[5].z=40;
Timer[1]=0;
End
If (Id_Opzioni[1].z==60 And Timer[1]>=50)
If (Cont_Paletta[0].Tipo==0)
Cont_Paletta[0].Tipo=2;
Else
Cont_Paletta[0].Tipo--;
End
Id_Opzioni[5].z=40;
Timer[1]=0;
End If (Frase=="Cooperativa") // Perch non ci siano errori
If (Id_Opzioni[2].z==40 And Timer[2]>=50)
Cont_Paletta[1].Tipo++;
If (Cont_Paletta[1].Tipo==3) Cont_Paletta[1].Tipo=0; End
Id_Opzioni[6].z=40;
Timer[2]=0;
End
If (Id_Opzioni[2].z==60 And Timer[2]>=50)
If (Cont_Paletta[1].Tipo==0)
Cont_Paletta[1].Tipo=2;
Else
Cont_Paletta[1].Tipo--;
End
Id_Opzioni[6].z=40;
Timer[2]=0;
End
End If (Id_Opzioni[3].z==60) Vai_al_menu=1; End
If (Id_Opzioni[4].z==60) Vai_al_menu=2; End
End
Scroll[0].y0++;
Scroll[1].y0++;
Frame;
Until (Vai_Al_Menu>0);Controllo=100; Delete_Text(Frasi[3]); Frame; Contatore=Get_Id (Type Opzioni_Scelta);
While (Contatore)
Frame;
Contatore=Get_Id (Type Opzioni_Scelta);
EndStop_Scroll(0); Stop_Scroll(1); Unload_fpg(File_Menu); Unload_fpg(File_Oggetti); Unload_fnt(Font[0]); Unload_fnt(Font[1]); Delete_Text(All_Text); Clear_Screen(); Fade_Off(); Switch (Vai_al_menu)
Case 1: Menu_Iniziale(); End
Case 2: Mouse.Graph=0; Mappa_Mondo(); End
End
End// Menu versus Process Menu_Versus (); Private Contatore; Font[1]; Frasi[7]; String Frase1; String Frase2; String Frase3; Byte Automatico[1]; Id_Opzioni[8];
Byte Vai_al_menu;
Begin
Signal (Type Gioco_Principale,S_Freeze);
For (Contatore=0; Contatore<=1; Contatore++)
Utente[Contatore].Vite=3;
Utente[Contatore].Continua=3;
Utente[Contatore].Numero_Blocchi=0;
Utente[Contatore].Punteggio=0;
Utente[Contatore].Livello=0;
Utente[Contatore].Sezione="A";
End Clear_Screen();
Controllo=0;
Fade_On();
File_Menu=Load_Fpg("Menu.fpg");
File_Oggetti=Load_Fpg("VisPalet.fpg");
Font[0]=Load_Fnt("Menu.fnt");
Font[1]=Load_Fnt("Menu2.fnt");
Define_Region (1,0 ,0,100,480);
Define_Region (2,540,0,100,480);Start_Scroll(0,File_Menu,210,0,1,2); Start_Scroll(1,File_Menu,210,0,2,2); Mouse.Graph=1; Put_Screen(File_Menu,201); Frasi[0]=Opzioni_Testo(320,50,"Modalita in versus",100,1,Font[0]); Id_Opzioni[0]=Opzioni_Modalita (320,100,0); Frame (400); Frasi[1]=Opzioni_Testo(195,150,"Modalita 1",100,1,Font[0]); Id_Opzioni[1]=Opzioni_Modalita (195,200,1); Frame (400); Frasi[2]=Opzioni_Testo(445,150,"Modalita 2",100,1,Font[0]); Id_Opzioni[2]=Opzioni_Modalita (445,200,1); Frame (400); Frasi[3]=Opzioni_Testo(195,250,"Paletta 1",100,0,Font[0]); Id_Opzioni[3]=Opzioni_Cambia (195,300,100,0); Frame (400); Frasi[4]=Opzioni_Testo(445,250,"Paletta 2",100,1,Font[0]); Id_Opzioni[4]=Opzioni_Cambia (445,300,100,1); Frame (400); Id_Opzioni[5]=Opzioni_Scelta (320,400,7,1); Frame (400); Id_Opzioni[6]=Opzioni_Scelta (320,450,8,0); Tipo_Gioco=3; Cont_Paletta[0].Tipo=0; Cont_Paletta[1].Tipo=0; Automatico[0]=0; Automatico[1]=0; Frase1="Tempo"; Frase2="Giocatore"; Frase3="Giocatore"; Vai_al_menu=0;
Repeat
If (Id_Opzioni[0].z==40)
Frasi[5]=Write (Font[1],320,100,4,Frase1);
End
If (Id_Opzioni[1].z==40)
Frasi[6]=Write (Font[1],195,200,4,Frase2);
End
If (Id_Opzioni[2].z==40)
Frasi[7]=Write (Font[1],445,200,4,Frase3);
End
If (Id_Opzioni[3].z==100)
Id_Opzioni[7]=Vis_Palette_OPT (195,305,0,800);
End
If (Id_Opzioni[4].z==100)
Id_Opzioni[8]=Vis_Palette_OPT (445,305,1,800);
End If (Mouse.Left)
If (Id_Opzioni[0].z==60 And Timer[0]>=50)
Switch (Tipo_Gioco)
Case 3: Frase1="Livello"; Tipo_Gioco=4; End
Case 4: Frase1="Vita" ; Tipo_Gioco=5; End
Case 5: Frase1="Tempo" ; Tipo_Gioco=3; End
End
Timer[0]=0;
End
If (Id_Opzioni[1].z==60 And Timer[1]>=50)
Switch (Automatico[0])
Case 0: Automatico[0]=1; Frase2="Computer" ; End
Case 1: Automatico[0]=0; Frase2="Giocatore"; End
End
Timer[1]=0;
End
If (Id_Opzioni[2].z==60 And Timer[2]>=50)
Switch (Automatico[1])
Case 0: Automatico[1]=1; Frase3="Computer" ; End
Case 1: Automatico[1]=0; Frase3="Giocatore"; End
End
Timer[2]=0;
End
If (Id_Opzioni[3].z==40 And Timer[3]>=50)
Cont_Paletta[0].Tipo++;
If (Cont_Paletta[0].Tipo==3) Cont_Paletta[0].Tipo=0; End
Id_Opzioni[7].z=40;
Timer[3]=0;
End
If (Id_Opzioni[4].z==40 And Timer[4]>=50)
Cont_Paletta[1].Tipo++;
If (Cont_Paletta[1].Tipo==3) Cont_Paletta[1].Tipo=0; End
Id_Opzioni[8].z=40;
Timer[4]=0;
End
If (Id_Opzioni[3].z==60 And Timer[3]>=50)
If (Cont_Paletta[0].Tipo==0)
Cont_Paletta[0].Tipo=2;
Else
Cont_Paletta[0].Tipo--;
End
Id_Opzioni[7].z=40;
Timer[3]=0;
End
If (Id_Opzioni[4].z==60 And Timer[4]>=50)
If (Cont_Paletta[1].Tipo==0)
Cont_Paletta[1].Tipo=2;
Else
Cont_Paletta[1].Tipo--;
End
Id_Opzioni[8].z=40;
Timer[4]=0;
End If (Id_Opzioni[5].z==60) Vai_al_menu=1; End
If (Id_Opzioni[6].z==60) Vai_al_menu=2; End
End
Scroll[0].y0++;
Scroll[1].y0++;
Frame;
Until (Vai_Al_Menu>0);Controllo=100; Delete_Text(Frasi[5]); Delete_Text(Frasi[6]); Delete_Text(Frasi[7]); Frame; Contatore=Get_Id (Type Opzioni_Scelta);
While (Contatore)
Frame;
Contatore=Get_Id (Type Opzioni_Scelta);
EndStop_Scroll(0); Stop_Scroll(1); Unload_fpg(File_Menu); Unload_fpg(File_Oggetti); Unload_fnt(Font[0]); Unload_fnt(Font[1]); Delete_Text(All_Text); Clear_Screen(); Fade_Off(); Switch (Vai_al_menu)
Case 1: Menu_Iniziale(); End
Case 2: Mouse.Graph=0; Gioco(Automatico[0],Automatico[1]); End
End
End// Menu opzioni
Process Menu_Opzioni ();
Private
Contatore;
Font[2];
Frasi[3];
String Frase1,Frase2;
Id_Opzioni[2];
Byte Vai_al_menu;
Begin
Clear_Screen();
Controllo=0;
Fade_On();
File_Menu=Load_Fpg("Menu.fpg");
Font[0]=Load_Fnt("Menu.fnt");
Font[1]=Load_Fnt("Menu2.fnt");
Font[2]=Load_Fnt("Menu3.fnt");
Define_Region (1,0 ,0,100,480);
Define_Region (2,540,0,100,480);Start_Scroll(0,File_Menu,210,0,1,2); Start_Scroll(1,File_Menu,210,0,2,2); Mouse.Graph=1; Put_Screen(File_Menu,201); Frasi[0]=Opzioni_Testo(320,10,"Tasti giocatore 1",100,1,Font[0]); Id_Opzioni[0]=Opzioni_Modalita (320,60,1); Cambia_Tasti_OPT (320,150,1); Frame (400); Frasi[1]=Opzioni_Testo(320,220,"Tasti giocatore 2",100,0,Font[0]); Id_Opzioni[1]=Opzioni_Modalita (320,270,0); Cambia_Tasti_OPT (320,360,0); Frame (400); Id_Opzioni[2]=Opzioni_Scelta (320,450,7,1); Frame (400); Vai_al_menu=0; If (Tasti[0].Tipo_Sel==1)
Frase1="Tastiera";
Else
Frase1="Joystick";
End If (Tasti[1].Tipo_Sel==1)
Frase2="Tastiera";
Else
Frase2="Joystick";
End Repeat
If (Id_Opzioni[0].z==40)
Frasi[2]=Write (Font[1],320,60,4,Frase1);
Tasti_OPT (200,155,0,1);
Tasti_OPT (310,155,0,2);
Tasti_OPT (440,155,0,3);
End
If (Id_Opzioni[1].z==40)
Frasi[3]=Write (Font[1],320,270,4,Frase2);
Tasti_OPT (200,365,1,1);
Tasti_OPT (310,365,1,2);
Tasti_OPT (440,365,1,3);
End If (Mouse.Left)
If (Id_Opzioni[0].z==60 And Timer[0]>=50)
If (Tasti[0].Tipo_Sel==1)
If (Tasti[1].Tipo_Sel==2)
Frase2="Tastiera";
Tasti[1].Tipo_Sel=1;
End
Frase1="Joystick";
Tasti[0].Tipo_Sel=2;
Else
Frase1="Tastiera";
Tasti[0].Tipo_Sel=1;
End
Timer[0]=0;
End If (Id_Opzioni[1].z==60 And Timer[1]>=50)
If (Tasti[1].Tipo_Sel==1)
If (Tasti[0].Tipo_Sel==2)
Frase1="Tastiera";
Tasti[0].Tipo_Sel=1;
End
Frase2="Joystick";
Tasti[1].Tipo_Sel=2;
Else
Frase2="Tastiera";
Tasti[1].Tipo_Sel=1;
End Timer[1]=0;
End If (Id_Opzioni[2].z==60) Vai_al_menu=1; End
End
Scroll[0].y0++;
Scroll[1].y0++;
Frame;
Until (Vai_Al_Menu>0);Controllo=100; Delete_Text(Frasi[2]); Delete_Text(Frasi[3]); Frame; Contatore=Get_Id (Type Opzioni_Scelta);
While (Contatore)
Frame;
Contatore=Get_Id (Type Opzioni_Scelta);
EndSignal (Type Cambia_Tasti_OPT,S_Kill); Unload_fpg(File_Menu); Unload_fnt(Font[0]); Unload_fnt(Font[1]); Unload_fnt(Font[2]); Stop_Scroll(0); Stop_Scroll(1); Delete_Text(All_Text); Clear_Screen(); Fade_Off(); Switch (Vai_al_menu)
Case 1: Save("Tasti.cfg",Offset Tasti,Sizeof (Tasti)); Menu_Iniziale(); End
End
End// Processo che visualizza le diverse palette
Process Vis_Palette_OPT (x,y,Giocatore,Esci_Per);
Private
Byte Base;
Begin
File=File_Oggetti;
z=40;
Repeat
If (z==40)
Switch (Cont_Paletta[Giocatore].Tipo)
Case 0: If (Giocatore==0)
Graph=1;
Base=1;
Else
Graph=7;
Base=7;
End
End
Case 1: If (Giocatore==0)
Graph=13;
Base=13;
Else
Graph=19;
Base=19;
End
End
Case 2: If (Giocatore==0)
Graph=25;
Base=25;
Else
Graph=31;
Base=31;
End
End End
z=50;
End
Frame(600);
Graph++;
If (Graph==Base+6) Graph=Base; End
Until (Controllo==100 Or Controllo==Esci_Per);
End// Grafico cambia tasti Process Cambia_Tasti_OPT (Pos_x,y,Byte Ent_Des_Sin); Begin File=File_Menu; Graph=400; If (Ent_Des_Sin==0)
x=Pos_x-400; // Entra nel schermo da sinistra
Repeat
x+=10;
Frame;
Until (x==Pos_x);
Else
x=Pos_x+400; // Entra nel schermo da destra
Repeat
x-=10;
Frame;
Until (x==Pos_x);
Endz=40; Frame; Repeat
Frame;
Until (Controllo==100); If (Ent_Des_Sin==0)
Repeat // Esce dal schermo a destra
x+=10;
Frame;
Until (x==Pos_x+400);
Else
Repeat // Esce dal schermo a sinistra
x-=10;
Frame;
Until (x==Pos_x-400);
EndEnd // Casella per cambiare i tasti
Process Tasti_OPT (x,y,Giocatore,Numero);
Private
String Frase;
Byte Si_No_Tasto;
Byte Valore;
Id_Frase;
Begin
File=File_Menu;
Switch (Numero)
Case 1: Frase=Caratteri_OPT (Tasti[Giocatore].Sinistra); End
Case 2: Frase=Caratteri_OPT (Tasti[Giocatore].Destra ); End
Case 3: Frase=Caratteri_OPT (Tasti[Giocatore].Bottone ); End
End
Graph=300;
Id_Frase=Write (3,x,y,4,Frase);
Repeat
If (Mouse.X>X-30 And Mouse.X<X+30 And Mouse.Y>Y-10 And Mouse.Y<Y+10)
Graph=301;
If (Mouse.Left And Controllo==0)
Controllo=1; // Perch non si premano pi bottoni insieme
Si_No_Tasto=False;
Graph=302;
Repeat
If (Scan_Code!=0)
Valore=Scan_Code;
Si_No_Tasto=Controllo_OPT(Valore);
End
If (key(_Control) And Si_No_Tasto==False)
Valore=29;
Si_No_Tasto=Controllo_OPT(Valore);
End
If (key(_Alt) And Si_No_Tasto==False)
Valore=56;
Si_No_Tasto=Controllo_OPT(Valore);
End
If (key(_L_Shift) And Si_No_Tasto==False)
Valore=42;
Si_No_Tasto=Controllo_OPT(Valore);
End
If (key(_R_Shift) And Si_No_Tasto==False)
Valore=54;
Si_No_Tasto=Controllo_OPT(Valore);
End
If (key(58) And Si_No_Tasto==False)
Valore=58;
Si_No_Tasto=Controllo_OPT(Valore);
End
Frame;
Until (Si_No_Tasto Or Key(_Esc));
If (Si_No_Tasto)
Switch (Numero)
Case 1:
Tasti[Giocatore].Sinistra=Valore;
Frase=Caratteri_OPT (Tasti[Giocatore].Sinistra); End
Case 2:
Tasti[Giocatore].Destra=Valore;
Frase=Caratteri_OPT (Tasti[Giocatore].Destra ); End
Case 3:
Tasti[Giocatore].Bottone=Valore;
Frase=Caratteri_OPT (Tasti[Giocatore].Bottone ); End
End
End
Controllo=0;
End
Else
Graph=300;
End
Frame;
Until (Controllo==100);
Delete_Text(Id_Frase);
End// Funzione controllo tasti Function Controllo_OPT (Numero); Private Byte Cont_Tasti; Begin Cont_Tasti=0; If (Tasti[0].Sinistra==Numero) Cont_Tasti++; End If (Tasti[0].Destra ==Numero) Cont_Tasti++; End If (Tasti[0].Bottone ==Numero) Cont_Tasti++; End If (Tasti[1].Sinistra==Numero) Cont_Tasti++; End If (Tasti[1].Destra ==Numero) Cont_Tasti++; End If (Tasti[1].Bottone ==Numero) Cont_Tasti++; End If (Cont_Tasti>=1)
Return (False);
Else
If (Caratteri_OPT(Numero)!="0")
Return (True);
Else
Return (False);
End
End
End// Funzione che controlla i caratteri
Function Caratteri_OPT (Numero);
Private
String Tasto="0000000000000001QWERTYUIOP[]11ASDFGHJKL@#010ZXCVBNM,._10111010000000000111010101111100000000000000000000000000000000000000000000";
String Frase_Ritorno;
Begin
If (Tasto[Numero]=="0")
Frase_Ritorno="0";
Else If (Tasto[Numero]!="0" And Tasto[Numero]!="1")
Frase_Ritorno=Tasto[Numero];
Else
Switch (Numero)
Case 15: Frase_Ritorno="Tab"; End
Case 58: Frase_Ritorno="Block"; End
Case 28: Frase_Ritorno="Enter"; End
Case 29: Frase_Ritorno="Control"; End
Case 42: Frase_Ritorno="L-Shift"; End
Case 54: Frase_Ritorno="R-Shift"; End
Case 56: Frase_Ritorno="Alt"; End
Case 57: Frase_Ritorno="Space"; End
Case 71: Frase_Ritorno="Home"; End
Case 73: Frase_Ritorno="Page UP"; End
Case 79: Frase_Ritorno="End"; End
Case 81: Frase_Ritorno="Pege DW"; End
Case 82: Frase_Ritorno="Insert"; End
Case 83: Frase_Ritorno="Delete"; End
Case 72: Frase_Ritorno="Up"; End
Case 80: Frase_Ritorno="Down"; End
Case 75: Frase_Ritorno="Left"; End
Case 77: Frase_Ritorno="Right"; End
End
End
End
Return (Frase_Ritorno);
End// Pulsante per la scelta
Process Opzioni_Scelta (Pos_x,y,Byte Tipo,Byte Ent_Des_Sin)
Private
Byte Sel;
Byte Base_Graph;
Begin
File=File_Menu;
Switch (Tipo)
Case 1: Base_Graph=1 ; End
Case 2: Base_Graph=12 ; End
Case 3: Base_Graph=23 ; End
Case 4: Base_Graph=34 ; End
Case 5: Base_Graph=45 ; End
Case 6: Base_Graph=56 ; End
Case 7: Base_Graph=67 ; End
Case 8: Base_Graph=78 ; End
EndGraph=Base_Graph; If (Ent_Des_Sin==0)
x=Pos_x-400; // Entra nel schermo da sinistra
Repeat
x+=10;
Frame;
Until (x==Pos_x);
Else
x=Pos_x+400; // Entra nel schermo da destra
Repeat
x-=10;
Frame;
Until (x==Pos_x);
End Repeat // Gira opzione
Graph++;
Frame(300);
Until (Graph==6+Base_Graph); Repeat
If (Mouse.X>X-75 And Mouse.X<X+75 And Mouse.Y>Y-22 And Mouse.Y<Y+22)
If (Sel==0)
Graph++;
Else
Graph--;
End
If (Graph==11+Base_Graph) Sel=1; Graph=10+Base_Graph; End
If (Graph==6 +Base_Graph) Sel=0; Graph=7 +Base_Graph; End
z=60;
Else
Sel=0;
Graph=6+Base_Graph;
z=50;
End
Frame(250);
Until (Controllo==100); Graph=6+Base_Graph;
Repeat // Rigira opzione
Graph--;
Frame(300);
Until (Graph==Base_Graph); If (Ent_Des_Sin==0)
Repeat // Esce dal schermo a destra
x+=10;
Frame;
Until (x==Pos_x+400);
Else
Repeat // Esce dal schermo a sinistra
x-=10;
Frame;
Until (x==Pos_x-400);
End
End// Pulsante per i cambiamenti Process Opzioni_Cambia (Pos_x,y,Byte Fino_A,Byte Ent_Des_Sin) Private Byte Sel; Begin File=File_Menu; Graph=89; If (Ent_Des_Sin==0)
x=Pos_x-400; // Entra nel schermo da sinistra
Repeat
x+=10;
Frame;
Until (x==Pos_x);
Else
x=Pos_x+400; // Entra nel schermo da destra
Repeat
x-=10;
Frame;
Until (x==Pos_x);
End Repeat // Gira opzione
Graph++;
Frame(300);
Until (Graph==95);z=100; Frame; Repeat
If (Mouse.X>X-125 And Mouse.X<X-50 And Mouse.Y>Y-35 And Mouse.Y<Y+35)
If (Graph>=100) Sel=1; Graph=96; End
If (Graph<=96 ) Sel=0; Graph=96; End If (Sel==0)
Graph++;
Else
Graph--;
End
z=60;
Else If (Mouse.X>X+50 And Mouse.X<X+125 And Mouse.Y>Y-35 And Mouse.Y<Y+35)
If (Graph>=104) Sel=1; Graph=100; End
If (Graph<=100) Sel=0; Graph=100; End If (Sel==0)
Graph++;
Else
Graph--;
End
z=40;
Else
Sel=0;
Graph=95;
z=50;
End
End
Frame(450);
Until (Controllo==100 Or Controllo==Fino_A); Graph=95;
Repeat // Rigira opzione
Graph--;
Frame(300);
Until (Graph==89); If (Ent_Des_Sin==0)
Repeat // Esce dal schermo a destra
x+=10;
Frame;
Until (x==Pos_x+400);
Else
Repeat // Esce dal schermo a sinistra
x-=10;
Frame;
Until (x==Pos_x-400);
End
End// Modalita gioco Process Opzioni_Modalita (Pos_x,y,Byte Ent_Des_Sin) Private Byte Sel; Begin File=File_Menu; Graph=105; z=60; If (Ent_Des_Sin==0)
x=Pos_x-400; // Entra nel schermo da sinistra
Repeat
x+=10;
Frame;
Until (x==Pos_x);
Else
x=Pos_x+400; // Entra nel schermo da destra
Repeat
x-=10;
Frame;
Until (x==Pos_x);
End Repeat // Gira opzione
Graph++;
Frame(300);
Until (Graph==111);z=40; Frame; Repeat
If (Mouse.X>X-100 And Mouse.X<X+100 And Mouse.Y>Y-30 And Mouse.Y<Y+30)
If (Sel==0)
Graph++;
Else
Graph--;
End
If (Graph==116) Sel=1; Graph=115; End
If (Graph==111) Sel=0; Graph=112; End
z=60;
Else
Sel=0;
Graph=111;
z=50;
End
Frame(250);
Until (Controllo==100); Graph=111;
Repeat // Rigira opzione
Graph--;
Frame(300);
Until (Graph==105); If (Ent_Des_Sin==0)
Repeat // Esce dal schermo a destra
x+=10;
Frame;
Until (x==Pos_x+400);
Else
Repeat // Esce dal schermo a sinistra
x-=10;
Frame;
Until (x==Pos_x-400);
End
End// Testi in movimanto Process Opzioni_Testo (Pos_x,y,String Frase,Fino_A,Byte Ent_Des_Sin,Font) Private Id_Frase; Begin File=File_Menu; Id_Frase=Write (Font,Pos_x,y,4,Frase); If (Ent_Des_Sin==0)
x=Pos_X-400; // Entra nel schermo da sinistra
Repeat
x+=10;
Move_Text(Id_Frase,x,y);
Frame;
Until (x==Pos_x);
Else
x=Pos_x+400; // Entra nel schermo da destra
Repeat
x-=10;
Move_Text(Id_Frase,x,y);
Frame;
Until (x==Pos_x);
End Repeat
Frame;
Until (Controllo==100 Or Controllo==Fino_A); If (Ent_Des_Sin==0)
Repeat // Esce dal schermo a destra
x+=10;
Move_Text(Id_Frase,x,y);
Frame;
Until (x==Pos_x+400);
Else
Repeat // Esce dal schermo a sinistra
x-=10;
Move_Text(Id_Frase,x,y);
Frame;
Until (x==Pos_x-400);
End
Delete_Text(Id_Frase);
End/* // Sezione 2 // // Gioco */ // Procedure controllo palla
Process Palla (x,y,Byte Numero,Byte Giocatore);
Private
Int Contatore,Dist;
Id2,Id_Tunnel,Id_Punto;
Id_Blocco;
Ancora;
Byte Gioc_2;
Byte Indice;Begin File=File_Palla; z=-120; // Sopra a tutto nell'inizio Indice=0; // Inizializzazione Id_Blocco=0; Id_Tunnel=0; Id_Punto=0; Utente[Giocatore].Punti_Colpi=0; Graph=1+Giocatore*100; While (Cont_Palla[Giocatore].Ferma[Numero]==1 Or Graph<11+Giocatore*100 And Cont_Bonus[Giocatore].Multi_Ball==False)
x=Id_Paletta[Giocatore].x;
y=Id_Paletta[Giocatore].y-4;
If (Utente[Giocatore].Tempo_Ani[4]>=3 And Graph<11+Giocatore*100)
Graph+=1;
Utente[Giocatore].Tempo_Ani[4]=0;
End
Frame;
EndGraph=11+Giocatore*100; z=-30; Repeat
// Controllo barriere
If (y<=60)
id2=get_id(Type BarraN);
While (id2)
Ancora=True;
For (contatore=140;contatore>=-140 And Ancora==True;contatore-=5)
dist=fget_dist(x,y,id2.x-contatore,id2.y);
If (dist<=6)
Switch (Cont_Palla[Giocatore].Angolo[Numero])
Case 91000..180000: Cont_Palla[Giocatore].Angolo[Numero]+=(180000-Cont_Palla[Giocatore].Angolo[Numero])*2;
End
Case 0..89000 : Cont_Palla[Giocatore].Angolo[Numero] =360000-Cont_Palla[Giocatore].Angolo[Numero];
End
End
Cont_Palla[Giocatore].Movimento[Numero].x[Indice]=Id.x;
Cont_Palla[Giocatore].Movimento[Numero].y[Indice]=Id.y;
Indice++;
If (Indice==20)
Loop_Palla (Numero,Giocatore);
Indice=0;
End
Ancora=False;
Id_Tunnel=0;
Id_Punto=0;
Id_Blocco=0;
Utente[Giocatore].Punti_Colpi=1;
End
End
id2=get_id(Type BarraN);
End
End If (x>260+Pos_Sch[Giocatore])
id2=get_id(Type BarraE);
While (id2)
Ancora=True;
For (contatore=240;contatore>=-240 And Ancora==True;contatore-=5)
dist=fget_dist(x,y,id2.x,id2.y-contatore);
If (dist<=6)
Switch (Cont_Palla[Giocatore].Angolo[Numero])
Case 1000..90000 : Cont_Palla[Giocatore].Angolo[Numero]=180000-Cont_Palla[Giocatore].Angolo[Numero];
End
Case 270000..359000 : Cont_Palla[Giocatore].Angolo[Numero]-=(Cont_Palla[Giocatore].Angolo[Numero]-270000)*2;
End
End
Cont_Palla[Giocatore].Movimento[Numero].x[Indice]=Id.x;
Cont_Palla[Giocatore].Movimento[Numero].y[Indice]=Id.y;
Indice++;
If (Indice==20)
Loop_Palla (Numero,Giocatore);
Indice=0;
End
Ancora=False;
Id_Tunnel=0;
Id_Punto=0;
Id_Blocco=0;
Utente[Giocatore].Punti_Colpi=1;
End
End
id2=get_id(Type BarraE);
End
End If (x<40+Pos_Sch[Giocatore])
id2=get_id(Type BarraO);
While (id2)
Ancora=True;
For (contatore=240;contatore>=-240 And Ancora==True;contatore-=5)
dist=fget_dist(x,y,id2.x,id2.y-contatore);
If (dist<=6)
Switch (Cont_Palla[Giocatore].Angolo[Numero])
Case 181000..270000: Cont_Palla[Giocatore].Angolo[Numero]+=(270000-Cont_Palla[Giocatore].Angolo[Numero])*2;
End
Case 90000..179000: Cont_Palla[Giocatore].Angolo[Numero]=180000-Cont_Palla[Giocatore].Angolo[Numero];
End
End
Cont_Palla[Giocatore].Movimento[Numero].x[Indice]=Id.x;
Cont_Palla[Giocatore].Movimento[Numero].y[Indice]=Id.y;
Indice++;
If (Indice==20)
Loop_Palla (Numero,Giocatore);
Indice=0;
End
Ancora=False;
Id_Tunnel=0;
Id_Punto=0;
Id_Blocco=0;
Utente[Giocatore].Punti_Colpi=1;
End
End
id2=get_id(Type BarraO);
End
End // Controllo paletta 1
Switch (Giocatore)
Case 0: id2=Id_Paletta[0]; End
Case 1: id2=Id_Paletta[1]; End
End;
If (y>=440)
Ancora=True;
For (contatore=Cont_Paletta[Giocatore].Lung;contatore>=-Cont_Paletta[Giocatore].Lung And Ancora==True;contatore-=5)
dist=fget_dist(x,y,id2.x-contatore,id2.y);
If (dist<=6)
If (Cont_Palla[Giocatore].Ferma[Numero]==1)
Repeat
x=id2.x-contatore;
Frame;
Until (Cont_Palla[Giocatore].Ferma[Numero]==0);
End
Switch (Cont_Palla[Giocatore].Angolo[Numero])
Case 271000..360000:
If (Sinistra(Giocatore) Or Destra(Giocatore))
Cont_Palla[Giocatore].Angolo[Numero]=360000-Cont_Palla[Giocatore].Angolo[Numero];
Indice=0;
Else
Cont_Palla[Giocatore].Angolo[Numero]=rand(10000,80000);
Indice=0;
End
End
Case 180000..269000:
If (Sinistra(Giocatore) Or Destra(Giocatore))
Cont_Palla[Giocatore].Angolo[Numero]-=(Cont_Palla[Giocatore].Angolo[Numero]-180000)*2;
Indice=0;
Else
Cont_Palla[Giocatore].Angolo[Numero]=Rand(100000,170000);
Indice=0;
End
End
End
Ancora=False;
Id_Tunnel=0;
Id_Punto=0;
Id_Blocco=0;
Utente[Giocatore].Punti_Colpi=1;
End
End
End // Controllo paletta 2 Solo Per modalita 2
If (Tipo_Gioco==2)
Switch (Giocatore)
Case 0: id2=Id_Paletta[1]; Gioc_2=1; End
Case 1: id2=Id_Paletta[0]; Gioc_2=0; End
End
If (y>=440)
Ancora=True;
For (contatore=Cont_Paletta[Gioc_2].Lung;contatore>=-Cont_Paletta[Gioc_2].Lung And Ancora==True;contatore-=5)
dist=fget_dist(x,y,id2.x-contatore,id2.y);
If (dist<=6)
Switch (Cont_Palla[Giocatore].Angolo[Numero])
Case 271000..360000:
If (Sinistra(Giocatore) Or Destra(Giocatore))
Cont_Palla[Giocatore].Angolo[Numero]=360000-Cont_Palla[Giocatore].Angolo[Numero];
Indice=0;
Else
Cont_Palla[Giocatore].Angolo[Numero]=rand(10000,80000);
Indice=0;
End
End
Case 180000..269000:
If (Sinistra(Giocatore) Or Destra(Giocatore))
Cont_Palla[Giocatore].Angolo[Numero]-=(Cont_Palla[Giocatore].Angolo[Numero]-180000)*2;
Indice=0;
Else
Cont_Palla[Giocatore].Angolo[Numero]=Rand(100000,170000);
Indice=0;
End
End
End
Ancora=False;
Id_Tunnel=0;
Id_Punto=0;
Id_Blocco=0;
Utente[Giocatore].Punti_Colpi=1;
End
End
End
End // Controllo blocchi
Ancora=True;
id2=Get_id(Type Blocco);
While (id2 And Ancora)
Switch (id2.z)
Case 1: Ancora=Controllo_Blocco (40,40,8,8,id,id2,Numero,Giocatore,Indice,Id_Blocco); End
Case 2: Ancora=Controllo_Blocco (40,8 ,8,8,id,id2,Numero,Giocatore,Indice,Id_Blocco); End
Case 3: Ancora=Controllo_Blocco (8 ,40,8,8,id,id2,Numero,Giocatore,Indice,Id_Blocco); End
Case 4: Ancora=Controllo_Blocco (40,16,8,8,id,id2,Numero,Giocatore,Indice,Id_Blocco); End
Case 5: Ancora=Controllo_Blocco (16,40,8,8,id,id2,Numero,Giocatore,Indice,Id_Blocco); End
End
If (Ancora==False)
Id_Tunnel=0;
Id_Blocco=id2;
Id_Punto=0;
Utente[Giocatore].Punti_Colpi++;
Indice++;
If (Indice==20)
Loop_Palla (Numero,Giocatore);
Indice=0;
End
End;
id2=Get_id(Type Blocco);
End // Controllo blocchi speciali
Ancora=True;
id2=Get_id(Type Blocco_Speciale);
While (id2 And Ancora)
Ancora=Controllo_Blocco (56,56,8,8,id,id2,Numero,Giocatore,Indice,Id_Blocco);
If (Ancora==False)
Id_Tunnel=0;
Id_Blocco=id2;
Id_Punto=0;
Utente[Giocatore].Punti_Colpi++;
Indice++;
If (Indice==20)
Loop_Palla (Numero,Giocatore);
Indice=0;
End
End;
id2=Get_id(Type Blocco_Speciale);
End
// Controllo tunnel
id2=Collision(Type Tunnel);
If (id2 And id2<>Id_Tunnel)
Ancora=True;
Repeat
Switch (Tipo_Gioco)
Case 1..2: Contatore=Rand(1,Utente[Giocatore].Numero_Tunnel); End
Case 3..6: Contatore=Rand(1,Utente[0].Numero_Tunnel+Utente[1].Numero_Tunnel); End
End
Dist=0;
Repeat
Id_Tunnel=Get_Id (Type Tunnel);
Dist+=1;
Until (Dist==Contatore)
Frame;
Switch (Tipo_Gioco)
Case 1..2: Ancora=(Id_Tunnel==id2); End
Case 3..6: Ancora=((Id_Tunnel==id2) Or (Id_Tunnel.z-50<>Giocatore)); End
End
Until (Not Ancora);
x=id_Tunnel.x;
y=id_Tunnel.y;
Id_Punto=0;
Id_Blocco=0;
Utente[Giocatore].Punti_Colpi=1;
End // Controllo Multi_Ball
Id2=collision(Type Multi_Ball);
If (Id2 And Cont_Bonus[Giocatore].Multi_Ball==False)
If (Id2.z==104)
Id2.z+=1;
Frame(1000);
Signal (Id,S_kill); Cont_Palla[Giocatore].Velocita[0]=6;
Cont_Palla[Giocatore].Velocita[1]=6;
Cont_Palla[Giocatore].Velocita[2]=6; Cont_Palla[Giocatore].Angolo[0]=Cont_Palla[Giocatore].Angolo[0];
Cont_Palla[Giocatore].Angolo[1]=Cont_Palla[Giocatore].Angolo[0]*3;
Cont_Palla[Giocatore].Angolo[2]=Cont_Palla[Giocatore].Angolo[0]/3; For (Contatore=1;Contatore<=2;Contatore++)
If (Cont_Palla[Giocatore].Angolo[Contatore]>=350000 And Cont_Palla[Giocatore].Angolo[Contatore]<=10000)
Cont_Palla[Giocatore].Angolo[Contatore]+=30000;
End
If (Cont_Palla[Giocatore].Angolo[Contatore]>=80000 And Cont_Palla[Giocatore].Angolo[Contatore]<=100000)
Cont_Palla[Giocatore].Angolo[Contatore]+=30000;
End
If (Cont_Palla[Giocatore].Angolo[Contatore]>=170000 And Cont_Palla[Giocatore].Angolo[Contatore]<=190000)
Cont_Palla[Giocatore].Angolo[Contatore]+=30000;
End
If (Cont_Palla[Giocatore].Angolo[Contatore]>=260000 And Cont_Palla[Giocatore].Angolo[Contatore]<=280000)
Cont_Palla[Giocatore].Angolo[Contatore]+=30000;
End
End Cont_Palla[Giocatore].Ferma[0]=0;
Cont_Palla[Giocatore].Ferma[1]=0;
Cont_Palla[Giocatore].Ferma[2]=0; Cont_Bonus[Giocatore].Multi_Ball=True;
Cont_Palla[Giocatore].Quante=3; Palla (id2.x,id2.y,0,Giocatore);
Palla (id2.x,id2.y,1,Giocatore);
Palla (id2.x,id2.y,2,Giocatore);
End If (Id2.z<104)
Id2.z+=1;
Signal (Id,S_kill);
Cont_Palla[Giocatore].Ferma[0]=1;
Cont_Palla[Giocatore].Velocita[0]=6;
Utente[Giocatore].Lancio_Iniziale=0;
Palla (x,y,0,Giocatore);
End
End // Controllo punto
id2=collision(Type Punti);
If (id2 And id2<>Id_Punto)
Utente[Giocatore].Punteggio+=100;
Id_Punto=id2;
Id_Tunnel=0;
Id_Blocco=0;
Utente[Giocatore].Punti_Colpi=1;
EndIf (Cont_Bonus[Giocatore].Super_sn==1) Scia_Palla(Id.x,Id.y,Giocatore); End If (Cont_Palla[Giocatore].Angolo[Numero]>=360000) Cont_Palla[Giocatore].Angolo[Numero]-=360000; End x+=get_distx(Cont_Palla[Giocatore].Angolo[Numero],Cont_Palla[Giocatore].Velocita[Numero]);
y+=get_disty(Cont_Palla[Giocatore].Angolo[Numero],Cont_Palla[Giocatore].Velocita[Numero]);Frame; Until (y>=480); Cont_Palla[Giocatore].Quante--; If (Cont_Palla[Giocatore].Quante==1) Cont_Bonus[Giocatore].Multi_Ball=False; End End // Funzione controllo loop palla Function Loop_Palla (Byte Numero,Byte Giocatore) Private Byte Indice1,Indice2; N_Volte_Trovato; Begin
For (Indice1=0;Indice1<=19;Indice1++)
Indice2=0;
Repeat
If ((Indice1<>Indice2) And (Cont_Palla[Giocatore].Movimento[Numero].x[Indice1]==Cont_Palla[Giocatore].Movimento[Numero].x[Indice2])
And (Cont_Palla[Giocatore].Movimento[Numero].y[Indice1]==Cont_Palla[Giocatore].Movimento[Numero].y[Indice2]))
N_Volte_Trovato++;
Indice2=49;
End
Indice2++;
Until (Indice2==20 Or Indice2==50);
End
If (N_Volte_Trovato>=10)
N_Volte_Trovato=Rand(10000,20000);
Cont_Palla[Giocatore].Angolo[Numero]=Cont_Palla[Giocatore].Angolo[Numero]+N_Volte_Trovato;
Switch (Cont_Palla[Giocatore].Angolo[Numero])
Case 75000 ..105000: Cont_Palla[Giocatore].Angolo[Numero]=Cont_Palla[Giocatore].Angolo[Numero]-(2*N_Volte_Trovato); End;
Case 165000..195000: Cont_Palla[Giocatore].Angolo[Numero]=Cont_Palla[Giocatore].Angolo[Numero]-(2*N_Volte_Trovato); End;
Case 255000..285000: Cont_Palla[Giocatore].Angolo[Numero]=Cont_Palla[Giocatore].Angolo[Numero]-(2*N_Volte_Trovato); End;
Case 345000..375000: Cont_Palla[Giocatore].Angolo[Numero]=Cont_Palla[Giocatore].Angolo[Numero]-(2*N_Volte_Trovato); End;
End
End
End// Scia Palla
Process Scia_Palla (x,y,Giocatore);
Begin
File=File_Palla;
z=-10;
Graph=12+Giocatore*100;
z=200;
Repeat
Graph++;
Frame(250);
Until (Graph==17+Giocatore*100);
End// Procedura controllo rimbalzo su blocco
Function Controllo_Blocco (L_Blocco,A_Blocco,Incx,Incy,Id_Palla,Id_Blocco,Byte Numero,Byte Giocatore,Byte Indice,Id_Pre)
Private
Int Dist,Contatore;
Ancora=True;
Byte Minore_Di;
Begin
L_Blocco=L_Blocco/2;
A_Blocco=A_Blocco/2;
Ancora=True;
Dist=Fget_Dist(Id_Palla.x,Id_Palla.y,Id_Blocco.x,Id_Blocco.y); Switch (Id_Blocco.z)
Case 1..8: Minore_Di=30; End
Case 9: Minore_Di=45; End
End If (Dist<Minore_Di And Id_Blocco<>Id_Pre)
// Controllo sinistra
For (contatore=A_Blocco;contatore>=-A_Blocco And Ancora==True;contatore-=Incy)
Dist=Fget_Dist(Id_Palla.x,Id_Palla.y,Id_Blocco.x-L_Blocco,Id_Blocco.y-contatore);
If (Dist<=6)
If (Cont_Bonus[Giocatore].Super_sn==False And Controllo_Ind(Id_Blocco))
Switch (Cont_Palla[Giocatore].Angolo[Numero])
Case 1000..90000 : If (Controllo_Matrice(Giocatore,Contatore,L_Blocco,A_Blocco,Id_Blocco,1)==1)
Cont_Palla[Giocatore].Angolo[Numero]=180000-Cont_Palla[Giocatore].Angolo[Numero];
Signal(Id_Blocco,S_Wakeup);
Ancora=False;
End
End
Case 270000..359000: If (Controllo_Matrice(Giocatore,Contatore,L_Blocco,A_Blocco,Id_Blocco,1)==1)
Cont_Palla[Giocatore].Angolo[Numero]-=(Cont_Palla[Giocatore].Angolo[Numero]-270000)*2;
Signal(Id_Blocco,S_Wakeup);
Ancora=False;
End
End
End
End
End
End // Controllo destra
For (contatore=A_Blocco;contatore>=-A_Blocco And Ancora==True;contatore-=Incy)
Dist=Fget_Dist(Id_Palla.x,Id_Palla.y,Id_Blocco.x+L_Blocco,Id_Blocco.y-contatore);
If (Dist<=6)
If (Cont_Bonus[Giocatore].Super_sn==False And Controllo_Ind(Id_Blocco))
Switch (Cont_Palla[Giocatore].Angolo[Numero])
Case 181000..270000: If (Controllo_Matrice(Giocatore,Contatore,L_Blocco,A_Blocco,Id_Blocco,2)==1)
Cont_Palla[Giocatore].Angolo[Numero]+=(270000-Cont_Palla[Giocatore].Angolo[Numero])*2;
Signal(Id_Blocco,S_Wakeup);
Ancora=False;
End
End
Case 89000..179000: If (Controllo_Matrice(Giocatore,Contatore,L_Blocco,A_Blocco,Id_Blocco,2)==1)
Cont_Palla[Giocatore].Angolo[Numero]=180000-Cont_Palla[Giocatore].Angolo[Numero];
Signal(Id_Blocco,S_Wakeup);
Ancora=False;
End
End
End
End
End
End // Controllo giu
For (contatore=L_Blocco;contatore>=-L_Blocco And Ancora==True;contatore-=Incx)
Dist=Fget_Dist(Id_Palla.x,Id_Palla.y,Id_Blocco.x-contatore,Id_Blocco.y+A_Blocco);
If (Dist<=6)
If (Cont_Bonus[Giocatore].Super_sn==False And Controllo_Ind(Id_Blocco))
Switch (Cont_Palla[Giocatore].Angolo[Numero])
Case 91000..180000: Cont_Palla[Giocatore].Angolo[Numero]+=(180000-Cont_Palla[Giocatore].Angolo[Numero])*2;
End
Case 0..89000 : Cont_Palla[Giocatore].Angolo[Numero]=360000-Cont_Palla[Giocatore].Angolo[Numero];
End
End
End
Signal(Id_Blocco,S_Wakeup);
Ancora=False;
End
End // Controllo su
For (contatore=L_Blocco;contatore>=-L_Blocco And Ancora==True;contatore-=Incx)
Dist=Fget_Dist(Id_Palla.x,Id_Palla.y,Id_Blocco.x-contatore,Id_Blocco.y-A_Blocco);
If (Dist<=6)
If (Cont_Bonus[Giocatore].Super_sn==False And Controllo_Ind(Id_Blocco))
Switch (Cont_Palla[Giocatore].Angolo[Numero])
Case 271000..360000: Cont_Palla[Giocatore].Angolo[Numero]=360000-Cont_Palla[Giocatore].Angolo[Numero];
End
Case 180000..269000: Cont_Palla[Giocatore].Angolo[Numero]-=(Cont_Palla[Giocatore].Angolo[Numero]-180000)*2;
End
End
End
Signal(Id_Blocco,S_Wakeup);
Ancora=False;
End
End Cont_Palla[Giocatore].Movimento[Numero].x[Indice]=Id_Palla.x;
Cont_Palla[Giocatore].Movimento[Numero].y[Indice]=Id_Palla.y;End Return (Ancora); End // Funzione controllo se il mattone indistruttibile
Function Controllo_Ind (Id_Blocco);
Private
Ind_si_no;
Begin
Ind_si_no= (Id_Blocco.Graph==33 Or Id_Blocco.Graph==66
Or Id_Blocco.Graph==99 Or Id_Blocco.Graph==132
Or Id_Blocco.Graph==165 Or Id_Blocco=>200);
Return(Ind_si_no);
End// Funzione controllo rimbalzo su matrice per spigoli
Function Controllo_Matrice (Byte Giocatore,Pos_Cont,Dax,Day,Id_Blocco,Tipo)
Private
Si_No,PX,PY;
Begin
If (Tipo_Gioco==2) Giocatore=0; End;
Switch (Tipo)
Case 1: PX=(Id_Blocco.x-Dax-10-Pos_Sch[Giocatore])/8-1;
If (Pos_Cont==Day)
PY=(Id_Blocco.y-Day-10)/8;
Si_No=(Utente[Giocatore].Matrice[PX+1,Py+1]==0);
Else
If (Pos_Cont==-Day)
PY=(Id_Blocco.y+Day-10)/8-1;
Si_No=(Utente[Giocatore].Matrice[PX+1,PY+1]==0);
Else
Si_No=True;
End
End
End
Case 2: PX=(Id_Blocco.x+Dax-10-Pos_Sch[Giocatore])/8;
If (Pos_Cont==Day)
PY=(Id_Blocco.y-Day-10)/8;
Si_No=(Utente[Giocatore].Matrice[PX+1,PY+1]==0);
Else
If (Pos_Cont==-Day)
PY=(Id_Blocco.y+Day-10)/8-1;
Si_No=(Utente[Giocatore].Matrice[PX+1,PY+1]==0);
Else
Si_No=True;
End
End
End
End
Return(Si_No);
End// Funzione cancella tutta la matrice
Function Cancella_Matrice (Byte Giocatore)
Private
Byte A,B;
Begin
For (A=0;A<=36;A++)
Utente[Giocatore].Matrice[A,0]=1;
End For (B=0;B<=50;B++)
Utente[Giocatore].Matrice[0 ,B]=1;
Utente[Giocatore].Matrice[36,B]=1;
End For (A=1;A<=35;A++)
For (B=1;B<=50;B++)
Utente[Giocatore].Matrice[A,B]=0;
End
End
End// Funzione inserimento o cancellazione su matrice
Function Ins_Can_Matrice (Byte Cancella,Byte Giocatore,Byte Tipo,Posx,Posy,Id2)
Private
Byte Dax,Day,Ax,Ay,Contx,Conty;
Begin
Posx=(Posx-Pos_Sch[Giocatore]-10-4)/8;
Posy=(Posy-10-4)/8;
Switch (Tipo)
Case 1: Dax=2; Ax=2; Day=2; Ay=2; End;
Case 2: Dax=2; Ax=2; Day=0; Ay=0; End;
Case 3: Dax=0; Ax=0; Day=2; Ay=2; End;
Case 4: Dax=2; Ax=2; Day=0; Ay=1; End;
Case 5: Dax=0; Ax=1; Day=2; Ay=2; End;
Case 9: Dax=3; Ax=3; Day=3; Ay=3; End;
End If (Cancella==0)
For (Contx=Posx-Dax;Contx<=Posx+Ax;Contx++)
For (Conty=Posy-Day;Conty<=Posy+Ay;Conty++)
Utente[Giocatore].Matrice[Contx+1,Conty+1]=1;
End
End
Utente[Giocatore].Matrice[Posx+1,Posy+1]=2;
Else
For (Contx=Posx-Dax;Contx<=Posx+Ax;Contx++)
For (Conty=Posy-Day;Conty<=Posy+Ay;Conty++)
Utente[Giocatore].Matrice[Contx+1,Conty+1]=0;
End
End
End
End// Procedure delle barre di rimbalzo
Process BarraN (x,y);
Begin
File=File_Contorni;
z=-40;
Graph=6;
Loop
Signal(id,s_freeze);
Frame;
End
EndProcess BarraE (x,y);
Begin
File=File_Contorni;
z=-40;
Graph=8;
Loop
Signal(id,s_freeze);
Frame;
End
EndProcess BarraO (x,y);
Begin
File=File_Contorni;
z=-40;
Graph=10;
Loop
Signal(id,s_freeze);
Frame;
End
End// Procedura controllo paletta
Process Paletta (x,y,Byte Giocatore,Byte Computer);
Private
Id_Bonus,Id_Sparo[1];
Byte I;
Id_Con,Id_Fin,Yp,Xp; // Per modalit
automatica
Byte Tempo[6]=0,0,0,0,0,0,0; // 5 Inversione dir 6 tempo lancio
Struct Anima
Byte Avanti;
Byte Massimo;
Byte Minimo;
Byte Velocita;
EndBegin File=File_Paletta[Giocatore]; Graph=1+Giocatore*100; z=-30; Timer[Giocatore]=0; // Inizializzazione Cont_Paletta[Giocatore].Lung=20; Cont_Palla[Giocatore].Velocita[0]=6; Cont_Palla[Giocatore].Ferma[0]=1; Cont_Palla[Giocatore].Quante=1; Cont_Bonus[Giocatore].Sparo_sn=False;
Cont_Bonus[Giocatore].Super_sn=False;
Cont_Bonus[Giocatore].Multi_Ball=False;
Cont_Bonus[Giocatore].Attaccata=False;
Cont_Bonus[Giocatore].Allungamento=0;
If (Cont_Bonus[Giocatore].Contrario==True) // Controllo
Tasti[Giocatore].Destra=Tasti[Giocatore].Destra+Tasti[Giocatore].Sinistra;
Tasti[Giocatore].Sinistra=Tasti[Giocatore].Destra-Tasti[Giocatore].Sinistra;
Tasti[Giocatore].Destra=Tasti[Giocatore].Destra-Tasti[Giocatore].Sinistra;
End
Cont_Bonus[Giocatore].Contrario=False;
Utente[Giocatore].Lancio_Iniziale=0; Repeat
If (Utente[Giocatore].Tempo_Ani[1]>=3)
Utente[Giocatore].Tempo_Ani[1]=0;
Graph+=1;
End
Frame;
Until (Graph==10+Giocatore*100);Anima.Massimo=14; Anima.Minimo=11; Anima.Velocita=4; Anima.Avanti=1; //Blocco comandi fino a inizio livello
Id_Bonus=Get_id(Type Inizio_Livello);
While (Id_Bonus)
Frame;
Id_Bonus=Get_id(Type Inizio_Livello);
End Repeat
If (Collision(Type Paletta))
Flags=4;
Else
Flags=0;
End If (Utente[Giocatore].Blocco_Comandi==1)
Graph=10+Giocatore*100;
Signal (Id_Sparo[0],S_Kill);
Signal (Id_Sparo[1],S_Kill);
y=500;
Switch (Tipo_Gioco)
Case 2: If (Giocatore==0)
x=75+Pos_Sch[Giocatore];
Else
x=225+Pos_Sch[Giocatore];
End
End
Default: x=150+Pos_Sch[Giocatore]; End
End
Anima.Massimo=14;
Anima.Minimo=11;
Anima.Velocita=4;
Anima.Avanti=1;Cont_Paletta[Giocatore].Lung=20; Cont_Palla[Giocatore].Velocita[0]=6;
Cont_Palla[Giocatore].Ferma[0]=1;
Cont_Palla[Giocatore].Quante=1; Cont_Bonus[Giocatore].Sparo_sn=False;
Cont_Bonus[Giocatore].Super_sn=False;
Cont_Bonus[Giocatore].Multi_Ball=False;
Cont_Bonus[Giocatore].Attaccata=False;
Cont_Bonus[Giocatore].Allungamento=0;
If (Cont_Bonus[Giocatore].Contrario==True)
Tasti[Giocatore].Destra=Tasti[Giocatore].Destra+Tasti[Giocatore].Sinistra;
Tasti[Giocatore].Sinistra=Tasti[Giocatore].Destra-Tasti[Giocatore].Sinistra;
Tasti[Giocatore].Destra=Tasti[Giocatore].Destra-Tasti[Giocatore].Sinistra;
End
Cont_Bonus[Giocatore].Contrario=False;
Utente[Giocatore].Lancio_Iniziale=0; While (Utente[Giocatore].Blocco_Comandi==1)
Frame;
If (y>460) y-=2; End
End
End; Switch (Computer)
Case 0:If (Bottone(Giocatore) And Cont_Palla[Giocatore].Ferma[0]==1)
If (Cont_Palla[Giocatore].Quante==1 And Cont_Bonus[Giocatore].Attaccata==False And Utente[Giocatore].Lancio_Iniziale==0)
Decidi_Angolo(Giocatore,Computer);
Utente[Giocatore].Inizio_Sn=0;
Utente[Giocatore].Lancio_Iniziale=1;
Else If (Utente[Giocatore].Lancio_Iniziale==2)
For (I=0;I<=2;I++)
Cont_Palla[Giocatore].Ferma[I]=0;
End
Frame;
End
End
End If (Sinistra(Giocatore))
If (x-Cont_Paletta[Giocatore].Lung<=20+Pos_Sch[Giocatore])
x=Cont_Paletta[Giocatore].Lung+10+Pos_Sch[Giocatore];
Else
x-=10;
End
End If (Destra(Giocatore))
If (x+Cont_Paletta[Giocatore].Lung>=280+Pos_Sch[Giocatore])
x=290-Cont_Paletta[Giocatore].Lung+Pos_Sch[Giocatore];
Else
x+=10;
End
End
End
Case 1:If (Cont_Palla[Giocatore].Ferma[0]==1)
If (Cont_Palla[Giocatore].Quante==1 And Cont_Bonus[Giocatore].Attaccata==False And Utente[Giocatore].Lancio_Iniziale==0)
Decidi_Angolo(Giocatore,Computer);
Utente[Giocatore].Inizio_Sn=0;
Utente[Giocatore].Lancio_Iniziale=1;
Else If (Utente[Giocatore].Lancio_Iniziale==2)
For (I=0;I<=2;I++)
Cont_Palla[Giocatore].Ferma[I]=0;
End
Frame;
End
End
End Id_Con=Get_Id(Type Palla);
Yp=0;
Repeat
Switch (Tipo_Gioco)
Case 1..2:If (Yp<Id_Con.y)
Id_Fin=Id_Con;
Yp=Id_Fin.y;
End
End
Case 3..5:If (Giocatore==0 And Id_Con.x<320)
If (Yp<Id_Con.y)
Id_Fin=Id_Con;
Yp=Id_Fin.y;
End
End
If (Giocatore==1 And Id_Con.x>320)
If (Yp<Id_Con.y)
Id_Fin=Id_Con;
Yp=Id_Fin.y;
End
End
End
End
Id_Con=Get_Id(Type Palla);
Until (Not Id_Con);
If (x>Id_Fin.x)
If (x-Cont_Paletta[Giocatore].Lung<=20+Pos_Sch[Giocatore])
x=Cont_Paletta[Giocatore].Lung+10+Pos_Sch[Giocatore];
Else
x-=10;
End
End If (x<Id_Fin.x)
If (x+Cont_Paletta[Giocatore].Lung>=280+Pos_Sch[Giocatore])
x=290-Cont_Paletta[Giocatore].Lung+Pos_Sch[Giocatore];
Else
x+=10;
End
End
End
Case 2:Switch (Tutorial_SN)
Case 6: If (x+Cont_Paletta[Giocatore].Lung>=290+Pos_Sch[Giocatore])
x=290-Cont_Paletta[Giocatore].Lung+Pos_Sch[Giocatore];
Else If (Timer[9]>200)
x+=2;
End
End
End
Case 8: If (x-Cont_Paletta[Giocatore].Lung<=10+Pos_Sch[Giocatore])
x=Cont_Paletta[Giocatore].Lung+10+Pos_Sch[Giocatore];
Else If (Timer[9]>200)
x-=2;
End
End
End
Case 10:If (x<150)
x+=2;
End
End
Case 14:If (Timer[9]>200 And Utente[Giocatore].Lancio_Iniziale==0)
Utente[Giocatore].Lancio_Iniziale=1;
Decidi_Angolo(Giocatore,Computer);
End
End
Case 32:If (Timer[9]>100 And Utente[Giocatore].Lancio_Iniziale==0)
Computer=1;
Tipo_Gioco=1;
Utente[Giocatore].Numero_Tunnel=2;
End
End
End End
End If (Timer[Giocatore]>=10)
For (I=0;I<=6;I++)
Tempo[I]+=1;
End
Timer[Giocatore]=0;
End If (Tempo[6]==100 And
Cont_Palla[Giocatore].Ferma[0]==1 And
Cont_Bonus[Giocatore].Attaccata==False And
Tutorial_SN==0) // Lancio Palla per troppa tenuta
For (I=0;I<=2;I++)
Cont_Palla[Giocatore].Ferma[I]=0;
End
Cont_Palla[Giocatore].Angolo[0]=Rand(20000,80000)*Rand(1,2);
Utente[Giocatore].Inizio_Sn=0;
Utente[Giocatore].Lancio_Iniziale=2;
Tempo[6]=0;
Else If (Utente[Giocatore].Lancio_Iniziale==2)
Tempo[6]=0;
End
End If (Utente[Giocatore].Tempo_Ani[1]>=Anima.Velocita)
If (Graph==Anima.Massimo+Giocatore*100)
Graph=Anima.Minimo+Giocatore*100;
Anima.Velocita=4; If (Anima.Avanti==0)
Anima.Avanti=Anima.Minimo;
Anima.Minimo=Anima.Massimo;
Anima.Massimo=Anima.Avanti;
End
Anima.Avanti=1;
Else
If (Anima.Avanti==1)
Graph+=1;
Else
Graph-=1;
End
End
Utente[Giocatore].Tempo_Ani[1]=0;
End Id_Bonus=0;
Id_Bonus=collision(Type Caduta_Bonus);
While (Id_Bonus)
Signal(Id_Bonus,S_Kill);
Switch (Id_Bonus.Graph)
//Allungameto
Case 10..19 :If (Cont_Bonus[Giocatore].Multi_Ball==False)
Switch (Cont_Bonus[Giocatore].Allungamento)
Case 0: Anima.Massimo=24;
Anima.Minimo=21;
Anima.Avanti=1;
Cont_Paletta[Giocatore].Lung=30 ;
Cont_Bonus[Giocatore].Allungamento=1;
Tempo[0]=0;
End
Case 1: Anima.Massimo=34;
Anima.Minimo=31;
Anima.Avanti=1;
Cont_Paletta[Giocatore].Lung=40;
Cont_Bonus[Giocatore].Allungamento=2;
Tempo[0]=0;
End
Case 2: Utente[Giocatore].Punteggio+=400; End
End If (x-Cont_Paletta[Giocatore].Lung<=20+Pos_Sch[Giocatore])
x=Cont_Paletta[Giocatore].Lung+10+Pos_Sch[Giocatore];
End
If (x+Cont_Paletta[Giocatore].Lung>=280+Pos_Sch[Giocatore])
x=290-Cont_Paletta[Giocatore].Lung+Pos_Sch[Giocatore];
End
Else
Utente[Giocatore].Punteggio+=400;
End
End
//Vita
Case 20..29 :If (Tipo_Gioco==5)
Utente[Giocatore].Vite+=10;
Else
Utente[Giocatore].Vite+=1;
End;
End
//Sparo
Case 30..39 :If (Cont_Bonus[Giocatore].Sparo_sn==False)
Cont_Bonus[Giocatore].Sparo_sn=True;
Tempo[1]=0;
Tempo[2]=0;
Id_Sparo[0]=Sparo_Gra (0,Giocatore);
Id_Sparo[1]=Sparo_Gra (1,Giocatore);
Else
Utente[Giocatore].Punteggio+=400;
End
End
//Super
Case 40..49 :If (Cont_Bonus[Giocatore].Super_sn==False)
Cont_Bonus[Giocatore].Super_sn=True;
Tempo[3]=0;
Else
Utente[Giocatore].Punteggio+=400;
End
End
//Attaccata
Case 50..59 :If (Cont_Bonus[Giocatore].Attaccata==False)
Cont_Bonus[Giocatore].Attaccata=True;
Tempo[4]=0;
Else
Utente[Giocatore].Punteggio+=400;
End
End
// Contrario
Case 60..69 :If (Cont_Bonus[Giocatore].Contrario==False)
Cont_Bonus[Giocatore].Contrario=True;
Tasti[Giocatore].Destra=Tasti[Giocatore].Destra+Tasti[Giocatore].Sinistra;
Tasti[Giocatore].Sinistra=Tasti[Giocatore].Destra-Tasti[Giocatore].Sinistra;
Tasti[Giocatore].Destra=Tasti[Giocatore].Destra-Tasti[Giocatore].Sinistra;
Tempo[5]=0;
Else
Utente[Giocatore].Punteggio+=400;
End
End
End
Id_Bonus=collision(Type Caduta_Bonus);
End //Allungamento
If (Tempo[0]>=50 And Cont_Bonus[Giocatore].Allungamento>0)
Switch (Cont_Bonus[Giocatore].Allungamento)
Case 1: Anima.Avanti=0;
Anima.Massimo=11;
Anima.Minimo=14;
Cont_Paletta[Giocatore].Lung=20;
Cont_Bonus[Giocatore].Allungamento=0;
Tempo[0]=0;
End
Case 2: Anima.Avanti=0;
Anima.Massimo=21;
Anima.Minimo=24;
Cont_Paletta[Giocatore].Lung=30;
Cont_Bonus[Giocatore].Allungamento=1;
Tempo[0]=0;
End
End
End //Sparo
Switch (Computer)
Case 0: If (Bottone(Giocatore) And Tempo[2]>=3 And Cont_Bonus[Giocatore].Sparo_sn==True) Sparo(x-12,y-7,Giocatore); Sparo(x+12,y-7,Giocatore); Tempo[2]=0; End End
Case 1: If (Tempo[2]>=3 And Cont_Bonus[Giocatore].Sparo_sn==True) Sparo(x-12,y-7,Giocatore); Sparo(x+12,y-7,Giocatore); Tempo[2]=0; End End
End
If (Tempo[1]>=100 And Cont_Bonus[Giocatore].Sparo_sn==True)
Cont_Bonus[Giocatore].Sparo_sn=False;
Signal(Id_Sparo[0],S_Kill);
Signal(Id_Sparo[1],S_Kill);
End //Super
If (Tempo[3]>=80 And Cont_Bonus[Giocatore].Super_sn==True) Cont_Bonus[Giocatore].Super_sn=False; End //Attaccata
If (Tempo[4]>=100 And Cont_Bonus[Giocatore].Attaccata==True) Cont_Bonus[Giocatore].Attaccata=False; End
If (Cont_Bonus[Giocatore].Attaccata==True)
For (I=0;I<=2;I++)
Cont_Palla[Giocatore].Ferma[I]=1;
End
End //Multi_Ball
If (Cont_Bonus[Giocatore].Multi_Ball==True And Graph<35+Giocatore*100)
Anima.Massimo=44;
Anima.Minimo=41;
Anima.Velocita=1;
Anima.Avanti=1;
Cont_Paletta[Giocatore].Lung=50;
Cont_Bonus[Giocatore].Allungamento=4;
If (x-Cont_Paletta[Giocatore].Lung<=20+Pos_Sch[Giocatore])
x=Cont_Paletta[Giocatore].Lung+10+Pos_Sch[Giocatore];
Else
x-=10;
End
If (x+Cont_Paletta[Giocatore].Lung>=280+Pos_Sch[Giocatore])
x=290-Cont_Paletta[Giocatore].Lung+Pos_Sch[Giocatore];
Else
x+=10;
End
End If (Cont_Bonus[Giocatore].Multi_Ball==False And Graph>=41+Giocatore*100)
Anima.Massimo=11;
Anima.Minimo=14;
Anima.Velocita=1;
Anima.Avanti=0;
Cont_Paletta[Giocatore].Lung=20;
Cont_Bonus[Giocatore].Allungamento=0;
End // Contrario
If (Tempo[5]>=80 And Cont_Bonus[Giocatore].Contrario==True)
Cont_Bonus[Giocatore].Contrario=False;
Tasti[Giocatore].Destra=Tasti[Giocatore].Destra+Tasti[Giocatore].Sinistra;
Tasti[Giocatore].Sinistra=Tasti[Giocatore].Destra-Tasti[Giocatore].Sinistra;
Tasti[Giocatore].Destra=Tasti[Giocatore].Destra-Tasti[Giocatore].Sinistra;
EndFrame; Until (Cont_Palla[Giocatore].Quante==0) Switch (Tipo_Gioco)
Case 1: Can_Bonus(0); End;
Case 3..5: Can_Bonus(Giocatore+1); End;
End;Signal(Id_Sparo[0],S_Kill); Signal(Id_Sparo[1],S_Kill); Signal (Type Sparo,S_kill); Repeat
If (Utente[Giocatore].Tempo_Ani[1]>=2)
Utente[Giocatore].Tempo_Ani[1]=0;
Graph-=1;
End
Frame;
Until (Graph==1+Giocatore*100) Graph=45+Giocatore*100;
Repeat
If (Utente[Giocatore].Tempo_Ani[1]>=4)
Utente[Giocatore].Tempo_Ani[1]=0;
Graph+=1;
End
Frame;
Until (Graph==51+Giocatore*100)
Graph=800; If (Tipo_Gioco==5) // Per gioco a due con vita
Utente[Giocatore].Vite-=10;
Else
Utente[Giocatore].Vite-=1;
End;Utente[Giocatore].Lancio_Iniziale=0; If (Utente[Giocatore].Vite<=0)
Switch (Tipo_Gioco)
Case 1: Sch_Continua(Giocatore);
While (Get_Id(Type Sch_Continua))
Frame;
End
End
Case 2: Sch_Continua_Doppio (Giocatore);
While (Get_Id(Type Sch_Continua_Doppio))
Frame;
End
End
Default: Palla(x,y-10,0,Giocatore);
End
End
Else
Palla(x,y-10,0,Giocatore);
EndId_Paletta[Giocatore]=Paletta(x,y,Giocatore,Computer); End // Procedura decidi angolo
Process Decidi_Angolo (Byte Giocatore,Byte Computer)
Private
Angolo;
Righa;
Byte Colore;
Uscita=False;
Begin
z=-140;
Utente[Giocatore].Tempo_Ani[5]=0;
File=File_Paletta[Giocatore];
Switch (Giocatore)
Case 0: Switch (Cont_Paletta[Giocatore].Tipo)
Case 0: Colore=22 ; End
Case 1: Colore=40 ; End
Case 2: Colore=150; End
End
End
Case 1: Switch (Cont_Paletta[Giocatore].Tipo)
Case 0: Colore=245; End
Case 1: Colore=72 ; End
Case 2: Colore=198; End
End
End
End
Graph=61+(100*Giocatore);
y=Id_Paletta[Giocatore].y;
x=Id_Paletta[Giocatore].x;
Angolo=0;
Righa=Draw (1,Colore,10,0,Id.x,Id.y,Cos(Angolo)*5,-Sin(Angolo)*5);
Repeat
If (Graph==67+(100*Giocatore))
Graph=61+(100*Giocatore);
Else
Graph++;
End
Angolo+=1000;
Move_Draw(Righa,Colore,15,Id.x,Id.y,Cos(Angolo)*15/10,-Sin(Angolo)*15/10);
If (Angolo==170000) Angolo=0; End
x=Id_Paletta[Giocatore].x;
Frame;
If (Utente[Giocatore].Tempo_Ani[5]>20)
Switch (Computer)
Case 0: Uscita=(Bottone(Giocatore) Or Cont_Palla[Giocatore].Ferma[0]==0); End
Case 1: Uscita=(Rand(0,50)==10); End
Case 2: If (Tutorial_SN==18 And Timer[9]>200) Uscita=True; End End
End
End
Until (Uscita);
Delete_Draw(Righa);
If (Angolo<20000)
Angolo=20000;
End;
If (Angolo>80000 And Angolo<=90000)
Angolo=80000;
End;
If (Angolo<100000 And Angolo>90000)
Angolo=100000;
End;Cont_Palla[Giocatore].Angolo[0]=Angolo; Cont_Palla[Giocatore].Ferma[0]=0; Utente[Giocatore].Lancio_Iniziale=2; End // Procedura dei Bonus
Process Caduta_Bonus (x,y,Num)
Begin
File=File_Bonus;
Graph=Num;
z=-40;
Repeat
y+=4;
Graph++;
If (Graph>Num+8) Graph=Num; End
Frame(400);
Until (y>=500);
End// Procedura Sparo Grafica Process Sparo_Gra (Byte Dove,Byte Giocatore) Begin File=File_Paletta[Giocatore]; z=-10; Graph=51+(100*Giocatore); y=Id_Paletta[Giocatore].y; Repeat
If (Utente[Giocatore].Tempo_Ani[2+Dove]>=3)
Graph+=1;
Utente[Giocatore].Tempo_Ani[2+Dove]=0;
End
If (Dove==0)
x=Id_Paletta[Giocatore].x-12;
Else
x=Id_Paletta[Giocatore].x+12;
End
Frame;
Until (Graph==55+(100*Giocatore)); Loop
If (Utente[Giocatore].Tempo_Ani[2+Dove]>=4)
If (Graph==60+(100*Giocatore))
Graph=56+(100*Giocatore);
Else
Graph+=1;
End
Utente[Giocatore].Tempo_Ani[2+Dove]=0;
End If (Dove==0)
x=Id_Paletta[Giocatore].x-12;
Else
x=Id_Paletta[Giocatore].x+12;
End
Frame;
End
End// Procedura Sparo
Process Sparo (x,y,Giocatore)
Private
Id_Blocco;
Begin
File=File_Paletta[Giocatore];
z=-50;
If (Giocatore==0)
Graph=68;
Else
Graph=168;
End
Id_Blocco=0;
Repeat
Id_Blocco=Collision(Type Blocco);
If (Id_Blocco)
Signal (Id_Blocco,S_Wakeup);
End
y-=4;
Frame;
Until (y<=10 or Id_Blocco<>0);
End// Procedure tipi di blocco
Process Blocco (x,y,Byte Colpi,Byte Colore,Byte Tipo,Byte Giocatore);
Private
Byte Somma,Bonus;
Id_Frase;
Uscita_Ciclo;
Int Punti_Ass;
Begin
File=File_Blocchi;
Switch (Tipo)
Case 1: Somma=1 ; End
Case 2: Somma=34 ; End
Case 3: Somma=67 ; End
Case 4: Somma=100; End
Case 5: Somma=133; End
End Switch (Colore)
Case 1: Somma+=0 ; End
Case 2: Somma+=8 ; End
Case 3: Somma+=16; End
Case 4: Somma+=24; End
Case 5: Somma+=32; End
End Switch (Colpi)
Case 1: Somma+=2 ; End
Case 2: Somma+=1 ; End
Case 3: Somma+=0 ; End
Case 4: Somma-=1 ; End
Endz=Tipo; Graph=Somma; Ins_Can_Matrice(0,Giocatore,Tipo,x,y,Id); Repeat
If (Colpi>0 And Tipo<9)
Graph++ ;
End;
Signal (Id,S_Freeze);
Frame;
If (Colpi>0)
Uscita_Ciclo= Graph==(Somma+Colpi);
Switch (Tipo_Gioco)
Case 2: Uscita_Ciclo=Uscita_Ciclo Or (Cont_Bonus[0].Super_sn==1 Or Cont_Bonus[1].Super_sn==1); End
Default: Uscita_Ciclo=Uscita_Ciclo Or (Cont_Bonus[Giocatore].Super_sn==1); End
End
Else
Uscita_Ciclo= False;
End;Until (Uscita_Ciclo); Utente[Giocatore].Numero_Blocchi--; z=-5; If (Tipo_Gioco==5)
If (Giocatore==0) // Per gioco a due con vita
Utente[1].Vite-=2;
Else
Utente[0].Vite-=2;
End
End Switch (Tipo_Gioco)
Case 1: Punti_Ass=Utente[Giocatore].Punti_Colpi*25;
Id_Frase=Write_Int (Id_Font[0],x,y,0,Offset Punti_Ass);
Utente[Giocatore].Punteggio+=Punti_Ass;
End
Case 2: Punti_Ass=(Utente[0].Punti_Colpi+Utente[1].Punti_Colpi)*25;
Id_Frase=Write_Int (Id_Font[0],x,y,0,Offset Punti_Ass);
If (Utente[0].Punteggio>Utente[1].Punteggio)
Utente[0].Punteggio+=Punti_Ass;
Else If (Utente[0].Punteggio<Utente[1].Punteggio)
Utente[1].Punteggio+=Punti_Ass;
Else
Utente[0].Punteggio+=Punti_Ass;
Utente[1].Punteggio+=Punti_Ass;
End
End
End
End
Repeat
Graph++;
Frame(250);
Until (Graph==Somma+Colpi+4);Ins_Can_Matrice(1,Giocatore,Tipo,x,y,Id); //Caduta_Bonus(x,y,40); Bonus=Rand(0,30);
Switch (Bonus)
Case 7 : Caduta_Bonus (x,y,10); End // Allungamnto
Case 8 : If (Tipo_Gioco<>3 And Tipo_Gioco<>4) Caduta_Bonus (x,y,20); End End // Vita
Case 9 : Caduta_Bonus (x,y,30); End // Sparo
Case 10: Caduta_Bonus (x,y,40); End // Super Palla
Case 11: Caduta_Bonus (x,y,50); End // Attaccata
Case 12: Caduta_Bonus (x,y,60); End // Contrario
EndIf (Tipo_Gioco<=2) Delete_Text (Id_Frase); End End // Procedure tipi di blocco speciali Process Blocco_Speciale (x,y,Byte Colpi,Byte Colore,Byte Tipo,Byte Giocatore); Private Byte Bonus; Id_Frase; Int Punti_Ass; Byte Colpi_Subiti; Begin File=File_Blocchi; Graph=200; z=Tipo; Colpi_Subiti=0; Ins_Can_Matrice(0,Giocatore,Tipo,x,y,Id); Repeat
Signal (Id,S_Freeze);
Frame;
Colpi_Subiti++;Bonus=Rand(0,30); Switch (Bonus)
Case 7 : Caduta_Bonus (x,y,10); End // Allungamnto
Case 8 : If (Tipo_Gioco<>3 And Tipo_Gioco<>4) Caduta_Bonus (x,y,20); End End // Vita
Case 9 : Caduta_Bonus (x,y,30); End // Sparo
Case 10: Caduta_Bonus (x,y,40); End // Super Palla
Case 11: Caduta_Bonus (x,y,50); End // Attaccata
Case 12: Caduta_Bonus (x,y,60); End // Contrario
EndUntil (Colpi_Subiti==Colpi); Utente[Giocatore].Numero_Blocchi--; z=-5; If (Tipo_Gioco==5)
If (Giocatore==0) // Per gioco a due con vita
Utente[1].Vite-=40;
Else
Utente[0].Vite-=40;
End
End Switch (Tipo_Gioco)
Case 1: Punti_Ass=200*Colpi;
Id_Frase=Write_Int (0,x,y,0,Offset Punti_Ass);
Utente[Giocatore].Punteggio+=Punti_Ass;
End
Case 2: Punti_Ass=200*Colpi;
Id_Frase=Write_Int (0,x,y,0,Offset Punti_Ass);
If (Utente[0].Punteggio>Utente[1].Punteggio)
Utente[0].Punteggio+=Punti_Ass;
Else If (Utente[0].Punteggio<Utente[1].Punteggio)
Utente[1].Punteggio+=Punti_Ass;
Else
Utente[0].Punteggio+=Punti_Ass;
Utente[1].Punteggio+=Punti_Ass;
End
End
End
End
/*
Repeat
Graph++;
Frame(250);
Until (Graph==Somma+Colpi+4);
*/
Ins_Can_Matrice(1,Giocatore,Tipo,x,y,Id);
/*
Bonus=Rand(0,30);
Switch (Bonus)
Case 7 : Caduta_Bonus (x,y,10); End // Allungamnto
Case 8 : If (Tipo_Gioco<>3 And Tipo_Gioco<>4) Caduta_Bonus (x,y,20); End End // Vita
Case 9 : Caduta_Bonus (x,y,30); End // Sparo
Case 10: Caduta_Bonus (x,y,40); End // Super Palla
Case 11: Caduta_Bonus (x,y,50); End // Attaccata
Case 12: Caduta_Bonus (x,y,60); End // Contrario
End
*/
If (Tipo_Gioco<=2) Delete_Text (Id_Frase); End
End// Procedura tunnel
Process Tunnel (x,y,Byte Giocatore);
Begin
File=File_Oggetti;
z=-20;
Graph=10;
Switch(Giocatore)
Case 0: z=50; End
Case 1: z=51; End
End
Loop
If (Collision(Type Palla))
Repeat
Graph++;
Frame;
Until (Graph==16);
Repeat
Graph--;
Frame;
Until (Graph==10);
End
Frame;
End
End// Procedura multi_ball
Process Multi_Ball (x,y,Giocatore)
Begin
File=File_Oggetti;
z=-20;
z=100;
Repeat
Switch (z)
Case 100: Graph=30; End
Case 101: Graph=31; End
Case 102: Graph=32; End
Case 103: Graph=33; End
Case 104: Graph=34; End
Default: Graph++; End
End
While (Cont_Bonus[Giocatore].Multi_Ball==True And z<=104)
If (Graph<42) Graph++; End
Frame;
EndFrame(300); Until (Graph==40); End // Punti
Process Punti (x,y);
Private
Byte Tempo;
Begin
File=File_Oggetti;
z=-20;
Graph=50;
Loop
If (Collision(Type Palla))
Tempo=0;
Repeat
If (Graph==50)
Graph=51;
Else
Graph=50;
End
Frame(500);
Tempo++;
Until (Tempo==10);
End
Frame;
End
End// Tabella gioco singolo o doppio su stesso schermo Process Tabella (x,y,Byte Giocatore); Private Id_Frasi[4]; Byte Minuti; Byte Secondi; Begin Priority=100; File=File_Contorni; Graph=20; Switch (Giocatore)
Case 0:Id_Frasi[0]=Write_Int (Id_Font[0],150,170,5,Offset Utente[Giocatore].Livello);
Id_Frasi[1]=Write_Int (Id_Font[0],110,230,5,Offset Utente[Giocatore].Punteggio);
Id_Frasi[2]=Write_Int (Id_Font[0],140,260,5,Offset Utente[Giocatore].Vite);
Id_Frasi[3]=Write_Int (Id_Font[0],70 ,320,5,Offset Minuti);
Id_Frasi[4]=Write_Int (Id_Font[0],120,320,5,Offset Secondi);
End
Case 1:Id_Frasi[0]=Write_Int (Id_Font[0],630,170,5,Offset Utente[Giocatore].Livello);
Id_Frasi[1]=Write_Int (Id_Font[0],590,230,5,Offset Utente[Giocatore].Punteggio);
Id_Frasi[2]=Write_Int (Id_Font[0],620,260,5,Offset Utente[Giocatore].Vite);
Id_Frasi[3]=Write_Int (Id_Font[0],550,320,5,Offset Minuti);
Id_Frasi[4]=Write_Int (Id_Font[0],600,320,5,Offset Secondi);
End
End Switch (Tipo_Gioco)
Case 1:Loop
If (Utente[Giocatore].Inizio_Sn==0)
Secondi=Timer[Giocatore+2] / 100;
If (Secondi==60) Secondi=0; Minuti+=1; Timer[Giocatore+2]=0; End
Else
Timer[Giocatore+2]=0;
Minuti=0;
Secondi=0;
End If (Utente[Giocatore].Numero_Blocchi==0 And Utente[Giocatore].Inizio_Sn==0
And Cont_Palla[Giocatore].Quante>0 And Tutorial_SN==0)
Fine_Livello(Giocatore,Minuti,Secondi);
Timer[Giocatore+2]=0;
Secondi=0;
Minuti=0;
Frame;
End If (Key(_Esc) And Tutorial_SN==0 And Not(Get_Id(Type Fine_Livello) Or Get_Id(Type Sch_Continua) Or Get_Id(Type Sch_Uscita)))
Sch_Uscita();
Frame;
End
Frame;
End
End
Case 2:Loop
If (Utente[0].Inizio_Sn==0 Or Utente[1].Inizio_Sn==0)
Secondi=Timer[Giocatore+2] / 100;
If (Secondi==60) Secondi=0; Minuti+=1; Timer[Giocatore+2]=0; End
Else
Timer[Giocatore+2]=0;
Minuti=0;
Secondi=0;
End If (Giocatore==0 And Utente[0].Numero_Blocchi==0 And Utente[0].Inizio_Sn==0 And Tutorial_SN==0)
Fine_Livello(Giocatore,Minuti,Secondi);
Frame;
End If (Key(_Esc) And Tutorial_SN==0 And Not(Get_Id(Type Fine_Livello) Or Get_Id(Type Sch_Uscita)))
Sch_Uscita();
Frame;
End
Frame;
End
End
End
End// Tabella per gioco doppio a tempo Process Tabella_Tempo (x,y) Private Id_Frasi[1]; Byte Minuti; Int Secondi; Begin Priority=100; File=File_Contorni; z=-100; Graph=26; Minuti=5; Secondi=60; Define_Region (1,310,20,30,Minuti*24); Define_Region (2,330,20,30,Secondi*2); Colonna_Vita_Tempo (320,80,1,28); Colonna_Vita_Tempo (340,80,2,27); Id_Frasi[0]=Write_int (Id_Font[0],320,400,8,Offset Utente[0].Livello); Id_Frasi[1]=Write_int (Id_Font[0],320,440,8,Offset Utente[1].Livello); Timer[2]=0;
Loop
Secondi=59-Timer[2] / 100; If (Secondi<0)
Secondi=59;
Minuti--;
Timer[2]=0;
End Define_Region (1,310,20,30,Minuti*24);
Define_Region (2,330,20,30,Secondi*2); If (Key(_Esc) And Tutorial_SN==0 And Not Get_Id(Type Sch_Uscita)) Sch_Uscita(); Frame; End;
If (Minuti==0 And Secondi==0) Fine_A_Tempo(); Frame; End;
Frame;
End
End// Tabella per gioco doppio a livello Process Tabella_Livello (x,y) Private Id_Frasi[0]; Byte Liv_Da_Ragg; Begin Priority=100; File=File_Contorni; z=-100; Graph=30; Liv_Da_Ragg=16; Id_Frasi[0]=Write_int (Id_Font[0],320,60,4,Offset Liv_Da_Ragg); Define_Region (1,290,140,30,Utente[0].Livello*10); Define_Region (2,330,140,30,Utente[1].Livello*10); Colonna_Vita_Tempo (300,220,1,31); Colonna_Vita_Tempo (340,220,2,32); Loop
Define_Region (1,290,140,30,Utente[0].Livello*10);
Define_Region (2,330,140,30,Utente[1].Livello*10); If (Key(_Esc) And Not Get_Id(Type Sch_Uscita)) Sch_Uscita(); Frame; End;
If (Utente[0].Livello==Liv_Da_Ragg Or Utente[1].Livello==Liv_Da_Ragg) Fine_A_Livello(); Frame; End;Frame; End End // Tabella per gioco doppio a vita Process Tabella_Vita (x,y) Begin Priority=100; File=File_Contorni; z=-100; Graph=36; Utente[0].Vite=300; Utente[1].Vite=300; Define_Region (1,290,70,30,Utente[0].Vite); Define_Region (2,330,110,30,Utente[1].Vite); Colonna_Vita_Tempo (300,220,1,37); Colonna_Vita_Tempo (340,260,2,37); Loop
If (Utente[0].Vite>300) Utente[0].Vite=300; End;
If (Utente[1].Vite>300) Utente[1].Vite=300; End; Define_Region (1,290,70,30,Utente[0].Vite);
Define_Region (2,330,110,30,Utente[1].Vite); If (Key(_Esc) And Tutorial_SN==0 And Not Get_Id(Type Sch_Uscita)) Sch_Uscita(); Frame; End;
If (Utente[0].Vite<=0 Or Utente[1].Vite<=0) Fine_A_Vita(); Frame; End;
Frame;
End
End// Colonna della vita
Process Colonna_Vita_Tempo (x,y,Region,Graph);
Begin
File=File_Contorni;
z=-110;
Loop
Frame;
End
End// Inizio
Process Inizio_Livello (Byte Giocatore)
Begin
File=File_Contorni;
Graph=12;
z=-100;
y=240;
x=Pos_Sch[Giocatore]+150;
If (Tipo_Gioco==2)
Utente[0].Blocco_Comandi=1;
Utente[1].Blocco_Comandi=1;
Else
Utente[Giocatore].Blocco_Comandi=1;
End
Size=0;
Repeat
Size+=2;
Frame;
Until (Size==110);
Size=0;
Graph=14;
Repeat
Size+=2;
Frame;
Until (Size==110);
If (Tipo_Gioco==2)
Utente[0].Blocco_Comandi=0;
Utente[1].Blocco_Comandi=0;
Else
Utente[Giocatore].Blocco_Comandi=0;
End
End// Fine per tipo 1 e 2 Process Fine_Livello (Byte Giocatore,Int Minuti,Int Secondi) Private Conteggi; Cont,Pot; Id_Frasi[2]; Begin Signal (Type Palla,S_Kill); Signal (Type Caduta_Bonus,S_Kill); Signal (Type Gioco,S_Freeze); Signal (Type Tabella,S_Freeze); File=File_Contorni;
If (Tipo_Gioco==2)
Utente[0].Blocco_Comandi=1;
Utente[1].Blocco_Comandi=1;
Else
Utente[Giocatore].Blocco_Comandi=1;
End
Graph=200;
z=-100;
x=320;
y=240;
Conteggi=100*(Utente[Giocatore].Livello);
Id_Frasi[0]=Write_int (Id_Font[0],300,310,4,Offset Minuti);
Id_Frasi[1]=Write_int (Id_Font[0],340,310,4,Offset Secondi);
Id_Frasi[2]=Write_int (Id_Font[0],320,230,4,Offset Conteggi);
For (Cont=Minuti;Cont>0;Cont--)
Conteggi-=10;
Minuti--;
Frame (1000);
End For (Cont=Secondi;Cont>0;Cont--)
Conteggi-=2;
Secondi--;
Frame (1000);
End Pot=10000000;
Repeat
For (Cont=0;Cont<Conteggi/Pot;Cont++)
If (Tipo_Gioco==2)
Utente[0].Punteggio+=Pot;
Utente[1].Punteggio+=Pot;
Else
Utente[Giocatore].Punteggio+=Pot;
End
Frame (1000);
End
Conteggi-=Pot*Cont;
Pot=Pot/10;
Until (Pot==0);Signal (Type Gioco,S_Wakeup); Signal (Type Tabella,S_Wakeup); Delete_Text(Id_Frasi[0]); Delete_Text(Id_Frasi[1]); Delete_Text(Id_Frasi[2]); Esci_Gioco=1; End // Fine gioco a due giocatori a tempo
Process Fine_A_Tempo ();
Private
Id_Frasi[1];
Int Scarto_Livello;
Begin
File=File_Contorni;
x=320;
y=240;
z=-100;
Delete_Draw(All_Drawing);
Signal (Type Paletta,S_Kill_Tree);
Signal (Type Palla,S_Kill_Tree);
Signal (Type Inizio_Livello,S_Kill_Tree);
Frame;
Blocca_Sblocca(0);
Scarto_Livello=ABS(Utente[0].Livello-Utente[1].Livello);
If (Utente[0].Livello>Utente[1].Livello)
Graph=50;
Id_Frasi[0]=Write_Int(Id_Font[0],250,310,4,Offset Scarto_Livello);
Id_Frasi[1]=Write_Int(Id_Font[0],590,310,4,Offset Scarto_Livello);
Else If (Utente[0].Livello<Utente[1].Livello)
Graph=52;
Id_Frasi[0]=Write_Int(Id_Font[0],250,310,4,Offset Scarto_Livello);
Id_Frasi[1]=Write_Int(Id_Font[0],590,310,4,Offset Scarto_Livello);
Else
Graph=54;
End;
End;
Repeat
Frame;
Until (Ascii!=0);
Esci_Gioco=3;
Delete_Text(Id_Frasi[0]);
Delete_Text(Id_Frasi[1]);
Blocca_Sblocca(1);
End;// Fine gioco a due giocatori a livello Process Fine_A_Livello (); Private Id_Frasi[1]; Begin File=File_Contorni; x=320; y=240; z=-100; Delete_Draw(All_Drawing); Signal (Type Paletta,S_Kill_Tree); Signal (Type Palla,S_Kill_Tree); Signal (Type Inizio_Livello,S_Kill_Tree); Frame; Blocca_Sblocca(0);
If (Utente[0].Livello>Utente[1].Livello)
Graph=56;
Else
Graph=58;
End; Id_Frasi[0]=Write_Int(Id_Font[0],250,310,4,Offset Utente[0].Livello);
Id_Frasi[1]=Write_Int(Id_Font[0],590,310,4,Offset Utente[1].Livello);
Repeat
Frame;
Until (Ascii!=0);
Esci_Gioco=3;
Delete_Text(Id_Frasi[0]);
Delete_Text(Id_Frasi[1]);
Blocca_Sblocca(1);
End;// Fine gioco a due giocatori a vita Process Fine_A_Vita (); Private Id_Frasi[1]; Begin File=File_Contorni; x=320; y=240; z=-100; Delete_Draw(All_Drawing); Signal (Type Paletta,S_Kill_Tree); Signal (Type Palla,S_Kill_Tree); Signal (Type Inizio_Livello,S_Kill_Tree); Frame; Blocca_Sblocca(0);
If (Utente[0].Vite>Utente[1].Vite)
Graph=62;
Else
Graph=64;
End; Repeat
Frame;
Until (Ascii!=0);
Esci_Gioco=3;
Delete_Text(Id_Frasi[0]);
Delete_Text(Id_Frasi[1]);
Blocca_Sblocca(1);
End;// Schermata Uscita
Process Sch_Uscita();
Private
Byte Uscita;
Id_Bottoni[1];
Begin
File=File_Contorni;
Blocca_Sblocca(0);
Uscita=0;
z=-300;
x=320;
y=-200;
Mouse.Graph=1;
Graph=100;
Repeat
y+=20;
Frame;
Until (y==240);
Id_Bottoni[0]=Bottoni_Uscita(220,295,0);
Id_Bottoni[1]=Bottoni_Uscita(420,295,2);
Repeat
If (Mouse.Left)
If (Id_Bottoni[0].z==-320) Uscita=1; End
If (Id_Bottoni[1].z==-320) Uscita=2; End
End
Frame;
Until (Uscita<>0);
Signal (Type Bottoni_Uscita,S_Kill);
Repeat
y+=20;
Frame;
Until (y==600);
If (Uscita==1) Esci_Gioco=3; End;
Blocca_Sblocca(1);
Mouse.Graph=0;
End;// Bottoni si/no della schermata uscita
Process Bottoni_Uscita (x,y,Byte Tipo);
Begin
File=File_Contorni;
Loop
If (Mouse.X>=X-75 And Mouse.X<=X+75 And Mouse.Y>=Y-50 And Mouse.Y<=Y+50)
Graph=Tipo+101+1;
z=-320;
Else
Graph=Tipo+101;
z=-310;
End
Frame;
End
End// Schermata Continua per giocatore singolo Process Sch_Continua(Byte Giocatore); Private Byte Uscita,Tempo; Id_Frasi[1]: Begin File=File_Contorni; Blocca_Sblocca(0); Uscita=0; z=-100; x=320; y=240; Graph=202; Mouse.Graph=1; Tempo=9; Id_Frasi[0]=Write_Int (Id_Font[0],320,230,4,Offset Tempo); Id_Frasi[1]=Write_Int (Id_Font[0],320,310,4,Offset Utente[Giocatore].Continua); Timer[4]=0;
Repeat
If (Mouse.Left Or Bottone(Giocatore))
Uscita=1;
End;
If (Timer[4]>=100) Timer[4]=0; Tempo--; End;
Frame;
Until (Uscita<>0 Or Tempo==0 Or Utente[Giocatore].Continua==0);
If (Tempo==0 Or Utente[Giocatore].Continua==0) Uscita=2; End;
If (Uscita==2)
Esci_Gioco=2;
Else
Utente[Giocatore].Continua--;
Utente[Giocatore].Vite=3;
Utente[Giocatore].Livello--;
Utente[Giocatore].Numero_Blocchi=0;
End;Blocca_Sblocca(1); Mouse.Graph=0; Id_Paletta[Giocatore].x=Pos_Sch[Giocatore]+150; Delete_Text (Id_Frasi[0]); Delete_Text (Id_Frasi[1]); End; // Schermata Continua per giocatore doppio
Process Sch_Continua_Doppio(Byte Giocatore);
Private
Byte Uscita,Tempo;
Id_Frasi[2]:
Begin
File=File_Contorni;
Priority=50;
Uscita=0;
z=0;
Tempo=9;
If (Giocatore==0)
Id_Frasi[0]=Write (Id_Font[0],90,380,4,"Vuoi continuare?");
Id_Frasi[1]=Write_Int (Id_Font[0],90,400,4,Offset Tempo);
Id_Frasi[2]=Write_Int (Id_Font[0],90,420,4,Offset Utente[Giocatore].Continua);
Else
Id_Frasi[0]=Write (Id_Font[0],550,380,4,"Vuoi continuare?");
Id_Frasi[1]=Write_Int (Id_Font[0],550,400,4,Offset Tempo);
Id_Frasi[2]=Write_Int (Id_Font[0],550,420,4,Offset Utente[Giocatore].Continua);
End; Timer[Giocatore+4]=0;
Repeat
If (Mouse.Left Or Bottone(Giocatore))
Uscita=1;
End;
If (Timer[Giocatore+4]>=100) Timer[Giocatore+4]=0; Tempo--; End;
Frame;
Until (Uscita<>0 Or Tempo==0 Or Utente[Giocatore].Continua==0);Delete_Text (Id_Frasi[0]); Delete_Text (Id_Frasi[1]); Delete_Text (Id_Frasi[2]); If (Tempo==0 Or Utente[Giocatore].Continua==0)
If (Giocatore==0)
Id_Frasi[0]=Write (Id_Font[0],90,380,4,"GAME OVER");
Id_Frasi[1]=Write_Int (Id_Font[0],90,400,4,Offset Tempo);
Id_Frasi[2]=Write (Id_Font[0],90,420,4,"Alla fine del gioco");
Else
Id_Frasi[0]=Write (Id_Font[0],550,380,4,"GAME OVER");
Id_Frasi[1]=Write_Int (Id_Font[0],550,400,4,Offset Tempo);
Id_Frasi[2]=Write (Id_Font[0],550,420,4,"Alla fine del gioco");
End
Tempo=9;
Timer[Giocatore+4]=0;
Repeat
If (Timer[Giocatore+4]>=100) Timer[Giocatore+4]=0; Tempo--; End;
Frame;
Until (Tempo==0);
Esci_Gioco=2;
Frame;
End; If (Giocatore==0)
Id_Frasi[0]=Write (0,90 ,380,4,"WAITING");
Else
Id_Frasi[0]=Write (0,550,380,4,"WAITING");
EndControllo++; Repeat
Frame;
Until (Get_Id(Type Fine_Livello) Or Controllo==2);Frame; // Per far si che anche l'altro coclo termini If (Controllo==2)
Utente[Giocatore].Livello--;
If (Giocatore==0) Utente[0].Numero_Blocchi=0; End;
EndUtente[Giocatore].Continua--; Utente[Giocatore].Vite=3; If (Giocatore==0)
Id_Paletta[0].x=75+Pos_Sch[0];
Else
Id_Paletta[1].x=225+Pos_Sch[1];
EndDelete_Text (Id_Frasi[0]); End; // Funzione Blocca_Sblocca processi mentre si in gioco
Function Blocca_Sblocca (Tipo);
Private
Byte Frase;
Begin
If (Tipo==0)
Frase=3; // = S_Freeze
Else
Frase=1; // = S_Wakeup
End;
Signal (Type Gioco ,Frase);
Signal (Type Paletta,Frase);
Signal (Type Tabella,Frase);
Signal (Type Tabella_Tempo ,Frase);
Signal (Type Tabella_Livello,Frase);
Signal (Type Tabella_Vita,Frase);
Signal (Type Inizio_Livello,Frase);
Signal (Type Caduta_Bonus ,Frase);
Signal (Type Palla,Frase);
End;
// Controllo Gioco
Process Gioco (Byte Auto1, Byte Auto2);
Private
Byte Sezione;
Id_Carica[1];
Musica;
Begin
Clear_Screen();
Delete_Text(All_Text);
Load_Pal("Gioco.pal");Fade_on(); Esci_Gioco=0; Setup.Master=15; Setup.Sound_Fx=15; Musica=Utente[0].Livello-(Utente[0].Livello/4)*4;
If (Musica==3)
Musica=Load_wav(Nome_Suoni[12],1);
Else
Musica=Load_wav(Nome_Suoni[11],1);
End
Sound(Musica,250,250);File_Paletta[0]=Load_Fpg (Nome_Palette[Cont_Paletta[0].Tipo]); File_Paletta[1]=Load_Fpg (Nome_Palette[Cont_Paletta[1].Tipo]); If (Tipo_Gioco<=2)
Sezione=(Utente[0].Livello/4);
Else
Sezione=Rand(0,2);
EndFile_Contorni=Load_fpg (Nome_Sezioni[Sezione]); Id_Font[0]=Load_fnt (Nome_Font[Sezione]); Switch (Tipo_Gioco)
Case 1: File_Palla =Load_Fpg ("Palla.fpg");
File_Blocchi =Load_Fpg ("Blocchi.fpg");
File_Bonus =Load_Fpg ("Bonus.fpg");
File_Oggetti =Load_Fpg ("Oggetti.fpg"); Utente[0].Inizio_sn=1;
Utente[1].Numero_Blocchi=100;
Pos_Sch[0]=170;
Id_Paletta[0]=Paletta (150+Pos_Sch[0],460,0,Auto1); BarraN (150+Pos_Sch[0], 9);
BarraE (290+Pos_Sch[0],240);
BarraO (9 +Pos_Sch[0],240);
Tabella(80,240,0);
End
Case 2: File_Palla =Load_Fpg ("Palla.fpg");
File_Blocchi =Load_Fpg ("Blocchi.fpg");
File_Bonus =Load_Fpg ("Bonus.fpg");
File_Oggetti =Load_Fpg ("Oggetti.fpg"); Controllo=0;
Utente[0].Inizio_sn=1;
Utente[1].Inizio_sn=1;
Pos_Sch[0]=170;
Pos_Sch[1]=170;
Id_Paletta[0]=Paletta (75+Pos_Sch[0],460,0,Auto1);
Id_Paletta[1]=Paletta (225+Pos_Sch[1],460,1,Auto2); BarraN (150+Pos_Sch[0], 9);
BarraE (290+Pos_Sch[0],240);
BarraO (9 +Pos_Sch[0],240);
Tabella(80,240,0);
Tabella(560,240,1);
End
Case 3: File_Palla =Load_Fpg ("Palla.fpg");
File_Blocchi =Load_Fpg ("Blocchi.fpg");
File_Bonus =Load_Fpg ("Bonus.fpg");
File_Oggetti =Load_Fpg ("Oggetti.fpg"); Pos_Sch[0]=0;
Pos_Sch[1]=340;
Id_Paletta[0]=Paletta (150+Pos_Sch[0],460,0,Auto1);
Id_Paletta[1]=Paletta (150+Pos_Sch[1],460,1,Auto2); BarraN (150+Pos_Sch[0], 9);
BarraE (290+Pos_Sch[0],240);
BarraO (9 +Pos_Sch[0],240);
BarraN (150+Pos_Sch[1], 9);
BarraE (290+Pos_Sch[1],240);
BarraO (9 +Pos_Sch[1],240);
Tabella_Tempo (320,240);
End
Case 4: File_Palla =Load_Fpg ("Palla.fpg");
File_Blocchi =Load_Fpg ("Blocchi.fpg");
File_Bonus =Load_Fpg ("Bonus.fpg");
File_Oggetti =Load_Fpg ("Oggetti.fpg"); Pos_Sch[0]=0;
Pos_Sch[1]=340;
Id_Paletta[0]=Paletta (150+Pos_Sch[0],460,0,Auto1);
Id_Paletta[1]=Paletta (150+Pos_Sch[1],460,1,Auto2); BarraN (150+Pos_Sch[0], 9);
BarraE (290+Pos_Sch[0],240);
BarraO (9 +Pos_Sch[0],240);
BarraN (150+Pos_Sch[1], 9);
BarraE (290+Pos_Sch[1],240);
BarraO (9 +Pos_Sch[1],240);
Tabella_Livello (320,240);
End
Case 5: File_Palla =Load_Fpg ("Palla.fpg");
File_Blocchi =Load_Fpg ("Blocchi.fpg");
File_Bonus =Load_Fpg ("Bonus.fpg");
File_Oggetti =Load_Fpg ("Oggetti.fpg"); Pos_Sch[0]=0;
Pos_Sch[1]=340;
Id_Paletta[0]=Paletta (150+Pos_Sch[0],460,0,Auto1);
Id_Paletta[1]=Paletta (150+Pos_Sch[1],460,1,Auto2); BarraN (150+Pos_Sch[0], 9);
BarraE (290+Pos_Sch[0],240);
BarraO (9 +Pos_Sch[0],240);
BarraN (150+Pos_Sch[1], 9);
BarraE (290+Pos_Sch[1],240);
BarraO (9 +Pos_Sch[1],240);
Tabella_Vita (320,240);
End
Case 6: File_Palla =Load_Fpg ("Palla.fpg");
File_Blocchi =Load_Fpg ("Blocchi.fpg");
File_Bonus =Load_Fpg ("Bonus.fpg");
File_Oggetti =Load_Fpg ("Oggetti.fpg"); Pos_Sch[0]=0;
Pos_Sch[1]=340;
Id_Paletta[0]=Paletta (150+Pos_Sch[0],460,0,Auto1);
Id_Paletta[1]=Paletta_Multi (150+Pos_Sch[1],460); BarraN (150+Pos_Sch[0], 9);
BarraE (290+Pos_Sch[0],240);
BarraO (9 +Pos_Sch[0],240);
BarraN (150+Pos_Sch[1], 9);
BarraE (290+Pos_Sch[1],240);
BarraO (9 +Pos_Sch[1],240);
Tabella_Vita (320,240);
End
End// File_Contorni=Load_fpg (Nome_Sezioni[Sezione]); // Id_Font[0]=Load_fnt (Nome_Font[Sezione]); // Write_int (0,100,400,0,Offset fps); //tmp // Write_int (0,100,450,0,Offset memi); //tmp // Write_int (0,500,100,0,Offset Utente[0].Lancio_Iniziale); //tmp // Write_int (0,500,140,0,Offset Utente[0].Numero_Blocchi); //tmp // Write_int (0,500,200,0,Offset Cont_Palla[0].Ferma[0]); //tmp // Write_int (0,100,100,0,Offset Utente[0].Inizio_Sn); //tmp // Write_int (0,100,150,0,Offset Utente[0].Blocco_Comandi); //tmp // Write_int (0,100,420,0,Offset Cont_Bonus[0].Contrario); //tmp // Write_int (0,100,430,0,Offset Cont_Bonus[0].Multi_Ball); //tmp // Write_int (0,100,440,0,Offset Cont_Bonus[0].Sparo_sn); //tmp // Write_int (0,100,450,0,Offset Cont_Bonus[0].Super_sn); //tmp // Write_int (0,100,460,0,Offset Cont_Bonus[0].Attaccata); //tmp // Write_int (0,100,470,0,Offset Cont_Bonus[0].Allungamento); //tmp Id_Carica[0]=Carica_Sfondo(0,Sezione); Id_Carica[1]=Carica_Sfondo(1,Sezione); Timer[8]=0; Repeat
If (Utente[0].Numero_Blocchi==0)
Switch (Tipo_Gioco)
Case 1 : Can_Ogg(0); End
Case 2 : Can_Ogg(0); End
Default: Can_Ogg(1); End
End
If (Tipo_Gioco==2)
Controllo=0;
Signal (Type Palla,S_Kill);
Cont_Palla[1].Ferma=1;
Utente[1].Inizio_Sn=1;
Cont_Bonus[1].Multi_Ball=False; // Perch si crea prima la palla
Palla (Id_Paletta[1].x,400,0,1);
End If (Tipo_Gioco==5) // Per gioco a due con vita
Utente[0].Vite+=4;
End;
Cont_Palla[0].Ferma=1;
Utente[0].Inizio_Sn=1;
Cont_Bonus[0].Multi_Ball=False; // Perch si crea prima la palla
Palla (Id_Paletta[0].x,400,0,0);
Carica_Livello (0,Utente[0].Sezione,Id_Carica[0]);
Inizio_Livello (0);
End If (Utente[1].Numero_Blocchi==0)
Can_Ogg (2);
If (Tipo_Gioco==5) // Per gioco a due con vita
Utente[1].Vite+=4;
End;
Cont_Palla[1].Ferma=1;
Utente[1].Inizio_Sn=1;
Cont_Bonus[1].Multi_Ball=False; // Perch si crea prima la palla
Palla (Id_Paletta[1].x,400,0,1);
Carica_Livello (1,"A",Id_Carica[1]);
Inizio_Livello (1);
End If (Timer[8]>=2)
For (X=0;X<=5;X++)
For (Y=0;Y<=1;Y++)
Utente[Y].Tempo_Ani[X]+=1;
End
End
Timer[8]=0;
End Frame;
memi=Memory_Free(); //tmpUntil (Esci_Gioco>0) Unload_Wav(Musica); Signal (Type Carica_Sfondo,S_Kill); Signal (Type BarraN,S_Kill_Tree); Signal (Type BarraE,S_Kill_Tree); Signal (Type BarraO,S_Kill_Tree); Signal (Type Tabella,S_Kill_Tree); Signal (Type Tabella_Tempo,S_Kill_Tree); Signal (Type Tabella_Livello,S_Kill_Tree); Signal (Type Tabella_Vita,S_Kill_Tree); Signal (Type Palla,S_Kill_Tree); Signal (Type Paletta,S_Kill_Tree); Signal (Type Blocco,S_Kill_Tree); Signal (Type Blocco_Speciale,S_Kill_Tree); Signal (Type Tunnel,S_Kill_Tree); Signal (Type Multi_Ball,S_Kill_Tree); Signal (Type Punti,S_Kill_Tree); Signal (Type Caduta_Bonus,S_Kill_Tree); Signal (Type Inizio_Livello,S_Kill); Signal (Type Fine_Livello,S_Kill); Unload_fpg(File_Contorni); Unload_fpg(File_Oggetti); Unload_fpg(File_Paletta[0]); Unload_fpg(File_Paletta[1]); Unload_fpg(File_Palla); Unload_fpg(File_Blocchi); Unload_fpg(File_Bonus); Unload_fnt(Id_font[0]); Clear_Screen(); Delete_Text(All_Text);
Delete_Draw(All_Drawing);
If (prova_liv==0) // Temporaneo pre prova livelli
Switch (Esci_Gioco)
Case 1: Mappa_Mondo(); End
Case 2: Visualizza_record(Tipo_Gioco); Frame; Menu_Iniziale(); End
Case 3: Menu_Iniziale(); End
End;
Else
Menu_Iniziale();
End;
Frame;
End// Procedura di Carica Sfondi
Process Carica_Sfondo(Giocatore,Sezione);
Private
String Nome_Sfondo;
Sfondo;
Begin
z=0;
Loop
Repeat
Frame;
Until (z==100)
z=0;
Clear_Screen();
Switch (Tipo_Gioco)
Case 1..2: If (Utente[Giocatore].Livello<12)
Nome_Sfondo="S";
StrCat(Nome_Sfondo,Itoa(Utente[Giocatore].Livello));
StrCat(Nome_Sfondo,Utente[Giocatore].Sezione);
StrCat(Nome_Sfondo,".map");
Else
Nome_Sfondo="S1A.map";
End
End
Default: Nome_Sfondo="S";
StrCat(Nome_Sfondo,Itoa(Sezione*4+Rand(1,4)));
StrCat(Nome_Sfondo,Utente[Giocatore].Sezione);
StrCat(Nome_Sfondo,".map");
End
End
Sfondo=Load_Map(Nome_Sfondo);
Put_Screen (0,Sfondo);
Unload_map(Sfondo);
End
End
// Carica Livello
Function Carica_Livello(Byte Giocatore,String Sez,Id_Carica);
Private
Struct Salvataggio;
Byte Tipo;
Int PosX,PosY;
Byte Colore;
Byte Colpi;
EndFile_Salvato; Contatore; String Nome_File; Begin
Switch (Tipo_Gioco)
Case 2:Utente[0].Numero_Blocchi=0;
Utente[0].Numero_Tunnel=0;
Utente[0].Livello++;
Cancella_Matrice(0);
Utente[1].Numero_Blocchi=100;
Utente[1].Numero_Tunnel=0;
Utente[1].Livello++;
Cancella_Matrice(1);
End
Default:Utente[Giocatore].Numero_Blocchi=0;
Utente[Giocatore].Numero_Tunnel=0;
Utente[Giocatore].livello++;
Cancella_Matrice(Giocatore);
End
End
Switch (Tipo_Gioco)
Case 1: Nome_File="Livelli/Singolo/Lev"; End;
Case 2: Nome_File="Livelli/Doppio/Lev"; End;
Case 3: Nome_File="Livelli/VSTempo/Lev"; End;
Case 4: Nome_File="Livelli/VSLiv/Lev"; End;
Case 5: Nome_File="Livelli/VSVita/Lev"; End;
Case 6: Nome_File="Livelli/Multi/Lev"; End;
EndStrCat (Nome_File,Itoa(Utente[Giocatore].Livello)); StrCat (Nome_File,Sez); StrCat (Nome_File,".con"); File_Salvato=Fopen(Nome_File,"r"); For (Contatore=0;Contatore<FileLength(File_Salvato);Contatore+=SizeOf(Salvataggio))
Fread (Offset Salvataggio,SizeOf(Salvataggio),File_Salvato);
Switch (Salvataggio.Tipo)
Case 1..5:
Blocco (Salvataggio.PosX+Pos_Sch[Giocatore],Salvataggio.PosY,Salvataggio.Colpi,Salvataggio.Colore,Salvataggio.Tipo,Giocatore);
If (Salvataggio.Colore<>5)
Utente[Giocatore].Numero_Blocchi+=1;
End
End
Case 6 : Tunnel (Salvataggio.PosX+Pos_Sch[Giocatore],Salvataggio.PosY,Giocatore);
Switch (Tipo_Gioco)
Case 2: Utente[0].Numero_Tunnel++;
Utente[1].Numero_Tunnel++;
End
Default: Utente[Giocatore].Numero_Tunnel++; End
End
End
Case 7 : Multi_Ball (Salvataggio.PosX+Pos_Sch[Giocatore],Salvataggio.PosY,Giocatore); End
Case 8 : Punti (Salvataggio.PosX+Pos_Sch[Giocatore],Salvataggio.PosY); End
Case 9 : Blocco_Speciale (Salvataggio.PosX+Pos_Sch[Giocatore],Salvataggio.PosY,Salvataggio.Colpi,Salvataggio.Colore,Salvataggio.Tipo,Giocatore);
Utente[Giocatore].Numero_Blocchi+=1;
End
End
EndFClose(File_Salvato); Id_Carica.z=100; Frame; End // Cancella Blocchi
Function Can_Ogg (Byte Tipo);
Private
Id_Vari;
Begin
Id_Vari=Get_id(Type Blocco);
While (Id_Vari)
Switch (Tipo)
Case 0: Signal(Id_Vari,S_Kill); End
Case 1: If (Id_Vari.x<320) Signal(Id_Vari,S_Kill); End End
Case 2: If (Id_Vari.x>320) Signal(Id_Vari,S_Kill); End End
End
Id_Vari=Get_id(Type Blocco);
End Id_Vari=Get_id(Type Blocco_Speciale);
While (Id_Vari)
Switch (Tipo)
Case 0: Signal(Id_Vari,S_Kill); End
Case 1: If (Id_Vari.x<320) Signal(Id_Vari,S_Kill); End End
Case 2: If (Id_Vari.x>320) Signal(Id_Vari,S_Kill); End End
End
Id_Vari=Get_id(Type Blocco_Speciale);
End Id_Vari=Get_id(Type Tunnel);
While (Id_Vari)
Switch (Tipo)
Case 0: Signal(Id_Vari,S_Kill); End
Case 1: If (Id_Vari.x<320) Signal(Id_Vari,S_Kill); End End
Case 2: If (Id_Vari.x>320) Signal(Id_Vari,S_Kill); End End
End
Id_Vari=Get_id(Type Tunnel);
End Id_Vari=Get_id(Type Multi_Ball);
While (Id_Vari)
Switch (Tipo)
Case 0: Signal(Id_Vari,S_Kill); End
Case 1: If (Id_Vari.x<320) Signal(Id_Vari,S_Kill); End End
Case 2: If (Id_Vari.x>320) Signal(Id_Vari,S_Kill); End End
End
Id_Vari=Get_id(Type Multi_Ball);
End Id_Vari=Get_id(Type Punti);
While (Id_Vari)
Switch (Tipo)
Case 0: Signal(Id_Vari,S_Kill); End
Case 1: If (Id_Vari.x<320) Signal(Id_Vari,S_Kill); End End
Case 2: If (Id_Vari.x>320) Signal(Id_Vari,S_Kill); End End
End
Id_Vari=Get_id(Type Punti);
End Id_Vari=Get_id(Type Palla);
While (Id_Vari)
Switch (Tipo)
Case 0: Signal(Id_Vari,S_Kill); End
Case 1: If (Id_Vari.x<320) Signal(Id_Vari,S_Kill); End End
Case 2: If (Id_Vari.x>320) Signal(Id_Vari,S_Kill); End End
End
Id_Vari=Get_id(Type Palla);
End Id_Vari=Get_id(Type Sparo);
While (Id_Vari)
Switch (Tipo)
Case 0: Signal(Id_Vari,S_Kill); End
Case 1: If (Id_Vari.x<320) Signal(Id_Vari,S_Kill); End End
Case 2: If (Id_Vari.x>320) Signal(Id_Vari,S_Kill); End End
End
Id_Vari=Get_id(Type Sparo);
EndCan_Bonus(Tipo); End // Cancella Bonus in caduta
Function Can_Bonus(Byte Tipo)
Private
Id_Vari;
Begin
Id_Vari=Get_id(Type Caduta_Bonus);
While (Id_Vari)
Switch (Tipo)
Case 0: Signal(Id_Vari,S_Kill); End
Case 1: If (Id_Vari.x<320) Signal(Id_Vari,S_Kill); End End
Case 2: If (Id_Vari.x>320) Signal(Id_Vari,S_Kill); End End
End
Id_Vari=Get_id(Type Caduta_Bonus);
End
End// Temporaneo
Process SELLEV();
Private
String Sez,Gio;
Begin
Delete_Text(All_Text);
File_Oggetti=Load_fpg("Fare.Fpg");x=1; y=1; z=1; Sez="A"; Gio="Singolo"; F_Livello_Dest(550,200,Id,1); F_Livello_Sini(450,200,Id,1); F_Livello_Dest(580,200,Id,2); F_Livello_Sini(420,200,Id,2); F_Livello_Dest(550,260,Id,3); F_Livello_Sini(450,260,Id,3); F_Livello_Dest(610,320,Id,4); F_Livello_Sini(390,320,Id,4); Write (0,515,0 ,1,"Selezione Livello"); Write (0,515,180,1,"Livello corrente"); Write_int(0,515,200,1,OffSet x); Write (0,515,240,1,"Sezione"); Write (0,515,260,1,Sez); Write (0,515,300,1,"Tipo gioco"); Write (0,515,320,1,Gio); Controllo=0; Mouse.Graph=3; Mouse.Speed=2; Fade_On();
Repeat
Switch (Y)
Case 1: Sez="A"; End;
Case 2: Sez="B"; End;
Case 3: Sez="C"; End;
Case 4: Sez="D"; End;
End
Switch (Z)
Case 1: Gio="Singolo"; End;
Case 2: Gio="Doppio"; End;
Case 3: Gio="VS a tempo"; End;
Case 4: Gio="VS a livello"; End;
Case 5: Gio="Vs a vita"; End;
Case 6: Gio="Multi Player"; End;
End;Frame; Until (Key(_Enter)); Signal (Id,S_Kill_Tree);
Unload_fpg(File_Oggetti);
Mouse.Graph=0;
Utente[0].Livello=x-1;
Switch (z)
Case 1: Utente[0].Sezione="A"; End;
Case 2: Utente[0].Sezione="B"; End;
Case 3: Utente[0].Sezione="C"; End;
Case 4: Utente[0].Sezione="D"; End;
End
Tipo_Gioco=z;
Prova_liv=1;
Gioco(0,0);
End;/* // Sezione 3 // // Tutorial */ Process Tutorial (); Private Byte Modalita; Byte Volte; Byte Esci; Id_Oggetti[3]; Id_Linee[5]; Int Tempo; Begin Tutorial_SN=1; Mouse.Graph=0; File_Contorni=Load_fpg (Nome_Sezioni[0]);
File_Paletta[0]=Load_Fpg (Nome_Palette[0]);
Id_Font[0]=Load_Fnt (Nome_Font[0]);
Id_Font[1]=Load_Fnt ("Tutorial.fnt");
File_Palla =Load_Fpg ("Palla.fpg");
File_Blocchi =Load_Fpg ("Blocchi.fpg");
File_Bonus =Load_Fpg ("Bonus.fpg");
File_Oggetti =Load_Fpg ("Oggetti.fpg");
File_Tutorial=Load_Fpg ("Tutorial.fpg");Utente[0].Inizio_sn=1; Pos_Sch[0]=0;
Id_Paletta[0]=Paletta (150+Pos_Sch[0],460,0,2);
Palla(Id_Paletta[0],0,0,0);
BarraN (150+Pos_Sch[0], 9);
BarraE (290+Pos_Sch[0],240);
BarraO (9 +Pos_Sch[0],240);Id_Oggetti[0]=T_Freccie (1,480,240); Id_Oggetti[1]=T_Freccie (2,480,240); Id_Oggetti[2]=T_Freccie (3,480,240); Id_Oggetti[3]=T_Freccie (4,480,400); Write (Id_Font[1],480,10,4,"TUTORIAL"); T_Scritte(480,460,100); Start_Scroll(0,File_Tutorial,1,2,0,15); T_Sfondo(); Inizio_Livello(0); Esci=False; Fade_on();
Timer[9]=0;
Tempo=0;
Repeat
Switch (Tutorial_SN)
Case 1: Id_Linee[0]=T_Scrivi("Benvenuti",480,30);
Id_Linee[1]=T_Scrivi("nel tutorial",480,45);
Tutorial_SN++;
Tempo=200;
End
Case 3: Id_Linee[0].z=10;
Id_Linee[1].z=10;
Frame;
Id_Linee[0]=T_Scrivi("Nel gioco non sono",480,30);
Id_Linee[1]=T_Scrivi("presenti i pulsanti su e giu",480,45);
Id_Oggetti[2].z=10;
Tutorial_SN++;
Tempo=300;
End
Case 5: Id_Linee[0].z=10;
Id_Linee[1].z=10;
Id_Oggetti[2].z=12;
Frame;
Id_Linee[0]=T_Scrivi("Per muovere la paletta",480,30);
Id_Linee[1]=T_Scrivi("a destra si preme",480,45);
Id_Linee[2]=T_Scrivi("il seguente pulsante ",480,60);
Id_Oggetti[0].z=10;
Tutorial_SN++;
Tempo=450;
End
Case 7: Id_Linee[0].z=10;
Id_Linee[1].z=10;
Id_Linee[2].z=10;
Id_Oggetti[0].z=12;
Frame;
Id_Linee[0]=T_Scrivi("Per muovere la paletta",480,30);
Id_Linee[1]=T_Scrivi("a sinistra si preme",480,45);
Id_Linee[2]=T_Scrivi("il seguente pulsante ",480,60);
Id_Oggetti[1].z=10;
Tutorial_SN++;
Tempo=450;
End
Case 9: Id_Linee[0].z=10;
Id_Linee[1].z=10;
Id_Linee[2].z=10;
Id_Oggetti[1].z=12;
Frame;
Tutorial_SN++;
Tempo=250;
End
Case 11:Id_Linee[0].z=10;
Id_Linee[1].z=10;
Id_Oggetti[1].z=12;
Frame;
Id_Linee[0]=T_Scrivi("Per lancare la pallina:",480,30);
Tutorial_SN++;
Tempo=200;
End
Case 13:Id_Linee[0].z=10;
Id_Linee[1].z=10;
Frame;
Id_Linee[0]=T_Scrivi("Si preme il pulsante sparo per",480,30);
Id_Linee[1]=T_Scrivi("far comarire la traiettoia",480,45);
Id_Oggetti[3].z=10;
Tutorial_SN++;
Tempo=450;
End
Case 15:Id_Linee[0].z=10;
Id_Linee[1].z=10;
Id_Oggetti[3].z=12;
Frame;
Id_Linee[0]=T_Scrivi("Si decide la traiettioa",480,30);
Tutorial_SN++;
Tempo=200;
End
Case 17:Id_Linee[0].z=10;
Id_Linee[1].z=10;
Frame;
Id_Linee[0]=T_Scrivi("Si preme sparo per",480,30);
Id_Linee[1]=T_Scrivi("lanciare la pallina",480,45);
Id_Oggetti[3].z=10;
Tutorial_SN++;
Tempo=650;
End
Case 19:Id_Linee[0].z=10;
Id_Linee[1].z=10;
Id_Oggetti[3].z=12;
Frame;
Id_Linee[0]=T_Scrivi("Scopo del gioco ",480,30);
Id_Linee[1]=T_Scrivi("eliminare i vari mattoni",480,45);
Id_Linee[2]=T_Scrivi("presenti nello chermo",480,60);
Tutorial_SN++;
Tempo=300;
End
Case 21:Id_Linee[0].z=10;
Id_Linee[1].z=10;
Id_Linee[2].z=10;
Frame;
Id_Linee[0]=T_Scrivi("Ci sono mattoni indistruttibili...",480,30);
Blocco (30,30,0,5,1,0);
Blocco (270,30,0,5,1,0);
Tutorial_SN++;
Tempo=200;
End
Case 23:Id_Linee[0].z=10;
Frame;
Id_Linee[0]=T_Scrivi("...mattoni normali..",480,30);
Blocco (70,30,1,2,1,0);
Blocco (230,30,1,2,1,0);
Tutorial_SN++;
Tempo=200;
End
Case 25:Id_Linee[0].z=10;
Frame;
Id_Linee[0]=T_Scrivi("...di vari colori...",480,30);
Blocco (70,70,1,3,1,0);
Blocco (230,70,1,3,1,0);
Blocco (30,70,1,4,1,0);
Blocco (270,70,1,4,1,0);
Tutorial_SN++;
Tempo=200;
End
Case 27:Id_Linee[0].z=10;
Frame;
Id_Linee[0]=T_Scrivi("...e forme.",480,30);
Blocco (18,110,1,2,5,0);
Blocco (282,110,1,2,5,0);
Blocco (18,150,1,3,5,0);
Blocco (282,150,1,3,5,0);
Tutorial_SN++;
Tempo=200;
End
Case 29:Id_Linee[0].z=10;
Frame;
Id_Linee[0]=T_Scrivi("Poi ci sono vari oggetti",480,30);
Id_Linee[1]=T_Scrivi("e tipi di bonus che",480,45);
Id_Linee[2]=T_Scrivi("potrete scoprire",480,60);
Tunnel (70,110,1);
Tunnel (230,110,1);
Multi_Ball (70,150,0);
Multi_Ball (230,150,0);
Tutorial_SN++;
Tempo=300;
End
Case 31:Id_Linee[0].z=10;
Id_Linee[1].z=10;
Id_Linee[2].z=10;
Frame;
Id_Linee[0]=T_Scrivi("Proviamo a giocare",480,30);
Tutorial_SN++;
Tempo=800;
End
Case 33:Id_Linee[0].z=10;
Id_Linee[1].z=10;
Id_Linee[2].z=10;
Frame;
Id_Linee[0]=T_Scrivi("Buona fortuna",480,30);
Id_Linee[1]=T_Scrivi(" ",480,45);
Id_Linee[2]=T_Scrivi("Fine tutorial",480,60);
Tutorial_SN++;
Tempo=400;
End Default: If (Timer[9]>=Tempo) Timer[9]=0; Tutorial_SN++; End
End
End Scroll.X0++;
Scroll.Y0--;
Scroll.X1--;
Scroll.Y1++; If (Timer[8]>=2)
For (X=0;X<=5;X++)
For (Y=0;Y<=1;Y++)
Utente[Y].Tempo_Ani[X]+=1;
End
End
Timer[8]=0;
EndIf (Ascii!=0) Esci=True; Frame; End Frame; Until (Tutorial_SN==35 Or Esci==True); Stop_Scroll(0); Delete_Text(All_Text); Delete_Draw(All_Drawing); Signal (Type T_Freccie,S_Kill_Tree); Signal (Type BarraN,S_Kill_Tree); Signal (Type BarraE,S_Kill_Tree); Signal (Type BarraO,S_Kill_Tree); Signal (Type Palla,S_Kill_Tree); Signal (Type Paletta,S_Kill_Tree); Signal (Type T_Sfondo,S_Kill_Tree); Signal (Type T_Scrivi,S_Kill_Tree); Signal (Type T_Scritte,S_Kill_Tree); Signal (Type Caduta_Bonus,S_Kill); Signal (Type Blocco,S_Kill); Signal (Type Tunnel,S_Kill); Signal (Type Multi_Ball,S_Kill); Unload_fpg(File_Contorni); Unload_fpg(File_Oggetti); Unload_fpg(File_Paletta); Unload_fpg(File_Palla); Unload_fpg(File_Blocchi); Unload_fpg(File_Bonus); Unload_fnt(Id_Font[0]); Unload_fnt(Id_Font[1]); Clear_Screen();
Fade_Off();
Frame;
Volte=1;
Utente[0].Sezione="A";
Utente[1].Sezione="A";
T_Scritte(330,10,100);
While (Volte<5 And Esci==False)
Modalita=Rand(1,5);
Switch (Modalita)
Case 1: Tipo_Gioco=1; End
Case 2: Tipo_Gioco=2; End
Case 3: Tipo_Gioco=3; End
Case 4: Tipo_Gioco=4; End
Case 5: Tipo_Gioco=5; End
End Cont_Paletta[0].Tipo=Rand(0,2);
Cont_Paletta[1].Tipo=Rand(0,2); If (Tipo_Gioco==4)
Utente[0].Livello=0;
Utente[1].Livello=0;
Else
Modalita=Rand(0,4);
Utente[0].Livello=Modalita;
Utente[1].Livello=Modalita;
End
Utente[0].Numero_Blocchi=0;
Utente[1].Numero_Blocchi=0;
Utente[0].Vite=3;
Utente[1].Vite=3; Gioco(1,1);
Fade_On();
Timer[9]=0;
Repeat
Frame;
If (Timer[9]>=1000) Esci_Gioco=4; Frame; End;
If (Ascii!=0) Esci_Gioco=4; Esci=True; Frame; End
Until (Esci_Gioco==4);
Frame;
Fade_Off();
Esci_Gioco=0;
Volte++;
End Signal (Type T_Scritte,S_Kill);
Esci_Gioco=0;
Visualizza_Record(4);
Fade_On();
Timer[9]=0;
While (Esci==False)
Frame;
If (Timer[9]>=1000) Esci=True; End;
If (Ascii!=0) Esci=True; Frame; End
End
Esci_Gioco=4;
Frame(500);
Esci_Gioco=0;
Tutorial_SN=0;
Signal(Type T_Scritte,S_Kill);
Unload_fpg(File_Tutorial);
Fade_Off();
Menu_Iniziale();
End;// Procedura per lo sfondo
Process T_Sfondo ();
Begin
File=File_Tutorial;
z=220;
x=0;
y=0;
Graph=3;
Loop
Frame;
End
End// Procedura che visualizza le scritte in tutorial
Process T_Scritte (x,y,Graph)
Private
Byte Av_In;
Begin
File=File_Tutorial;
z=-280;
Av_In=0;
Loop
If (Av_In==0)
Graph++;
Av_In=1;
Else
Graph--;
Av_In=0;
End
Frame(1000);
End
End// Procedura controllo freccie direzionali
Process T_Freccie (Tipo,x,y)
Private
Byte Ini;
Begin
File=File_Tutorial;
Switch (Tipo)
Case 1: Ini=10; End
Case 2: Ini=20; End
Case 3: Ini=30; End
Case 4: Ini=40; End
End
Graph=Ini;
Loop
Switch (z)
Case 10:If (Graph>Ini+3)
Graph=Ini;
Else
Graph++;
End
End
Case 12:Graph=Ini;
End
End
Frame(1000);
End
End// Prucedura che scrive scritte a video Process T_Scrivi (String Frase,x,y) Private String Frase_Video=""; String Supporto; Byte Lung,I; Id_Frase; Begin Id_Frase=Write (Id_Font[1],x,y,4,Frase_Video); Lung=StrLen(Frase); For (I=0;I<Lung;I++)
StrCpy(Supporto,Frase);
StrDel(Supporto,I,Lung-1-I);
StrCat (Frase_Video,Supporto);
Frame(250);
End
Repeat
Frame;
Until (z==10);
Delete_Text(Id_Frase);
End/* Sezione 4 // // Non attivata perchč non finita // Parte Multi player */
Process Multi_Giocatore();
Private
Giocatore;
Begin
Net.Device=1;
Net.Max_Players=2;
Net.Mode=0;
Giocatore=Net_Join_Game("Prova",Offset Multi_Player,SizeOf (Multi_Player));
Repeat
Multi_Player[Giocatore].Ready=1;
Frame;
Until (Multi_Player[0].Ready==1 And Multi_Player[1].Ready==1);Gioco(0,0); Fade_On(); Loop
If (Id_Paletta[0])
Multi_Player[Giocatore].Vita=Utente[0].Vite;
Multi_Player[Giocatore].Paletta.x=Id_Paletta[0].x;
Multi_Player[Giocatore].Paletta.y=Id_Paletta[0].y;
Multi_Player[Giocatore].Paletta.Graph=Id_Paletta[0].Graph; Switch (Giocatore)
Case 0:Id_Paletta[1].x=Multi_Player[1].Paletta.x;
Id_Paletta[1].y=Multi_Player[1].Paletta.y;
Id_Paletta[1].Graph=Multi_Player[1].Paletta.Graph;
End
Case 1:Id_Paletta[1].x=Multi_Player[0].Paletta.x;
Id_Paletta[1].y=Multi_Player[0].Paletta.y;
Id_Paletta[1].Graph=Multi_Player[0].Paletta.Graph;
End
End
End
Frame;
End
EndProcess Paletta_Multi (x,y);
Begin
File=File_Paletta;
Loop
Frame;
End
EndProcess Palla_Multi (x,y);
Begin
File=File_Palla;
Loop
Frame;
End
End
/* // Sezione 5 // // Mappa Mondo per gioco singolo o doppio */ Process Mappa_Mondo (); Private Pos_x,Pos_y; Pos_Pre_x,Pos_Pre_y; Byte Ava_Ind; Byte Numero_Regione; Linea[3]; Rettangoli[10]; Colore; Begin Clear_Screen(); Delete_Text(All_Text); File_Oggetti=Load_fpg ("Mondo.fpg"); File=File_Oggetti; Load_Pal ("Mondo.pal"); Start_Scroll (0,File,1,0,0,1); Fade_On(); Numero_Regione=(Utente[0].Livello/4)+1; Get_Point(File,1,Numero_Regione-1,Offset Pos_Pre_x,Offset Pos_Pre_y); Get_Point(File,1,Numero_Regione ,Offset Pos_x,Offset Pos_y); If (Utente[0].Livello-(Utente[0].Livello/4)*4==0)
Scroll.x0=Pos_Pre_x; x=Rand (1,659);
y=Rand (1,479);
Graph=100;
Colore=16;
Linea[0]=Draw (1,Colore,15,0,x,y,x+1000,y+1000);
Linea[1]=Draw (1,Colore,15,0,x,y,x+1000,y-1000);
Linea[2]=Draw (1,Colore,15,0,x,y,x-1000,y+1000);
Linea[3]=Draw (1,Colore,15,0,x,y,x-1000,y-1000);
Rettangoli[0]=Draw (2,Colore,15,0,x-50,y-50,x+50,y+50);
Rettangoli[1]=Draw (2,Colore,15,0,x-25,y-25,x+25,y+25);Timer[0]=0; If ((Pos_x) < 960-(Pos_x))
Ava_Ind=True;
Else
Ava_Ind=False;
End; Repeat
If (Scroll.x0>960) Scroll.x0=0; End;
If (Scroll.x0<0) Scroll.x0=960; End; If (Scroll.x0<>Pos_x)
If (Ava_Ind)
Scroll.x0++;
Else
Scroll.x0--;
End;
End; If (320>x)
x++;
Else If (320<x)
x--;
End
End; If (Pos_y>y)
y++;
Else If (Pos_y<y)
y--;
End
End; Colore++;
If (Colore==32) Colore=16; End; Move_Draw (Linea[0],Colore,15,x,y,x+1000,y+1000);
Move_Draw (Linea[1],Colore,15,x,y,x+1000,y-1000);
Move_Draw (Linea[2],Colore,15,x,y,x-1000,y+1000);
Move_Draw (Linea[3],Colore,15,x,y,x-1000,y-1000);
Move_Draw (Rettangoli[0],Colore,15,x-50,y-50,x+50,y+50);
Move_Draw (Rettangoli[1],Colore,15,x-25,y-25,x+25,y+25); If (Timer[0]>=50)
Graph++;
If (Graph==107) Graph=100; End
Timer[0]=0;
End; Frame;
Until (x==320 And y==Pos_y And Graph==106 And Scroll.x0==Pos_x);
Else
Scroll.x0=Pos_x;
x=320;
y=Pos_y;
End; Repeat
For (Numero_Regione=2;Numero_Regione<=10;Numero_Regione++)
Rettangoli[Numero_Regione]=Draw (2,Colore,15,0,x-Numero_Regione*20,y-Numero_Regione*20,x+Numero_Regione*20,y+Numero_Regione*20);
End
Frame(800);
Until (Numero_Regione==11);
Delete_Draw(All_Drawing);
Graph=0;
M_Seleziona_Livello (Id);
Repeat
Pos_x=Get_id(Type M_Seleziona_Livello);
Frame;
Until (Not Pos_x);
Unload_Fpg(File_Oggetti);
Stop_Scroll(0);
Fade_Off();
Gioco(0,0);
End;// Grafica per selezionare il livello
Process M_Seleziona_Livello (Id_Mappa);
Private
Id_Bolle[6];
Byte Livello_Corrente;
Byte Contatore;
Begin
File=File_Oggetti;
Livello_Corrente=Utente[0].Livello-(Utente[0].Livello/4)*4;
Switch (Livello_Corrente)
Case 0: Graph=130; End
Case 1: Graph=131; End
Case 2: Graph=132; End
Case 3: Graph=133; End
End
Size=0;
x=Id_Mappa.x;
y=Id_Mappa.y;
Repeat
Size++;
Frame(50);
Until (Size==100);Id_Bolle[0]=M_Bolla(Id_Mappa.x ,Id_Mappa.y+85,122); Id_Bolle[1]=M_Bolla(Id_Mappa.x-30,Id_Mappa.y+25,122); Id_Bolle[2]=M_Bolla(Id_Mappa.x+30,Id_Mappa.y+25,122); Id_Bolle[3]=M_Bolla(Id_Mappa.x-60,Id_Mappa.y-35,122); Id_Bolle[4]=M_Bolla(Id_Mappa.x ,Id_Mappa.y-35,122); Id_Bolle[5]=M_Bolla(Id_Mappa.x+60,Id_Mappa.y-35,122); Id_Bolle[6]=M_Bolla(Id_Mappa.x ,Id_Mappa.y-95,122); Switch (Livello_Corrente)
Case 0: Id_Bolle[0].Graph=123;
Id_Bolle[1].Graph=121;
Id_Bolle[2].Graph=121;
Id_Bolle[3].Graph=121;
Id_Bolle[4].Graph=121;
Id_Bolle[5].Graph=121;
Id_Bolle[6].Graph=121;
End;
Case 1: Id_Bolle[0].Graph=124;
Id_Bolle[1].Graph=123;
Id_Bolle[2].Graph=122;
Id_Bolle[3].Graph=121;
Id_Bolle[4].Graph=121;
Id_Bolle[5].Graph=121;
Id_Bolle[6].Graph=121;
End;
Case 2: Id_Bolle[0].Graph=124;
Id_Bolle[1].Graph=124;
Id_Bolle[2].Graph=124;
Id_Bolle[3].Graph=123;
Id_Bolle[4].Graph=122;
Id_Bolle[5].Graph=122;
Id_Bolle[6].Graph=121;
End;
Case 3: Id_Bolle[0].Graph=124;
Id_Bolle[1].Graph=124;
Id_Bolle[2].Graph=124;
Id_Bolle[3].Graph=124;
Id_Bolle[4].Graph=124;
Id_Bolle[5].Graph=124;
Id_Bolle[6].Graph=123;
End;
End; Timer[0]=0;
Repeat
If (Key(_Right) And Timer[0]>=50)
Switch (Livello_Corrente)
Case 1:If (Id_Bolle[1].Graph==123)
Id_Bolle[1].Graph=122;
Id_Bolle[2].Graph=123;
Else
Id_Bolle[1].Graph=123;
Id_Bolle[2].Graph=122;
End
End
Case 2:If (Id_Bolle[3].Graph==123)
Id_Bolle[3].Graph=122;
Id_Bolle[4].Graph=123;
Else If (Id_Bolle[4].Graph==123)
Id_Bolle[4].Graph=122;
Id_Bolle[5].Graph=123;
Else
Id_Bolle[5].Graph=122;
Id_Bolle[3].Graph=123;
End
End
End
End
Timer[0]=0;
End
If (Key(_Left) And Timer[0]>=50)
Switch (Livello_Corrente)
Case 1:If (Id_Bolle[1].Graph==123)
Id_Bolle[1].Graph=122;
Id_Bolle[2].Graph=123;
Else
Id_Bolle[1].Graph=123;
Id_Bolle[2].Graph=122;
End
End
Case 2:If (Id_Bolle[5].Graph==123)
Id_Bolle[5].Graph=122;
Id_Bolle[4].Graph=123;
Else If (Id_Bolle[4].Graph==123)
Id_Bolle[4].Graph=122;
Id_Bolle[3].Graph=123;
Else
Id_Bolle[3].Graph=122;
Id_Bolle[5].Graph=123;
End
End
End
End
Timer[0]=0;
End Frame;
Until (key(_Enter));
Contatore=0;
While (Id_Bolle[Contatore].Graph<>123);
Contatore++;
End Switch (Contatore)
Case 2: Utente[0].Sezione="B"; End
Case 4: Utente[0].Sezione="B"; End
Case 5: Utente[0].Sezione="C"; End
Default: Utente[0].Sezione="A"; End
EndSignal (Type M_Bolla,S_Kill_Tree); End; // Grafica singolo livello
Process M_Bolla (x,y,Graph)
Begin
File=File_Oggetti;
Loop
Frame;
End;
End/* // Sezione 6 // // Funzioni per il controllo dei tasti */ Function Destra(Giocatore); Private Byte SN=False; Begin Switch (Tasti[Giocatore].Tipo_Sel) Case 1: If (Key(Tasti[Giocatore].Destra)) SN=True; End End Case 2: If (Joy.Right) SN=True; End End End Return (SN); End Function Sinistra(Giocatore);
Private
Byte SN=False;
Begin
Switch (Tasti[Giocatore].Tipo_Sel)
Case 1: If (Key(Tasti[Giocatore].Sinistra)) SN=True; End End
Case 2: If (Joy.Left) SN=True; End End
End
Return (SN);
EndFunction Bottone(Giocatore);
Private
Byte SN=False;
Begin
Switch (Tasti[Giocatore].Tipo_Sel)
Case 1: If (Key(Tasti[Giocatore].Bottone)) SN=True; End End
Case 2: If (Joy.Button1) SN=True; End End
End
Return (SN);
End/* // Sezione 7 // // Tabella Racord */ Process Visualizza_Record (Byte Tipo); Private Struct Salvataggio String Nome_Giocatore[30]; Punteggio; Byte Livello; End Struct Dati_Finali[41]
String Nome_Giocatore[30];
Int Punteggio;
Byte Livello;
End Struct Frasi[41];
Nome1;
Nome2;
Nome3;
End
Byte Cont;
FileRecord;Begin
If (Tipo<>0)
Signal (Type Gioco,S_Freeze);
End Fade_On();
File_Record=Load_Fpg ("Record.fpg");
Id_Font[0]=Load_Fnt ("Record1.fnt"); Switch (Tipo)
Case 1: FileRecord=Fopen("Hit\Record.hit","r");
FSeek(FileRecord,FileLength(FileRecord)-SizeOf(Salvataggio),Seek_Set);
FRead(Offset Salvataggio,SizeOf(Salvataggio),FileRecord);
FClose(FileRecord);
If (Utente[0].Punteggio>Salvataggio.Punteggio) Inserimento_Record(0); Frame; End
End
Case 2: FileRecord=Fopen("Hit\Record.hit","r");
FSeek(FileRecord,FileLength(FileRecord)-SizeOf(Salvataggio),Seek_Set);
FRead(Offset Salvataggio,SizeOf(Salvataggio),FileRecord);
FClose(FileRecord);
If (Utente[0].Punteggio>Salvataggio.Punteggio) Inserimento_Record(0); Frame; End
If (Utente[1].Punteggio>Salvataggio.Punteggio) Inserimento_Record(1); Frame; End
End
End
FileRecord=Fopen ("Hit\Record.hit","r");
For (Cont=0;Cont<FileLength(FileRecord)/SizeOf(Salvataggio);Cont++)
Fread (Offset Salvataggio,SizeOf(Salvataggio),FileRecord);
Dati_Finali[Cont].Nome_Giocatore=Salvataggio.Nome_Giocatore;
Dati_Finali[Cont].Livello=Salvataggio.Livello;
Dati_Finali[Cont].Punteggio=Salvataggio.Punteggio;
EndFClose (FileRecord); Start_Scroll (0,File_Record,100,101,0,15); Frasi[41].Nome1=Write (Id_font[0],100,20,0,"Nome"); Frasi[41].Nome2=Write (Id_font[0],300,20,0,"Livello"); Frasi[41].Nome3=Write (Id_font[0],440,20,0,"Punteggio"); For (Cont=0;Cont<20;Cont++)
Frasi[Cont].Nome1=Write (Id_font[0],100,Cont*20+50,0,Dati_Finali[Cont].Nome_Giocatore);
Frasi[Cont].Nome2=Write_Int(Id_font[0],300,Cont*20+50,0,Offset Dati_Finali[Cont].Livello);
Frasi[Cont].Nome3=Write_Int(Id_font[0],440,Cont*20+50,0,Offset Dati_Finali[Cont].Punteggio);
EndWrite (Id_Font[0],320,460,4,"Premi un tasto per continuare"); Repeat
Scroll.X0--;
Scroll.Y0--;
Scroll.X1++;
Scroll.Y1++;
Frame(250);
Until (Scan_Code!=0 Or Esci_Gioco==4);Delete_Text(All_Text); Stop_Scroll(0); Unload_fpg(File_Record); Unload_fnt(Id_Font[0]); Clear_Screen(); If (Tipo==0)
Menu_Iniziale();
Else
Signal (Type Gioco,S_Wakeup);
End;
End// Inserimento su file
Process Inserimento_Record(Byte Giocatore);
Private
Struct Salvataggio
String Nome_Giocatore[30];
Int Punteggio;
Byte Livello;
EndString Nome_Giocatore[30]; Byte Lung_Nome; Byte Posx,Posy,PosTot; Int Uscita; Byte Grandi; FileRecord; FileTemp; String Caratteri=
"abcdefghijklmnopqrstuvwxyz0123456789 !?.:-";
Begin Signal (Type Visualizza_Record,S_Freeze); File=File_Record; R_Sfondo(); z=-20; Graph=10; x=20; y=200; Lung_Nome=0; Grandi=0; Posx=0; Posy=0; PosTot=0; Uscita=0; Timer=0; Write (Id_Font[0],40,100,0,Nome_Giocatore); Start_Scroll (0,File_Record,100,101,0,15); Repeat
If (Key(_up ) And Posy>0 And Timer>20) y-=40; Posy-=1; Timer=0; End
If (Key(_down ) And Posy<2 And Timer>20) y+=40; Posy+=1; Timer=0; End
If (key(_right) And Posx<14And Timer>20) x+=40; Posx+=1; Timer=0; End
If (key(_left ) And Posx>0 And Timer>20) x-=40; Posx-=1; Timer=0; End If (key(_Enter) And Timer>20)
If (Posy==0 And Posx>=0) PosTot=Posx; End
If (Posy<>0 And Posx==0) PosTot=Posy*15; End
If (Posy<>0 And Posx<>0) PosTot=Posx+Posy*15; End Switch (PosTot)
Case 42 :If (Grandi==0)
Grandi=1;
Else
Grandi=0;
End
End
Case 43 :If (Lung_Nome>0)
StrDel (Nome_Giocatore,0,1);
Lung_Nome=StrLen(Nome_Giocatore);
End
End
Case 44 :If (Lung_Nome>1)
Uscita=1;
End
End
Default :
If (Lung_Nome<=16)
If (Grandi==1)
StrCat (Nome_Giocatore,Upper(Caratteri[PosTot]));
Else
StrCat (Nome_Giocatore,Caratteri[PosTot]);
End
Lung_Nome=StrLen(Nome_Giocatore);
End
End
End
Timer=0;
End Scroll.X0--;
Scroll.Y0--;
Scroll.X1++;
Scroll.Y1++;Frame; Until (Uscita==1 Or Key(_Esc)) Stop_Scroll(0); Signal(Type R_Sfondo,S_Kill); If (StrLen(Nome_Giocatore)<4)
Nome_Giocatore="Default";
End FileRecord=FOpen("Hit\Record.hit","r");
FileTemp =FOpen("Hit\Temp.hit","w"); Repeat
FRead (Offset Salvataggio,SizeOf(Salvataggio),FileRecord);
FWrite(Offset Salvataggio,SizeOf(Salvataggio),FileTemp );
Until(Utente[Giocatore].Punteggio >= Salvataggio.Punteggio);Fseek (FileRecord,Ftell(FileRecord)-SizeOf(Salvataggio),seek_set); Fseek (FileTemp ,Ftell(FileTemp )-SizeOf(Salvataggio),seek_set); Salvataggio.Nome_Giocatore=Nome_Giocatore; Salvataggio.Punteggio=Utente[Giocatore].Punteggio; Salvataggio.Livello=Utente[Giocatore].Livello; FWrite(OffSet Salvataggio,SizeOf(Salvataggio),FileTemp); For (Uscita=FTell(FileRecord);Uscita<FileLength(FileRecord)-SizeOf(Salvataggio);Uscita+=SizeOf(Salvataggio))
FRead (Offset Salvataggio,SizeOf(Salvataggio),FileRecord);
FWrite(Offset Salvataggio,SizeOf(Salvataggio),FileTemp );
EndFClose(FileTemp ); FClose(FileRecord); FileRecord=FOpen("Hit\Record.hit","w");
FileTemp =FOpen("Hit\Temp.hit","r"); Repeat
FRead (Offset Salvataggio,SizeOf(Salvataggio),FileTemp);
FWrite(Offset Salvataggio,SizeOf(Salvataggio),FileRecord);
Until (FTell(FileTemp)==FileLength(FileTemp)); FClose(FileTemp );
FClose(FileRecord);
Remove ("HIT\TEMP.hit");Delete_Text(All_Text); Clear_Screen(); Signal (Type Visualizza_Record,S_Wakeup); End // Procedura dello sfondo con le lettere
Process R_Sfondo ();
Begin
File=File_Record;
z=-10;
Graph=1;
x=320;
y=240;
Loop
Frame;
End
End/* // Sezione 8 // // Editor Livelli */ Process Editor(); Private String Sez[0],Gio[16]; Begin Clear_Screen(); Delete_Text(All_Text); File_Oggetti=Load_fpg("Fare.Fpg"); File_Fnt[0] =Load_fnt("Costr.fnt");
File_Fnt[1] =Load_fnt("TestoNor.fnt");X=1; Y=1; Z=1; Sez="A"; Gio="Singolo"; Sfondo(); Sfondo_Griglia (); Cancella(); Salva (Id); Carica (Id); Chiudi (); F_Livello_Dest(550,200,Id,1); F_Livello_Sini(450,200,Id,1); F_Livello_Dest(580,200,Id,2); F_Livello_Sini(420,200,Id,2); F_Livello_Dest(550,260,Id,3); F_Livello_Sini(450,260,Id,3); F_Livello_Dest(610,320,Id,4); F_Livello_Sini(390,320,Id,4); Write (File_Fnt[1],515,0 ,1,"editor livelli"); Write (File_Fnt[1],515,180,1,"livello corrente"); Write_int(File_Fnt[0],515,200,1,OffSet x); Write (File_Fnt[1],515,240,1,"sezione"); Write (File_Fnt[0],515,260,1,Sez); Write (File_Fnt[1],515,300,1,"tipo gioco"); Write (File_Fnt[0],515,320,1,Gio); TipoBlocco (350, 50,1); TipoBlocco (350,100,2); TipoBlocco (350,150,3); TipoBlocco (350,200,4); TipoBlocco (350,250,5); TipoBlocco (350,300,6); TipoBlocco (350,350,7); TipoBlocco (350,400,8); TipoBlocco (350,450,9); Controllo=0; Mouse.Graph=1; Mouse.Speed=2; Fade_On();
Repeat
Switch (Y)
Case 1: Sez="A"; End;
Case 2: Sez="B"; End;
Case 3: Sez="C"; End;
Case 4: Sez="D"; End;
End
Switch (Z)
Case 1: Gio="Singolo"; End;
Case 2: Gio="Doppio"; End;
Case 3: Gio="VS a tempo"; End;
Case 4: Gio="VS a livello"; End;
Case 5: Gio="Vs a vita"; End;
Case 6: Gio="Multi Player"; End;
End;Frame; Until (Controllo==100); Signal (Type TipoBlocco,S_Kill_Tree); Signal (Type Cancella ,S_Kill_Tree); Signal (Type Salva ,S_Kill_Tree); Signal (Type Carica ,S_Kill_Tree); Signal (Type Blocco_Ed ,S_Kill); Signal (Type Oggetti_Ed ,S_Kill); Signal (Type Speciale_Ed,S_Kill); Signal(Type F_D_C,S_Kill); Signal(Type F_S_C,S_Kill); Signal(Type F_D_I,S_Kill); Signal(Type F_S_I,S_Kill); Signal(Type F_Livello_Dest,S_Kill); Signal(Type F_Livello_Sini,S_Kill); Signal(Type Sfondo_Griglia,S_Kill); Signal(Type Chiudi,S_Kill); Signal(Type Sfondo,S_Kill); Stop_Scroll(0); Delete_Text(All_Text); Unload_Fnt (File_Fnt[0]); Unload_Fnt (File_Fnt[1]); Unload_Fpg (File_Oggetti); Mouse.Graph=0; Frame; Fade_Off(); Menu_Iniziale(); End // Scrolling di fondo
Process Sfondo()
Begin
Timer=0;
Start_Scroll (0,File_Oggetti,200,201,0,15);
Loop
Switch (Rand(1,4))
Case 1: Timer=0;
Repeat
Scroll.x0+=2;
Scroll.y0+=2;
Scroll.x1+=1;
Scroll.y1+=1;
Frame(300);
Until (Timer>=500);
End
Case 2: Timer=0;
Repeat
Scroll.x0-=2;
Scroll.y0+=2;
Scroll.x1-=1;
Scroll.y1+=1;
Frame(300);
Until (Timer>=500);
End
Case 3: Timer=0;
Repeat
Scroll.x0+=2;
Scroll.y0-=2;
Scroll.x1+=1;
Scroll.y1-=1;
Frame(300);
Until (Timer>=500);
End
Case 4: Timer=0;
Repeat
Scroll.x0-=2;
Scroll.y0-=2;
Scroll.x1-=1;
Scroll.y1-=1;
Frame(300);
Until (Timer>=500);
End
End
End;
End// Blocco dell'editor Process Blocco_Ed(x,y,Byte Tipo); Private Byte Calcolo; Byte In_Uso; Byte Colore; Colpi; Byte Lung,Alte; Int Prex,Prey; Begin File=File_Oggetti; z=51; Switch (Tipo)
Case 1: Graph=100; Lung=20; Alte=20; End
Case 2: Graph=110; Lung=20; Alte=4 ; End
Case 3: Graph=120; Lung=4 ; Alte=20; End
Case 4: Graph=130; Lung=20; Alte=8 ; End
Case 5: Graph=140; Lung=8 ; Alte=20; End
End In_uso=0;
Repeat
If (Mouse.Left And (Controllo==0 Or In_Uso==1) And (Mouse.x>=x-Lung And Mouse.x<=x+Lung) And (Mouse.y>=y-Alte And Mouse.y<=y+Alte)) If (In_uso==0)
Signal (Type F_d_c, S_Kill);
Signal (Type F_s_c, S_Kill);
Signal (Type F_d_i, S_Kill);
Signal (Type F_s_i, S_Kill); F_D_C(id,Tipo);
F_S_C(id,Tipo);
F_D_I(id,Tipo);
F_S_I(id,Tipo); Write (File_Fnt[1],515,360,1,"colore");
Write_int(File_Fnt[0],515,380,1,OffSet Colore);
Write (File_Fnt[1],515,420,1,"colpi");
Write_int(File_Fnt[0],515,440,1,OffSet Colpi); Controllo=1;
In_Uso=1;
Attuale (id,Tipo);End Prex=x;
Prey=y; Repeat
z=40;
x=Mouse.x;
y=Mouse.y;
If (x<Lung+10 ) x=Lung+10 ; End
If (x>290-Lung) x=290-Lung; End
If (y<Alte+10 ) y=Alte+10 ; End
If (y>410-Alte) y=410-Alte; End If (Collision(Type Blocco_Ed) Or Collision(Type Oggetti_Ed) Or Collision(Type Speciale_Ed))
Mouse.Graph=2;
Else
Mouse.Graph=1;
End Frame;
Until (Not Mouse.Left); If (Collision(Type Blocco_Ed) Or Collision(Type Oggetti_Ed) Or Collision(Type Speciale_Ed))
x=Prex;
y=Prey;
Else
Calcolo=(x-10-Lung) / 8;
x=Calcolo * 8 + 10 + Lung;
Calcolo=(y-10-Alte) / 8;
y=Calcolo * 8 + 10 + Alte;
End Mouse.Graph=1;
z=50+Colpi;End If (Mouse.Right And In_uso==1)
Signal(Type F_D_C,S_Kill);
Signal(Type F_S_C,S_Kill);
Signal(Type F_D_I,S_Kill);
Signal(Type F_S_I,S_Kill); Signal(Type Attuale,S_Kill);
Delete_Text(8);
Delete_Text(9);
Delete_Text(10);
Delete_Text(11); In_uso=0;
Controllo=0;
End Switch (Tipo)
Case 1: Colore=Graph-99 ; End
Case 2: Colore=Graph-109; End
Case 3: Colore=Graph-119; End
Case 4: Colore=Graph-129; End
Case 5: Colore=Graph-139; End
End
Colpi =Z-50;Frame; Until (In_uso==1 And key(_del)) Signal(Type Attuale,S_Kill); Controllo=0; Signal(Type F_D_C,S_Kill); Signal(Type F_S_C,S_Kill); Signal(Type F_D_I,S_Kill); Signal(Type F_S_I,S_Kill); Delete_Text(8); Delete_Text(9); Delete_Text(10); Delete_Text(11); End // Freccia destra colore Process F_D_C (Id_Blocco,Byte Tipo) Private Byte Base; Begin File=File_Oggetti; Graph=10; x=550; y=380; Timer=0; Switch (Tipo)
Case 1: Base=100; End
Case 2: Base=110; End
Case 3: Base=120; End
Case 4: Base=130; End
Case 5: Base=140; End
End Loop
If ((Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Graph+=1;
If (Graph==18) Graph=11; End
Frame (300);
Else
Graph=10;
End If (Mouse.Left And Timer>=50 And (Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
If (id_blocco.graph==Base+3)
id_blocco.graph=Base;
Else
id_blocco.graph+=1;
End
Timer=0;
End
If (id_blocco.z-50==0 And id_blocco.z<>40) Id_Blocco.graph=Base+4; EndFrame; End End // Freccia sinistra colore Process F_S_C (Id_Blocco,Byte Tipo) Private Byte Base; Begin File=File_Oggetti; Graph=20; x=450; y=380; Timer=0; Switch (Tipo)
Case 1: Base=100; End
Case 2: Base=110; End
Case 3: Base=120; End
Case 4: Base=130; End
Case 5: Base=140; End
End Loop
If ((Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Graph+=1;
If (Graph==28) Graph=21; End
Frame (300);
Else
Graph=20;
End If (Mouse.Left And Timer>=50 And (Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
If (id_blocco.graph==Base)
id_blocco.graph=Base+3;
Else
id_blocco.graph-=1;
End
Timer=0;
End
If (id_blocco.z-50==0 And id_blocco.z<>40) Id_blocco.graph=Base+4; EndFrame; End End // Freccia destra colpi Process F_D_I (Id_Blocco,Byte Tipo) Private Byte Base; Begin File=File_Oggetti; Graph=10; x=550; y=440; Timer=0; Switch (Tipo)
Case 1: Base=100; End
Case 2: Base=110; End
Case 3: Base=120; End
Case 4: Base=130; End
Case 5: Base=140; End
End Loop
If ((Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Graph+=1;
If (Graph==18) Graph=11; End
Frame (300);
Else
Graph=10;
End If (Mouse.Left And Timer>=50 And (Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
If (id_blocco.z==54)
id_blocco.z=50;
Else
id_blocco.z+=1;
End
Timer=0;
End
If (id_blocco.graph==Base+4 And id_blocco.z-50<>0 And id_blocco.z<>40) Id_blocco.graph=Base; EndFrame; End End // Freccia sinistra colpi Process F_S_I (Id_Blocco,Byte Tipo) Private Byte Base; Begin File=File_Oggetti; Graph=20; x=450; y=440; Timer=0; Switch (Tipo)
Case 1: Base=100; End
Case 2: Base=110; End
Case 3: Base=120; End
Case 4: Base=130; End
Case 5: Base=140; End
End Loop
If ((Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Graph+=1;
If (Graph==28) Graph=21; End
Frame (300);
Else
Graph=20;
End If (Mouse.Left And Timer>=50 And (Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
If (id_blocco.z==50)
id_blocco.z=54;
Else
id_blocco.z-=1;
End
Timer=0;
End
If (id_blocco.graph==Base+4 And id_blocco.z-50<>0 And id_blocco.z<>40) Id_blocco.graph=Base; EndFrame; End End // Contorni oggetti
Process Attuale (Id_Blocco,Byte Tipo)
Private
Byte Base;
Begin
File=File_Oggetti;
Switch (Tipo)
Case 1: Base=105; End
Case 2: Base=115; End
Case 3: Base=125; End
Case 4: Base=135; End
Case 5: Base=145; End
Case 6: Base=170; End
Case 7: Base=175; End
Case 8: Base=180; End
Case 9: Base=185; End
End
Graph=Base;
Loop
x=Id_Blocco.x;
y=Id_Blocco.y;
If (Graph==Base+4)
Graph=Base;
Else
Graph+=1;
End
Frame (300);
End
End// Cancella schermata
Process Cancella();
Begin
File=File_Oggetti;
Graph=70;
x=515;
y=50;
Loop
If (Controllo==0 And (Mouse.x>=x-50 And Mouse.x<=x+50) And (Mouse.y>=y-25 And Mouse.y<=y+25))
Graph+=1;
If (Graph==77) Graph=71; End
Frame (300);
Else
Graph=70;
End If (Controllo==0 And Mouse.Left And (Mouse.x>=x-50 And Mouse.x<=x+50) And (Mouse.y>=y-25 And Mouse.y<=y+25))
Signal (Type Blocco_Ed ,S_Kill);
Signal (Type Oggetti_Ed ,S_Kill);
Signal (Type Speciale_Ed,S_Kill);
Signal (Type Attuale ,S_Kill);
Controllo=0;
End
Frame;
End
End// Blocchi del menu
Process TipoBlocco (x,y,Byte Tipo)
Begin
File=File_Oggetti;
Switch (Tipo)
Case 1: Graph=155; End
Case 2: Graph=156; End
Case 3: Graph=157; End
Case 4: Graph=158; End
Case 5: Graph=159; End
Case 6: Graph=160; End
Case 7: Graph=161; End
Case 8: Graph=162; End
Case 9: Graph=163; End
End Loop
If (Mouse.Left And Controllo==0 And (Mouse.x>=x-25 And Mouse.x<=x+25) And (Mouse.y>=y-25 And Mouse.y<=y+25))
Controllo=2;
MuoviBlocco(x,y,Tipo);
End
Frame;
End
End// Blocchi in movimento Process MuoviBlocco(x,y,Byte Tipo) Private Byte Posx,Posy; Byte Lung,Alte; Begin
File=File_Oggetti;
Switch (Tipo)
Case 1: Graph=155; Lung=20; Alte=20; End
Case 2: Graph=156; Lung=20; Alte=4 ; End
Case 3: Graph=157; Lung=4 ; Alte=20; End
Case 4: Graph=158; Lung=20; Alte=8 ; End
Case 5: Graph=159; Lung=8 ; Alte=20; End
Case 6: Graph=160; Lung=12; Alte=12; End
Case 7: Graph=161; Lung=16; Alte=16; End
Case 8: Graph=162; Lung=4 ; Alte=4 ; End
Case 9: Graph=163; Lung=28; Alte=28; End
End Repeat
x=Mouse.x;
y=Mouse.y;
If (Mouse.Left And (Mouse.x>=10 And Mouse.x<=290-Lung) And (Mouse.y>=10 And Mouse.y<=410-Alte))
If (Not Collision(Type Blocco_Ed) And Not Collision(Type Oggetti_Ed) And Not Collision(Type Speciale_Ed))
Mouse.Graph=1;
Posx=(x-10-Lung) / 8;
Posy=(y-10-Alte) / 8;
Switch (Tipo)
Case 1..5: Blocco_Ed (Posx*8+10+Lung,Posy*8+10+Alte,Tipo); End
Case 6..8: Oggetti_Ed (Posx*8+10+Lung,Posy*8+10+Alte,Tipo); End
Case 9: Speciale_Ed (Posx*8+10+Lung,Posy*8+10+Alte); End
End
End
End If (Collision(Type Blocco_Ed) Or Collision(Type Oggetti_Ed) Or Collision(Type Speciale_Ed))
Mouse.Graph=2;
Else
Mouse.Graph=1;
EndFrame; Until (Mouse.Right); Controllo=0; Mouse.Graph=1; End // Oggetti Process Oggetti_Ed (x,y,Byte Tipo) Private Byte Calcolo; Byte In_Uso; Byte Lung,Alte; Int Prex,Prey; Begin
File=File_Oggetti;
z=100;
Switch (Tipo)
Case 6: Graph=164; Lung=12; Alte=12; End
Case 7: Graph=165; Lung=16; Alte=16; End
Case 8: Graph=166; Lung=4 ; Alte=4 ; End
End In_uso=0;
Repeat
If (Mouse.Left And (Controllo==0 Or In_Uso==1) And (Mouse.x>=x-Lung And Mouse.x<=x+Lung) And (Mouse.y>=y-Alte And Mouse.y<=y+Alte)) If (In_uso==0)
Controllo=1;
In_Uso=1;
Attuale (id,Tipo);
End Prex=x;
Prey=y; Repeat
z=40;
x=Mouse.x;
y=Mouse.y;
If (x<Lung+10 ) x=Lung+10 ; End
If (x>290-Lung) x=290-Lung; End
If (y<Alte+10 ) y=Alte+10 ; End
If (y>410-Alte) y=410-Alte; End If (Collision(Type Blocco_Ed) Or Collision(Type Oggetti_Ed) Or Collision(Type Speciale_Ed))
Mouse.Graph=2;
Else
Mouse.Graph=1;
End Frame;
Until (Not Mouse.Left); If (Collision(Type Blocco_Ed) Or Collision(Type Oggetti_Ed) Or Collision(Type Speciale_Ed))
x=Prex;
y=Prey;
Else
Calcolo=(x-10-Lung) / 8;
x=Calcolo * 8 + 10 + Lung;
Calcolo=(y-10-Alte) / 8;
y=Calcolo * 8 + 10 + Alte;
End Mouse.Graph=1;
z=100;End If (Mouse.Right And In_uso==1)
Signal(Type Attuale,S_Kill);
In_uso=0;
Controllo=0;
EndFrame; Until (In_uso==1 And key(_del)) Signal(Type Attuale,S_Kill); Controllo=0; End // Blocco speciale (Boss) Process Speciale_Ed (x,y) Private Byte Calcolo; Byte In_Uso; Byte Colore; Colpi; Int Prex,Prey; Begin File=File_Oggetti; z=51; Graph=167; In_uso=0;
Repeat
If (Mouse.Left And (Controllo==0 Or In_Uso==1) And (Mouse.x>=x-28 And Mouse.x<=x+28) And (Mouse.y>=y-28 And Mouse.y<=y+28)) If (In_uso==0)
Signal (Type FS_D_C, S_Kill);
Signal (Type FS_S_C, S_Kill); FS_D_C(id,1);
FS_S_C(id,1); FS_D_C(id,2);
FS_S_C(id,2); Write (File_Fnt[1],515,420,1,"colpi");
Write_int(File_Fnt[0],515,440,1,OffSet Colpi); Controllo=1;
In_Uso=1;
Attuale (id,9);
End Prex=x;
Prey=y; Repeat
z=40;
x=Mouse.x;
y=Mouse.y;
If (x<28+10 ) x=28+10 ; End
If (x>290-28) x=290-28; End
If (y<28+10 ) y=28+10 ; End
If (y>410-28) y=410-28; End If (Collision(Type Blocco_Ed) Or Collision(Type Oggetti_Ed) Or Collision(Type Speciale_Ed))
Mouse.Graph=2;
Else
Mouse.Graph=1;
End Frame;
Until (Not Mouse.Left); If (Collision(Type Blocco_Ed) Or Collision(Type Oggetti_Ed) Or Collision(Type Speciale_Ed))
x=Prex;
y=Prey;
Else
Calcolo=(x-10-28) / 8;
x=Calcolo * 8 + 10 + 28;
Calcolo=(y-10-28) / 8;
y=Calcolo * 8 + 10 + 28;
End Mouse.Graph=1;
z=50+Colpi;End If (Mouse.Right And In_uso==1)
Signal(Type FS_D_C,S_Kill);
Signal(Type FS_S_C,S_Kill);
Signal(Type Attuale,S_Kill);
Delete_Text(8);
Delete_Text(9);
In_uso=0;
Controllo=0;
EndColpi=z-50; Frame; Until (In_uso==1 And key(_del)) Signal(Type Attuale,S_Kill); Controllo=0; Signal(Type FS_D_C,S_Kill); Signal(Type FS_S_C,S_Kill); Delete_Text(8); Delete_Text(9); End // Freccia destra colpi
Process FS_D_C (Id_Blocco,Byte Tipo)
Private
Byte Da_Graph;
Begin
File=File_Oggetti;
Switch (Tipo)
Case 1: x=550; y=440; Da_Graph=10; End
Case 2: x=580; y=440; Da_Graph=30; End
End
Timer=0; Loop
If ((Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Graph+=1;
If (Graph==Da_Graph+8) Graph=Da_Graph+1; End
Frame (300);
Else
Graph=Da_Graph;
End If (Mouse.Left And Timer>=50 And (Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Switch (Tipo)
Case 1: id_blocco.z+=1 ; End
Case 2: id_blocco.z+=10; End
End
If (id_blocco.z>=150)
id_blocco.z=51;
End
Timer=0;
End
Frame;
End
End// Freccia sinistra colpi
Process FS_S_C (Id_Blocco,Byte Tipo)
Private
Byte Da_Graph;
Begin
File=File_Oggetti;
Switch (Tipo)
Case 1:x=450; y=440; Da_Graph=20; End
Case 2:x=420; y=440; Da_Graph=40; End
End
Timer=0; Loop
If ((Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Graph+=1;
If (Graph==Da_Graph+8) Graph=Da_Graph+1; End
Frame (300);
Else
Graph=Da_Graph;
End If (Mouse.Left And Timer>=50 And (Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Switch (Tipo)
Case 1: id_blocco.z-=1 ; End
Case 2: id_blocco.z-=10; End
End
If (id_blocco.z<=51)
id_blocco.z=150;
End
Timer=0;
End
Frame;
End
End// Freccia destra livello Process F_Livello_Dest (x,y,Id_Blocco,Byte Tipo) Begin File=File_Oggetti; Timer=0; Loop
Switch (Tipo)
Case 2 :If ((Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Graph+=1;
If (Graph==38) Graph=31; End
Frame (300);
Else
Graph=30;
End
End
Default :If ((Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Graph+=1;
If (Graph==18) Graph=11; End
Frame (300);
Else
Graph=10;
End
End
End If (Mouse.Left And Timer>=50 And (Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Switch (Tipo)
Case 1:If (id_blocco.x>=100)
Id_blocco.x=1;
Else
Id_blocco.x+=1;
End
End
Case 2:If (id_blocco.x>90)
Id_blocco.x=1;
Else
Id_blocco.x+=10;
End
End
Case 3:If (Id_Blocco.y==4)
Id_Blocco.y=1;
Else
Id_Blocco.y+=1;
End
End
Case 4:If (Id_Blocco.z==6)
Id_Blocco.z=1;
Else
Id_Blocco.z+=1;
End
End End
Timer=0;
End
Frame;
End
End// Freccia sinistra livello Process F_Livello_Sini (x,y,Id_Blocco,Byte Tipo) Begin File=File_Oggetti; Timer=0; Loop
Switch (Tipo)
Case 2 :If ((Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Graph+=1;
If (Graph==48) Graph=41; End
Frame (300);
Else
Graph=40;
End
End
Default :If ((Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Graph+=1;
If (Graph==28) Graph=21; End
Frame (300);
Else
Graph=20;
End
End
End If (Mouse.Left And Timer>=50 And (Mouse.x>=x And Mouse.x<=x+30) And (Mouse.y>=y And Mouse.y<=y+30))
Switch (Tipo)
Case 1:If (id_blocco.x<=1)
Id_Blocco.x=100;
Else
Id_blocco.x-=1;
End
End
Case 2:If (id_blocco.x<=10)
Id_Blocco.x=100;
Else
Id_blocco.x-=10;
End
End
Case 3:If (Id_Blocco.y==1);
Id_Blocco.y=4;
Else
Id_Blocco.y-=1;
End
End
Case 4:If (Id_Blocco.z==1);
Id_Blocco.z=6;
Else
Id_Blocco.z-=1;
End
End End
Timer=0;
End
Frame;
End
End// Salva
Process Salva(Id_Principale);
Private
Struct Salvataggio;
Byte Tipo;
Int PosX,PosY;
Byte Colore;
Byte Colpi;
EndFile_Salvato; Id_Blocchi; String Nome_File; String Lettere="ABCD"; Begin
File=File_Oggetti;
Graph=80;
x=515;
y=100;
Loop
If (Controllo==0 And (Mouse.x>=x-50 And Mouse.x<=x+50) And (Mouse.y>=y-25 And Mouse.y<=y+25))
Graph+=1;
If (Graph==87) Graph=81; End
Frame (300);
Else
Graph=80;
End If (Controllo==0 And Mouse.Left And (Mouse.x>=x-50 And Mouse.x<=x+50) And (Mouse.y>=y-25 And Mouse.y<=y+25))
Mouse.Graph=3;
Frame;
Switch (Id_Principale.z)
Case 1: Nome_File="Livelli/Singolo/Lev"; End;
Case 2: Nome_File="Livelli/Doppio/Lev"; End;
Case 3: Nome_File="Livelli/VSTempo/Lev"; End;
Case 4: Nome_File="Livelli/VSLiv/Lev"; End;
Case 5: Nome_File="Livelli/VSVita/Lev"; End;
Case 6: Nome_File="Livelli/Multi/Lev"; End;
End StrCat (Nome_File,Itoa(Id_Principale.x));
StrCat (Nome_File,Lettere[Id_Principale.y-1]);
StrCat (Nome_File,".con"); Salvataggio.Tipo=0;
Id_Blocchi=Get_Id(Type Blocco_Ed);
While (Id_Blocchi)
If (Id_Blocchi.x>640 Or Id_Blocchi.y>480)
Signal (Id_Blocchi,S_Kill);
End
If (Id_Blocchi.z<>50)
Salvataggio.Tipo+=1;
End
Id_Blocchi=Get_Id(Type Blocco_Ed);
End Id_Blocchi=Get_Id(Type Speciale_Ed);
While (Id_Blocchi)
If (Id_Blocchi.x>640 Or Id_Blocchi.y>480)
Signal (Id_Blocchi,S_Kill);
Else
Salvataggio.Tipo+=1;
End
Id_Blocchi=Get_Id(Type Speciale_Ed);
End
If (Salvataggio.Tipo==0)
Messaggio(2);
Else
Salvataggio.Tipo=0;
Id_Blocchi=Get_Id(Type Oggetti_Ed);
While (Id_Blocchi)
If (Id_Blocchi.Graph==164) Salvataggio.Tipo+=1; End
Id_Blocchi=Get_Id(Type Oggetti_Ed);
End If (Salvataggio.Tipo==1)
Messaggio(3);
ElseFile_Salvato=Fopen(Nome_File,"w"); Id_Blocchi=Get_Id(Type Blocco_Ed);
While (Id_Blocchi)
Salvataggio.PosX=Id_Blocchi.x;
Salvataggio.PosY=Id_Blocchi.y;
Switch (Id_Blocchi.Graph)
Case 100..104: Salvataggio.Tipo=1;
Salvataggio.Colore=Id_Blocchi.Graph-99;
Salvataggio.Colpi =Id_Blocchi.z-50;
End
Case 110..114: Salvataggio.Tipo=2;
Salvataggio.Colore=Id_Blocchi.Graph-109;
Salvataggio.Colpi =Id_Blocchi.z-50;
End
Case 120..124: Salvataggio.Tipo=3;
Salvataggio.Colore=Id_Blocchi.Graph-119;
Salvataggio.Colpi =Id_Blocchi.z-50;
End
Case 130..134: Salvataggio.Tipo=4;
Salvataggio.Colore=Id_Blocchi.Graph-129;
Salvataggio.Colpi =Id_Blocchi.z-50;
End
Case 140..144: Salvataggio.Tipo=5;
Salvataggio.Colore=Id_Blocchi.Graph-139;
Salvataggio.Colpi =Id_Blocchi.z-50;
End
End
Fwrite (Offset Salvataggio,SizeOf(Salvataggio),File_Salvato);
Id_Blocchi=get_id(Type Blocco_Ed);
End Id_Blocchi=Get_Id(Type Oggetti_Ed);
While (Id_Blocchi)
Salvataggio.PosX=Id_Blocchi.x;
Salvataggio.PosY=Id_Blocchi.y;
Salvataggio.Colore=0;
Salvataggio.Colpi =0;
Switch (Id_Blocchi.Graph)
Case 164: Salvataggio.Tipo=6; End
Case 165: Salvataggio.Tipo=7; End
Case 166: Salvataggio.Tipo=8; End
End
Fwrite (Offset Salvataggio,SizeOf(Salvataggio),File_Salvato);
Id_Blocchi=get_id(Type Oggetti_Ed);
End Id_Blocchi=Get_Id(Type Speciale_Ed);
While (Id_Blocchi)
Salvataggio.PosX=Id_Blocchi.x;
Salvataggio.PosY=Id_Blocchi.y;
Salvataggio.Tipo=9;
Salvataggio.Colore=0;
Salvataggio.Colpi =Id_Blocchi.z-50;
Fwrite (Offset Salvataggio,SizeOf(Salvataggio),File_Salvato);
Id_Blocchi=get_id(Type Speciale_Ed);
End FClose(File_Salvato);
Messaggio (1);
End
End
Mouse.Graph=1;
End
Frame;
End
End// Carica
Process Carica(Id_Principale);
Private
Struct Salvataggio;
Byte Tipo;
Int PosX,PosY;
Byte Colore;
Byte Colpi;
EndFile_Salvato; Contatore; Id_Blocco; String Nome_File="Livelli\Lev"; String Lettere="ABCD"; Begin
File=File_Oggetti;
Graph=90;
x=515;
y=150;
Loop
If (Controllo==0 And (Mouse.x>=x-50 And Mouse.x<=x+50) And (Mouse.y>=y-25 And Mouse.y<=y+25))
Graph+=1;
If (Graph==97) Graph=91; End
Frame (300);
Else
Graph=90;
End If (Controllo==0 And Mouse.Left And (Mouse.x>=x-50 And Mouse.x<=x+50) And (Mouse.y>=y-25 And Mouse.y<=y+25))
Mouse.Graph=3;
Frame;
Switch (Id_Principale.z)
Case 1: Nome_File="Livelli/Singolo/Lev"; End;
Case 2: Nome_File="Livelli/Doppio/Lev"; End;
Case 3: Nome_File="Livelli/VSTempo/Lev"; End;
Case 4: Nome_File="Livelli/VSLiv/Lev"; End;
Case 5: Nome_File="Livelli/VSVita/Lev"; End;
Case 6: Nome_File="Livelli/Multi/Lev"; End;
End StrCat (Nome_File,Itoa(Id_Principale.x));
StrCat (Nome_File,Lettere[Id_Principale.y-1]);
StrCat (Nome_File,".con"); File_Salvato=Fopen(Nome_File,"r");
If (File_Salvato==0)
Messaggio (5);
Else Signal (Type Blocco_Ed ,S_Kill);
Signal (Type Oggetti_Ed ,S_Kill);
Signal (Type Speciale_Ed,S_Kill);
Controllo=0; For (Contatore=0;Contatore<FileLength(File_Salvato);Contatore+=SizeOf(Salvataggio))
Fread (Offset Salvataggio,SizeOf(Salvataggio),File_Salvato);
Switch (Salvataggio.Tipo)
Case 1..5: Id_Blocco=Blocco_Ed (Salvataggio.PosX,Salvataggio.PosY,Salvataggio.Tipo);
Id_Blocco.Graph+=Salvataggio.Colore-1;
Id_Blocco.Z+=Salvataggio.Colpi-1;
End
Case 6..8: Id_Blocco=Oggetti_Ed (Salvataggio.PosX,Salvataggio.PosY,Salvataggio.Tipo);
End
Case 9 : Id_Blocco=Speciale_Ed (Salvataggio.PosX,Salvataggio.PosY);
Id_Blocco.Z+=Salvataggio.Colpi-1;
End
End
End FClose(File_Salvato);
Messaggio(4);
End
Mouse.Graph=1;
End
Frame;
End
End// Messaggio
Process Messaggio (Byte Tipo);
Begin
z=-300;
File=File_Oggetti;
Switch (Tipo)
Case 1: Graph=190; End
Case 2: Graph=191; End
Case 3: Graph=192; End
Case 4: Graph=193; End
Case 5: Graph=194; End
EndControllo=1; Signal (Type TipoBlocco,S_Freeze); Signal (Type Cancella ,S_Freeze); Signal (Type Salva ,S_Freeze); Signal (Type Carica ,S_Freeze); Signal (Type F_Livello_Dest,S_Freeze); Signal (Type F_Livello_Sini,S_Freeze); Size=0;
x=320;
y=240;
Repeat
If (Size<100) Size+=10; Frame(100); End
Frame;
Until (Mouse.Right Or key(_Esc))Controllo=0; Signal (Type TipoBlocco,S_Wakeup); Signal (Type Cancella ,S_Wakeup); Signal (Type Salva ,S_Wakeup); Signal (Type Carica ,S_Wakeup); Signal (Type F_Livello_Dest,S_Wakeup); Signal (Type F_Livello_Sini,S_Wakeup); End // Sfondo griglia
Process Sfondo_Griglia ();
Begin
File=File_Oggetti;
Graph=2;
x=0;
y=0;
z=200;
Loop
Frame;
End
End// Chiudi Schermata
Process Chiudi();
Begin
File=File_Oggetti;
Graph=50;
x=638;
y=2;
Repeat
If (Controllo==0 And (Mouse.x>=x-20 And Mouse.x<=x) And (Mouse.y>=y And Mouse.y<=y+20))
Graph=51;
Else
Graph=50;
End If (Controllo==0 And Mouse.Left And (Mouse.x>=x-20 And Mouse.x<=x) And (Mouse.y>=y And Mouse.y<=y+20))
Controllo=100;
EndFrame; Until (Controllo==100); Frame; End |
Anno scolastico
2000/2001 |