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 };