/** * Pisze na wyjście diagnostyczne komunikat o błędzie @n i przerywa wykonanie * programu. */ void blad(int n) { fprintf(stderr, "%s: %s\n", STR_BLAD, komunikat(n)); exit(EXIT_FAILURE); }
void Gra::zagrajmy(){ pocisk* pocisk_biezacy; bool czujka; ///////////////////////////////////////////////////////////////// /////////////// model g³ównej pêtli programu /////////////// /////////////////////////////////////////////////////////////// al_get_keyboard_state(&obraz.key_state); int i; while((czyja_wygrana()==0) && !(al_key_down(&obraz.key_state, ALLEGRO_KEY_ESCAPE ))) { al_get_keyboard_state(&obraz.key_state); //przemieszczenie pocisków for (i = 0; i < pociski_na_planszy_A.ile(); i++) { pocisk_biezacy=pociski_na_planszy_A[i+1]; pocisk_biezacy->leci_pocisk(); } for (i = 0; i < pociski_na_planszy_B.ile(); i++) { pocisk_biezacy=pociski_na_planszy_B[i+1]; pocisk_biezacy->leci_pocisk(); } //przemieszczenie samolotów obraz.timer(); gracz_A->wybierz_sobie_klawisz(); if (statek->strzelam==true){ pociski_na_planszy_A+=new pocisk(*statek, obraz.pocisk); (statek->strzelam)=false; } gracz_B->wybierz_sobie_klawisz(); if (statek2->strzelam==true){ pociski_na_planszy_B+=new pocisk(*statek2, obraz.pocisk); (statek2->strzelam)=false; } //obs³uga bajerów wszelakich losuj_bonusy(); //<JERZYK>: if (meteorycik!=NULL) { if (meteorycik->czy_poza_plansza==true) { delete meteorycik; meteorycik=NULL; } } ////</JERZYK> if (meteorycik!=NULL){ meteorycik->akcja(); } statek->akcja(); statek2->akcja(); ksiezyc->akcja(); //kolizje if (fabs(statek->zwroc_pozycje_x()-ksiezyc->zwroc_pozycje_x())<=25 && fabs(statek->zwroc_pozycje_y()-ksiezyc->zwroc_pozycje_y())<=25) statek->zycie=0; if (fabs(statek2->zwroc_pozycje_x()-ksiezyc->zwroc_pozycje_x())<=25 && fabs(statek2->zwroc_pozycje_y()-ksiezyc->zwroc_pozycje_y())<=25) statek2->zycie=0; if (fabs(statek->zwroc_pozycje_x()-statek2->zwroc_pozycje_x())<=24 && fabs(statek->zwroc_pozycje_y()-statek2->zwroc_pozycje_y())<=24) { statek->zycie=0; statek2->zycie=0; } if (czy_paczka==true) { if (fabs(statek->zwroc_pozycje_x()-paczka->zwroc_pozycje_x())<=25 && fabs(statek->zwroc_pozycje_y()-paczka->zwroc_pozycje_y())<=25) { if (statek->zycie<max_zycie-2) statek->zycie+=2; else statek->zycie=max_zycie; delete paczka; czy_paczka=false; } if (fabs(statek2->zwroc_pozycje_x()-paczka->zwroc_pozycje_x())<=25 && fabs(statek2->zwroc_pozycje_y()-paczka->zwroc_pozycje_y())<=25) { if (statek2->zycie<max_zycie-2) statek2->zycie+=2; else statek2->zycie=max_zycie; delete paczka; czy_paczka=false; } } if (meteorycik!=NULL) { if (fabs(statek->zwroc_pozycje_x()-meteorycik->zwroc_pozycje_x())<=25 && fabs(statek->zwroc_pozycje_y()-meteorycik->zwroc_pozycje_y())<=25) statek->zycie=0; if (fabs(statek2->zwroc_pozycje_x()-meteorycik->zwroc_pozycje_x())<=25 && fabs(statek2->zwroc_pozycje_y()-meteorycik->zwroc_pozycje_y())<=25) statek2->zycie=0; if (czy_paczka==true) { if (fabs(meteorycik->zwroc_pozycje_x()-paczka->zwroc_pozycje_x())<=25 && fabs(meteorycik->zwroc_pozycje_y()-paczka->zwroc_pozycje_y())<=25) { delete paczka; czy_paczka=false; } } if (fabs(meteorycik->zwroc_pozycje_x()-ksiezyc->zwroc_pozycje_x())<=25 && fabs(meteorycik->zwroc_pozycje_y()-ksiezyc->zwroc_pozycje_y())<=25) { delete meteorycik; meteorycik=NULL; } } //wyœwietlanie obraz.wyswietl_mape(100/max_zycie*statek2->zycie,100/max_zycie*statek->zycie); //wyœwietlanie pocisków + sprawdzanie czy trafi³y for (int i = 0; i < pociski_na_planszy_A.ile(); i++) { obraz.wyswietl(*pociski_na_planszy_A[i+1]); pociski_na_planszy_A[i+1]->czy_trafil(*statek2, czujka); if (czujka==true) pociski_na_planszy_A-=(i+1); else if(1==pociski_na_planszy_A[i+1]->czy_poza_plansza()) pociski_na_planszy_A-=(i+1); } for (int i = 0; i < pociski_na_planszy_A.ile(); i++) { obraz.wyswietl(*pociski_na_planszy_A[i+1]); pociski_na_planszy_A[i+1]->czy_trafil(*ksiezyc, czujka); if (czujka==true) pociski_na_planszy_A-=(i+1); else if(1==pociski_na_planszy_A[i+1]->czy_poza_plansza()) pociski_na_planszy_A-=(i+1); } for (int i = 0; i < pociski_na_planszy_B.ile(); i++) { obraz.wyswietl(*pociski_na_planszy_B[i+1]); pociski_na_planszy_B[i+1]->czy_trafil(*statek, czujka); if (czujka==true) pociski_na_planszy_B-=(i+1); else if(1==pociski_na_planszy_B[i+1]->czy_poza_plansza()) pociski_na_planszy_B-=(i+1); } for (int i = 0; i < pociski_na_planszy_B.ile(); i++) { obraz.wyswietl(*pociski_na_planszy_B[i+1]); pociski_na_planszy_B[i+1]->czy_trafil(*ksiezyc, czujka); if (czujka==true) pociski_na_planszy_B-=(i+1); else if(1==pociski_na_planszy_B[i+1]->czy_poza_plansza()) pociski_na_planszy_B-=(i+1); } obraz.wyswietl(*statek); obraz.wyswietl(*statek2); obraz.wyswietl(*ksiezyc); if (czy_paczka==true) obraz.wyswietl(*paczka); if (meteorycik!=NULL) obraz.wyswietl(*meteorycik); al_flip_display(); } komunikat(); }