Mając chwilę czasu poczytałem o Allegro GUI i uznałem, że jest trochę zagmatwane i nie ma sensu się tego uczyć. Menu zrobiłem(jeszcze nie dokończone) w Allegro w sprytny sposób... Otóż dzięki tej bibliotece możemy używać także myszy. Pozycje myszy to: mouse_x,mouse_y; mouse_b- oznacza stan myszy tzn zmienna ta przechowuje stan poszczególnego klikniętego przycisku np. lewy przycisk myszy: 1, prawy 2, obydwa naraz to 3 itd...
W grze posłużyłem się tylko przyciskiem lewym, którym będziemy wybierali poszczególną część menu. Obrazować je będą bitmapy wyświetlane na bitmapie startu gry menu : nowa gra, powrót do gry, pomoc i wyjście.
Samo kliknięcie nic nam nie da bez poznania współrzędnych myszy i współrzędnych np. nowa gra  
jeżeli mamy już te współrzędne posłużymy się funkcją kolizja. Jeżeli nasz kursor znajduje się w obrębie owej bitmapy i klikniemy lewym przyciskiem myszy to aktywujemy "coś".
Standardowy kursor myszy zastąpiłem innym, ładniejszym :)
Oto funkcja, którą wywołuje się w main()
void gmenu()
{
    unscare_mouse();
    blit(spacedestroyermenu,bufor,0,0,0,0,spacedestroyermenu->w,spacedestroyermenu->h);
    draw_sprite(bufor, nowagra, 200,100);
    draw_sprite(bufor, powrotdogry, 200,200);
    draw_sprite(bufor, pomoc, 200,300);
    draw_sprite(bufor, wyjscie, 200,400);
    if  ( kolizja(200,200,powrotdogry->w,powrotdogry->h,mouse_x,mouse_y,kursor->w,kursor->h) ) //powrot do gry
    {
           draw_sprite(bufor, ramka, 191,191); //brązowa ramka, która jest rysowana jeżeli najedziemy myszką na poszczególne pole menu. Taki bajer ;p (aktywowana jest kolizja)
           if (mouse_b==1) // lewy przycisk myszy
           {
                  play_sample(klik, 255,255,1000,0); //dzwiek oddajacy klikniecie
                  gra=1;
           }
    }
    if  ( kolizja(200,100,nowagra->w,nowagra->h,mouse_x,mouse_y,kursor->w,kursor->h) ) // nowa gra
    {
           draw_sprite(bufor, ramka, 191,91);
           if (mouse_b==1)
           {
                  play_sample(klik, 255,255,1000,0);
                  punktacja=0;//nadajemy zmiennym poczatkowe wartosci
                  zycia=100;
                  ammo_bazo=100;
                  ammo_machgun=40;
                  ammo_laser=0;
                  ammo_flame=0;
                  gra=1; //powrot do gry z poczatkowym ustawieniem zmiennych czyli nowa gra :)
           }
    }
    if  ( kolizja(200,300,pomoc->w,pomoc->h,mouse_x,mouse_y,kursor->w,kursor->h) ) //pomoc
    {
           draw_sprite(bufor, ramka, 191,291);
           if (mouse_b==1)
           {
                  play_sample(klik, 255,255,1000,0);
           }
    }
    if  ( kolizja(200,400,powrotdogry->w,powrotdogry->h,mouse_x,mouse_y,kursor->w,kursor->h) ) //wyjscie
    {
           draw_sprite(bufor, ramka, 191,391);
           if (mouse_b==1)
      {
         play_sample(klik, 255,255,1000,0);
                   gra=2; //jeżeli gra=2 to główna pętla gry zostaje zakończona i wychodzimy z gry
           }
    }
show_mouse(bufor);
}
W main wywołujemy ją:
// cos tam
while(gra!=2) 
  {
       gmenu();
      while(gra==1)
      {                                                              
           while( ( speed > 0) && (  zycia>0 && punktacja<992) )
           {
           //kod gry
        }
   blit( bufor, screen, 0,0,0,0, 800,600);   //  w grze wszystko rysujemy na buforze, po pełnym obiegu pętli wyświetlamy na screen
   } 
blit( bufor, screen, 0,0,0,0, 800,600);   //wyświetlamy menu gry
} 
oto screen menu: (tło jest tymczasowe dałem tymczasowe aby nie było szarego ekranu)
narazie działa nowa gra, powrót do gry i wyjście. W porownaniu do wersji demo dodane nowe ruchy wgoga v_hard Oczywiście dodaję cały kod i wszystkie pliki potrzebne do uruchomienia gry(ver.1.06) 

Uuu Seba, powinieneś dostać nagrodę za pisanie bardzo mało wydajnego kodu :P
OdpowiedzUsuń3 zagnieżdżone pętle while :O Czemu nie zrobiłeś w main tak :
while(coś)
{
swith(gra)
{
i np.
pod case 0 : wyświetlanie menu
pod case 1 : wyświetlanie gry
i w case 1 na samym dole zrobić ifa, że jeśli życia <0 to ustawia gra na 0 , i przy następnym obrocie pętli wyświetli menu (jak się nie mylę, to jest ok 60 obrotów pętli na sekundę ? ) co niweluje użycie goto
pozdro ;)