#include "allegro.h"
BITMAP *buf, *sprite ;
PALETTE colori;// l’inclusione delle librerie di allegro e con la definizione
//della variabile delle palette.
void doppiobuffering(){
class Video{ //dichiarazione di una classe..
//una classe è formata da un costruttore .. nome()
//da un distruttore ~nome()
//e poi da due metodi
public:
Video(){
allegro_init();
install_keyboard();
};
//alla creazione dell’oggetto di tipo Video, vengono chiamate le procedure
//d’inizializzazione di allegro e quelle per l’installazione della tastiera.
~Video(){
destroy_bitmap(buf);
}//Il distruttore di Video permette il recupero della memoria attraverso la
//funzione destroy_bitmap(buf) applicata al buffer.
void Display(int Disp,int n,int m){
set_color_depth(32);
set_palette(colori);
set_gfx_mode(GFX_AUTODETECT, n, m, 0, 0);
buf = create_bitmap(n, m);
clear(buf);
}//Il metodo Display di Video fa si che un oggetto di questo tipo, attraverso
//tale metodo sia in grado di settare la profondità del colore e la risoluzione
// assegnando i valori disp (per la profondità del colore) a
//set_color_depth(disp), settando le palette ed assegnando i valori n ed m a
//set_gfx_mode(GFX_AUTODETECT, n, m, 0, 0), ed al range di creazione del buffer
//con buf = create_bitmap(n, m) che viene pulito con clear (buf).
void DB(int n,int m){
vsync();
blit(buf, screen, 0, 0, 0, 0, n, m);
clear(buf);
}//Il metodo DB non fa altro che attuare il doppio buffering di cui conosciamo
//bene il funzionamento.
};// compito della classe:
//gestire le operazioni di messa a video delle immagini.
//la classe è formata da, ha un costruttore, un distruttore e due metodi,
//Display e DB che vedremo poi nello specifico.
class Giocatore{ //dichiarazione di una classe
int x,y; //membri privati
public:
Giocatore(){
sprite = load_bmp("player.bmp",colori);
x=10; y=30;
}//Il costruttore di Giocatore fa si che un oggetto di questo tipo sia in grado
//al nascere di caricare l’immagine bitmap dello sprite e di definire le sue
//coordinate iniziali.
~Giocatore(){
destroy_bitmap(sprite);
} //distrugge la memoria utilizzata
void Muovi(){
if (key[KEY_LEFT])x-=2;if(x<=0)x=0;
if (key[KEY_RIGHT])x+=2;if(x>=266)x=266;
if (key[KEY_UP])y-=2;if(y<=0)y=0;
if (key[KEY_DOWN])y+=2;if(y>=138)y=138;
}
int putx(){
return x;
}
int puty(){
return y;
}
void vedi(){
draw_sprite(buf, sprite, putx(), puty());
}//richiamare la procedura per il disegno dello sprite a schermo.
//I metodi Put x ed y (che sono metodi pubblici) servono ad accedere ai
//membri x ed y (privati e quindi inaccessibili dall’esterno se non
//attraverso dei metodi appripriati) come una buona programmazione OO
//richiede.
//Compito della classe:
//gestire le operazioni che riguardano il nostro sprite, che per adesso ha
//un’unica funzione che è quella di comparire a video.
//Nel main andremo a dichiarare due oggetti, uno per ogni classe implementata.
//Quindi l’oggetto Game gestisce i problemi generali di messa a video delle
//immagini e l’oggetto Nave rappresenta il nostro sprite.
};
}
int main()
{
Video.Game;
Giocatore.Nave;
set_color_depth(32);//aggiorniamo le palette
set_palette(colori);
//Game ha un metodo Display che permette di settare la risoluzione video,
//nel nostro caso a 320 per 200 e di dare una profondità di colore a 32 bit.
Game.Display(32,320,200);
//Con un ciclo while che termina quando viene premuto il tasto ESC l’oggetto
// Game chiama il metodo DB che implementa il doppio buffering che noi già
//conosciamo. L’oggetto nave compare a video attraverso il metodo Vedi.
while (!key[KEY_ESC]) {
Game.DB(320,200);
Nave.Vedi();
}
}
END_OF_MAIN ();
mi dice che non ho dichiarato video game giocatore nave...
ma non penso di doverle dichiarare.. potete aiutarmi?