Są to moje początki z allegro i tworzę grę typu: space defender, lecz napotkałem kilka problemów. Gra się kompiluje, mogę niszczyć obiekty, lecz podczas gdy statek powinien stracić życie oraz dostać punkty za zniszczenie, to niestety nic się nie dzieje. Program oparty jest na klasach, mam takiego maina(jeżeli zajdzie potrzeba, to udostępnię pozostałe pliki klas.):
#include<allegro5\allegro.h>
#include<allegro5\allegro_primitives.h>
#include<allegro5\allegro_ttf.h>
#include<allegro5\allegro_primitives.h>
#include "kometa.h"
#include "statek.h"
#include "pocisk.h"
const int NUM_BULLETS = 5;
const int NUM_COMETS = 10;
enum KEYS{UP, DOWN, LEFT, RIGHT, SPACE};
bool keys[5] = {false, false, false, false, false};
int main()
{
//primitive variable
bool done = false;
bool redraw = true;
const int FPS = 60;
bool isGameOver = false;
//zmienne obiektowe
statek ship;
pocisk bullets[NUM_BULLETS];
kometa comets[NUM_COMETS];
//zmienne allegro
ALLEGRO_DISPLAY *display = NULL;
ALLEGRO_EVENT_QUEUE *event_queue = NULL;
ALLEGRO_TIMER *timer = NULL;
ALLEGRO_FONT *font18 = NULL;
if(!al_init()) //inicjalizacja allegro
{
return -1;
}
display = al_create_display(WIDTH, HEIGHT); //stworzenie objektu wyswiettlającego
if(!display) //testowanie obiektu wyświetlającego
{
return -1;
}
al_init_primitives_addon();
al_install_keyboard();
al_init_font_addon();
al_init_ttf_addon();
event_queue = al_create_event_queue();
timer = al_create_timer(1.0 / FPS);
font18 = al_load_font("arial.ttf", 18, 0);
srand(time(NULL));
al_register_event_source(event_queue, al_get_keyboard_event_source());
al_register_event_source(event_queue, al_get_timer_event_source(timer));
al_register_event_source(event_queue, al_get_display_event_source(display));
al_start_timer(timer);
int j = 0;//zmienna dla odpalania pocisku
int akt_zycie = ship.zwroc_lives();
int zycia;
while (!done)
{
ALLEGRO_EVENT ev;
al_wait_for_event(event_queue, &ev);
if (ev.type == ALLEGRO_EVENT_TIMER)
{
redraw = true;
if (keys[UP])
{
ship.moveShipUP();
}
if (keys[DOWN])
{
ship.moveShipDOWN();
}
if (keys[LEFT])
{
ship.moveShipLEFT();
}
if (keys[RIGHT])
{
ship.moveShipRIGHT();
}
if (!isGameOver)
{
bullets->updatePocisk(bullets, NUM_BULLETS);
comets->startKomety(comets, NUM_COMETS);
comets->updateKomety(comets, NUM_COMETS);
bullets->kolizjaPocisku(bullets, NUM_BULLETS, comets, NUM_COMETS, ship);
comets->kolizjaKomety(comets, NUM_COMETS, ship);
zycia = ship.zwroc_lives();
if (zycia <=0)
{
isGameOver = true;
}
}
}
else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
{
done = true;
}
else if (ev.type == ALLEGRO_EVENT_KEY_DOWN)
{
switch (ev.keyboard.keycode)
{
case ALLEGRO_KEY_ESCAPE:
done = true;
break;
case ALLEGRO_KEY_UP:
keys[UP] = true;
break;
case ALLEGRO_KEY_DOWN:
keys[DOWN] = true;
break;
case ALLEGRO_KEY_LEFT:
keys[LEFT] = true;
break;
case ALLEGRO_KEY_RIGHT:
keys[RIGHT] = true;
break;
case ALLEGRO_KEY_SPACE:
keys[SPACE] = true;
bullets[j].odpalPocisk(bullets, NUM_BULLETS, ship);
j++;
if (j == 5)
{
j = 0;
}
break;
}
}
else if (ev.type == ALLEGRO_EVENT_KEY_UP)
{
switch (ev.keyboard.keycode)
{
case ALLEGRO_KEY_ESCAPE:
done = true;
break;
case ALLEGRO_KEY_UP:
keys[UP] = false;
break;
case ALLEGRO_KEY_DOWN:
keys[DOWN] = false;
break;
case ALLEGRO_KEY_LEFT:
keys[LEFT] = false;
break;
case ALLEGRO_KEY_RIGHT:
keys[RIGHT] = false;
break;
case ALLEGRO_KEY_SPACE:
keys[SPACE] = false;
break;
}
}
if (redraw && al_is_event_queue_empty(event_queue))
{
redraw = false;
if (!isGameOver)
{
ship.drawShip();
bullets->rysujPocisk(bullets, NUM_BULLETS);
comets->rysujKomete(comets, NUM_COMETS);
al_draw_textf(font18, al_map_rgb(255, 0, 255), 5, 5, 0, "Player has %i lives. Player destroyed %i objects", ship.zwroc_lives(), ship.zwroc_wynik());
}
else
{
}
al_flip_display();
al_clear_to_color(al_map_rgb(0, 0, 0));
}
}
al_destroy_event_queue(event_queue); // znieszczenie kolejki
al_destroy_timer(timer); // znieszczenie timera
al_destroy_display(display); //znieszczenie obiektu wyświetlającegoa
return 0;
}
Może ktoś wie dlaczego nie nalicza mi tych punktów, oraz nie odejmuje żyć.