Kolej na obiecany interfejs...
Napewno pamiętacie grę doom, gdzie głowa głównego bohatera po stracie n-% żyć pokrywała sięcoraz bardzierj krwią... Chcę uzyskać podobny efekt, lecz będzie to niestety "kulawe graficznie" ponieważ, nie jestem grafikiem... W grze po stracie kolejnych 10% żyć robocik będzie zamalowywany coraz bardziej kolorem czerwonym....
tak więc na początek deklarujemy sobie 11 bitmap:
BITMAP *Statek_HP100 = NULL;
BITMAP *Statek_HP90 = NULL;
BITMAP *Statek_HP80 = NULL;
BITMAP *Statek_HP70 = NULL;
BITMAP *Statek_HP60 = NULL;
BITMAP *Statek_HP50 = NULL;
BITMAP *Statek_HP40 = NULL;
BITMAP *Statek_HP30 = NULL;
BITMAP *Statek_HP20 = NULL;
BITMAP *Statek_HP10 = NULL;
BITMAP *Statek_HP0 = NULL;
I dla Statek_HP100 bitmapa będzie wyglądała tak:
dla Statek_HP90
*
*
*
i w końcu dla Statek_HP0
W tym celu stworzyłem klasę Cmenu, w której będę umieszczał poszczególne elementy interfejsu gry... Oto ona:
class Cmenu
{
public:
int pozstathp_x, pozstathp_y;
int pozmenu_x, pozmenu_y;
int pos;
void wyswietl_obrazki();
Cmenu::Cmenu()
{
pozmenu_x=0;
pozmenu_y=480;
pozstathp_x=10;
pozstathp_y=515;
pos=0;
}
};
void Cmenu::wyswietl_obrazki()
{
masked_blit( menudolne, bufor,0,0,pozmenu_x,pozmenu_y,menudolne->w, menudolne->h);
textprintf_ex(bufor,font,2,488,makecol(0,200,200),-1,"stanzyc: %d%%",zycia);
masked_blit( Statek_HP100, bufor, 0,0, pozstathp_x,pozstathp_y,Statek_HP100->w, Statek_HP100->h);
if(czas_odt_muz >161)
{
czas_odt_muz=0;
}
if( frame>=40)
{
masked_blit( Statek_HP100, bufor, 0,0,
pozstathp_x,pozstathp_y,Statek_HP100->w,Statek_HP100->h);
if( (zycia > 80) && (zycia<=90) )
{
masked_blit( Statek_HP90,bufor,0,0,
pozstathp_x,pozstathp_y,Statek_HP100->w, Statek_HP100->h);
}
else if( (zycia > 70) && (zycia<=80) )
{
masked_blit( Statek_HP80, bufor, 0,0,
pozstathp_x,pozstathp_y,Statek_HP100->w, Statek_HP100->h);
}
/*
i tak dalej az do zycia <=0
*/
else if (zycia <= 0)
{
masked_blit( Statek_HP0, bufor, 0,0,
pozstathp_x,pozstathp_y,Statek_HP100->w, Statek_HP100->h);
}
}
}
W funkcji wyswietl_obrazki() chodzi o to aby od frame=0 do frame=40 wyswietlało nie zamalowanego robocika, a od frame=41 do frame=80 robocika z zamalowana czescia na czerwony kolor. (Niby miał to wyjść efekt popsutej poszczególnej części ale niestety nie mam talentu i wyszło jak wyszło...) Efekt jest taki: jesli mamy mniej niz 91% zyc czerwone czesci robocika zaczynaja nam migac.
w konstruktorze podałem współrzędne elementów interfejsu gry. Żeby było jasne menu_dolne ma wymiary 800*120 i w konstruktorze jego pozycja Y to pozmenu_y=480, bo Nasza gra ma rozdzielczość 600... a menu_dolne wygląda tak:
różowy kolor w bitmapie oznacza, że w grze będzie niewidoczny...
Skoro napisałem o deklarowaniu bitmap to napiszę jak wczytac taka bitmape do programu, a także o tym samym tylko dla dźwięku...
dla Statek_HP100:
podajemy nazwe wczesniej zadlklarowana czyli Statek_HP100 i za pomocą tej instrukcji w cudzyslowie "" podajemy ścieżkę do pliku
Statek_HP100=load_bmp("BMP/Statek_HP/Statek_HP100.bmp",default_palette);
musimy także pamiętać aby na końcu programu zwolnić używaną pamięć przez bitmapę instrukcją:
destroy_bitmap(Statek_HP100);
Warto w programie dodać taką instrukcję, uchroni nas przed jakimś poważnym błędem, a nawet zawieszeniem systemu. Stanie siętak jeśli po uruchomieniu programu zabraknie takiego pliku o tej nazwie we wskazanym przez Nas katalogu :
if (!Statek_HP100)
{
set_gfx_mode(GFX_TEXT,0,0,0,0);
allegro_message("brak pliku .bmp");
allegro_exit();
return 0;
}
i to by było na tyle. Teraz kolej na dźwięk deklarujemy go w ten sposob:
SAMPLE *dzwiek = NULL;
definiujemy w podobny sposób jak bitmapy podając ścieżkę:
dzwiek = load_sample("wybuch.wav");
I teraz musimy zatrzymać ten dźwięk instrukcją:
stop_sample(dzwiek);
i zwolnić z pamięci:
destroy_sample(dzwiek);
i analogicznie ja kw bitmapach warto dodać instrukcję:
if (!dzwiek)
{
set_gfx_mode(GFX_TEXT,0,0,0,0);
allegro_message("brak pliku .wav");
allegro_exit();
return 0;
}
Aha w klasie Cmenu są jeszcze wyświetlane życia za pomocą funkcji:
textprintf_ex(bufor,font,2,490,makecol(0,200,200),-1,"stan zyc: %d%%", zycia);
1-arg jest to gdzie wyświetlamy ten napis czylu u nas w buforze
2- czcionka
3 i 4 współrzędne
makecol(0,200,200) ustalamy kolor w systemie RGB
i nasz tekst: "stan zyc: %d%%", gdzie %d używamy z C :p i %% aby wyświetlić % (ponieważ % jest znakiem specjalnym i żeby go wyświetlićmusimy go powtórzyć)
-i na koniec zmienna integer u nas zycia;
To by było na tyle. W porównaniu do wersji 1.00 zrezygnowałem z nieefektownego elementu wybuchu, w jakiejś wersji dopracuję i dodam ponownie :). Do pobrania kod wraz z plikami potrzebnymi do uruchomienia gry ver.1.01.
Jeżeli macie pytania, propozycje to piszcie w komentarzach, napewno odpowiem :)
Gra na tym etapie wygląda następująco:
Brak komentarzy:
Prześlij komentarz