00001 #include "Deklaracje.h"
00002 #include "Gra.h"
00003 #include <allegro5/allegro_primitives.h>
00004 #include <allegro5/allegro.h>
00005 #include <allegro5/allegro_image.h>
00006
00007 #include <allegro5/allegro_font.h>
00008 #include <allegro5/allegro_ttf.h>
00009 #define XEkranu 800
00010 #define YEkranu 555
00011 class Interfejs
00012 {
00013 private:
00014 enum STANBMP {BEZHOVERA=0,NORMALNY,HOVER};
00015 struct ELEMENT_UI
00016 {
00017 ALLEGRO_BITMAP * bmp;
00018 ALLEGRO_BITMAP * hoverBmp;
00019 STANBMP stan;
00020 int LGx;
00021 int LGy;
00022 int sizeX;
00023 int sizeY;
00024 STAN kiedyWyswietlana;
00025 void (Interfejs::*funkcja)();
00026 void (Interfejs::*funkcjaStanu)(int, int);
00027
00028 bool_ * wyswietlaj;
00029
00030 bool_ Wyswietlaj()
00031 {
00032 if(wyswietlaj!=NULL)
00033 return *wyswietlaj;
00034 else return true;
00035 }
00036
00037 ELEMENT_UI()
00038 {
00039 ELEMENT_UI(NULL,NULL);
00040 };
00041 ELEMENT_UI(ALLEGRO_BITMAP * bmp, ALLEGRO_BITMAP * hbmp=NULL,STAN kiedyWyswietlana=GRA, void (Interfejs::*foo)() =NULL, void (Interfejs::*bar)(int, int) =NULL, int LGx=-1, int LGy=-1, bool_ * wyswietlaj=NULL)
00042 {
00043 this->wyswietlaj=wyswietlaj;
00044 this->LGx=LGx;
00045 this->LGy=LGy;
00046 this->bmp=bmp;
00047 hoverBmp=hbmp;
00048 sizeX=al_get_bitmap_width(bmp);
00049 sizeY=al_get_bitmap_height(bmp);
00050 if(hbmp==NULL)
00051 stan=BEZHOVERA;
00052 else
00053 stan=NORMALNY;
00054 this->kiedyWyswietlana=kiedyWyswietlana;
00055 funkcja=foo;
00056 funkcjaStanu=bar;
00057 };
00058 };
00060 ALLEGRO_BITMAP * przyciskNowaGra;
00061 ALLEGRO_FONT* czcionka;
00062
00063 bool_ turaGracza1;
00064 bool_ turaGracza2;
00065
00066 int liczbaPionow1;
00067 int liczbaPionow2;
00068
00069 int rozmiarPlanszy;
00070 int rozmiarX;
00071 int rozmiarY;
00072 bool_ ustawienie;
00073 TURA rozpoczyna;
00074 int glebokosc;
00078 STAN stanGry;
00082 TYP typGry;
00083
00084 int algorytm;
00088 WSPOLRZEDNE_EKRANOWE mysz;
00092 bool_ LPM;
00093
00097 bool_ PPM;
00098
00102 void PobierzMysz();
00103
00104 void ObsluzMysz();
00105
00109
00110 bool_ ZarzadzajTura();
00111
00116 TURA SprawdzZwyciestwo();
00117
00121 Gra* gra;
00122
00123 std::vector<ELEMENT_UI> bitmapy;
00124
00125 void WyswietlNapis(ELEMENT_UI * bmp, int y, int x=-1);
00126
00127
00128
00129
00130
00131 void UstalAktualnegoGracza()
00132 {
00133
00134 turaGracza1= gra->AktualnyGracz()->Id()==GRACZ_1?false:true;
00135 turaGracza2= gra->AktualnyGracz()->Id()==GRACZ_1?true:false;
00136 };
00137
00138
00139 void WyswietlKolejnegoGracza()
00140 {
00141
00142 turaGracza1= gra->AktualnyGracz()->Id()==GRACZ_1?true:false;
00143 turaGracza2= gra->AktualnyGracz()->Id()==GRACZ_1?false:true;
00144 };
00145
00146 void Zakoncz(){stanGry=KONIEC;};
00147 void Pomoc(){stanGry=POMOC;};
00148 void NowaGra(){stanGry=MENUGRA;};
00149 void TrybShift(){if(typGry==HvH)
00150 typGry=HvC; else if(typGry==HvC) typGry=CvC; else if(typGry==CvC) typGry=CvH; else if(typGry==CvH) typGry=HvH; };
00151 void TrybWypisz(int x, int y){
00152 char * tekst=NULL;
00153 switch(typGry)
00154 {
00155 case HvH:tekst="Czlowiek vs Czlowiek"; break;
00156 case HvC:tekst="Czlowiek (niebieski pion) vs Komputer"; break;
00157 case CvC:tekst="Komputer vs Komputer"; break;
00158 case CvH:tekst="Czlowiek (zielony pion) vs Komputer"; break;
00159 }
00160
00161 al_draw_text(czcionka,x,y,0,tekst);
00162 };
00163 void AlgorytmShift(){algorytm++; if (algorytm==3) algorytm=0;};
00164 void AlgorytmWypisz(int x, int y){
00165 char * tekst=NULL;
00166 switch(algorytm)
00167 {
00168 case 0:tekst="NegaMax"; break;
00169 case 1:tekst="Alfa - Beta"; break;
00170 case 2:tekst="Alfa - Beta + Tablica Historii"; break;
00171 }
00172
00173 al_draw_text(czcionka,x,y,0,tekst);
00174
00175 };
00176 void UstawienieShift(){ustawienie=ustawienie?false:true;};
00177 void UstawienieWypisz(int x, int y){
00178
00179 al_draw_text(czcionka,x,y,0,ustawienie?"manualne":"domyslne");
00180
00181 };
00182
00183 void RozpoczynaShift(){rozpoczyna=(TURA)-rozpoczyna;};
00184 void RozpoczynaWypisz(int x, int y){
00185
00186 al_draw_text(czcionka,x,y,0,rozpoczyna==GRACZ_1?"Niebieski":"Zielony");
00187
00188 };
00189
00190 void PoziomShift(){if(LPM) glebokosc++; if(PPM&&glebokosc>1) glebokosc--;};
00191 void PoziomWypisz(int x, int y){
00192 char * buf=new char[5];
00193 al_draw_text(czcionka,x,y,0,_itoa(glebokosc,buf,10)); };
00194
00195 void RozmiarShift(){if(LPM) rozmiarPlanszy++; if(PPM&&rozmiarPlanszy>3) rozmiarPlanszy--;};
00196
00197 void Podpowiedz(){gra->plansza->GenerujPodpowiedzi(gra->AktualnyGracz()->Id());gra->plansza->podpowiadaj=gra->plansza->podpowiadaj?false:true;};
00198
00199 void RozmiarWypisz(int x, int y){
00200 char * buf=new char[5];
00201 al_draw_text(czcionka,x,y,0,_itoa(rozmiarPlanszy,buf,10)); };
00202
00203 void ResetGry()
00204 {
00205 delete gra;
00206 stanGry=GRA;
00207 gra=new Gra(&stanGry,&typGry,rozmiarPlanszy,glebokosc,rozpoczyna,algorytm);
00208 turaGracza1= gra->AktualnyGracz()->Id()==GRACZ_1?true:false;
00209 turaGracza2= gra->AktualnyGracz()->Id()==GRACZ_1?false:true;
00210
00211 al_clear_to_color(al_map_rgb(4,2,4));
00212 al_flip_display();
00213 };
00214
00215 void ResetUstaw()
00216 {
00217
00218 liczbaPionow1=0;
00219 liczbaPionow2=0;
00220 delete gra;
00221 stanGry=GRA;
00222 gra=new Gra(&stanGry,&typGry,rozmiarPlanszy,glebokosc,rozpoczyna,algorytm,false);
00223 turaGracza1= gra->AktualnyGracz()->Id()==GRACZ_1?true:false;
00224 turaGracza2= gra->AktualnyGracz()->Id()==GRACZ_1?false:true;
00225 stanGry=USTAWIANIE;
00226 al_clear_to_color(al_map_rgb(4,2,4));
00227 al_flip_display();
00228 }
00229 public:
00230 Interfejs();
00231 ~Interfejs();
00232
00233
00234
00238 void WyswietlMenu();
00239
00243 void Start();
00244
00245
00246
00247 };