void WarcabyGUI::inicjuj() { if (!m_zainicjowano) { zwolnijZasoby(); SDL_Init(SDL_INIT_EVERYTHING); TTF_Init(); srand(time(NULL)); typGracza2(Warcaby::TYP_GRACZA::KOMPUTER); poziomKomputera(POZIOM_KOMPUTERA::SREDNI); m_zainicjowano = true; m_teksturaDrewna = SDL_LoadBMP(m_sciezkaTeksturaDrewna.c_str()); m_pionekBialy = SDL_LoadBMP(m_sciezkaPionekBialy.c_str()); m_pionekCzarny = SDL_LoadBMP(m_sciezkaPionekCzarny.c_str()); m_czcionka = TTF_OpenFont(m_sciezkaCzcionka.c_str(), 0.3 * (m_wysokoscOkna - 1.4 * m_wysokoscOkna / plansza().rozmiar()) / plansza().rozmiar()); m_damkaBiala = SDL_LoadBMP(m_sciezkaDamkaBiala.c_str()); m_damkaCzarna = SDL_LoadBMP(m_sciezkaDamkaCzarna.c_str()); m_zaznaczenie = SDL_LoadBMP(m_sciezkaZaznaczenie.c_str()); Uint32 kolor = SDL_MapRGB(m_zaznaczenie->format,0,0,0); SDL_SetColorKey(m_zaznaczenie,SDL_SRCCOLORKEY,kolor); m_przelacznik = SDL_LoadBMP(m_sciezkaPrzelacznik.c_str()); SDL_SetColorKey(m_przelacznik,SDL_SRCCOLORKEY,kolor); } }
void WarcabyGUI::przetworzKlikniecieOpcji(SDL_Event& zdarzenie) { const unsigned int rozmiarPlanszy = plansza().rozmiar(), rozmiarPola = (m_wysokoscOkna - 1.4 * m_wysokoscOkna / rozmiarPlanszy) / rozmiarPlanszy, szerokoscRamki = 0.7 * m_wysokoscOkna / rozmiarPlanszy; unsigned int x = zdarzenie.button.x, y = zdarzenie.button.y, xPrawegoBoku = rozmiarPola * rozmiarPlanszy + szerokoscRamki, rozmiarCzcionki = 0.3 * (m_wysokoscOkna - 1.4 * m_wysokoscOkna / plansza().rozmiar()) / plansza().rozmiar(); if (x > xPrawegoBoku) { if (y > 3.5 * szerokoscRamki && y < 3.5 * szerokoscRamki + rozmiarCzcionki) poziomKomputera(POZIOM_KOMPUTERA::LATWY); else if (y > 4 * szerokoscRamki && y < 4 * szerokoscRamki + rozmiarCzcionki) poziomKomputera(POZIOM_KOMPUTERA::SREDNI); else if (y > 4.5 * szerokoscRamki && y < 4.5 * szerokoscRamki + rozmiarCzcionki) poziomKomputera(POZIOM_KOMPUTERA::TRUDNY); else if (y > wysokoscOkna() - 4 * szerokoscRamki && y < wysokoscOkna() - 4 * szerokoscRamki + rozmiarCzcionki) typGracza2(TYP_GRACZA::KOMPUTER); else if (y > wysokoscOkna() - 3.5 * szerokoscRamki && y < wysokoscOkna() - 3.5 * szerokoscRamki + rozmiarCzcionki) typGracza2(TYP_GRACZA::CZLOWIEK); } }
void menu() { int s = enter; if (!s) menuDraw(); if(s) { if (!xs) plansza(); if (xs) opcjeDraw(); } }
bool WarcabyGUI::poprawnieWybranaWspolrzedna(const Wspolrzedna& wsp) const { PlanszaWarcaby kopiaPlanszy = plansza(); if (m_zaznaczonePola.size() > 0) { if (m_zaznaczonePola.size() > 1) { kopiaPlanszy.wykonajRuch(m_zaznaczonePola); return kopiaPlanszy.czyPoprawnyRuchBicia(m_zaznaczonePola.back(),wsp); } else return kopiaPlanszy.czyRuchMozliwy(m_zaznaczonePola.back(),wsp); } else { return (plansza()(wsp.wierszLiczba() - 1,wsp.kolumna() - 1).czyBiale() && czyjRuch() == Warcaby::KOLOR::BIALY) || (plansza()(wsp.wierszLiczba() - 1,wsp.kolumna() - 1).czyCzarne() && czyjRuch() == Warcaby::KOLOR::CZARNY); } }
bool WarcabyGUI::pobierzWspolrzedna(Wspolrzedna& wsp, unsigned int x, unsigned int y) { const unsigned int rozmiarPlanszy = plansza().rozmiar(), rozmiarPola = (m_wysokoscOkna - 1.4 * m_wysokoscOkna / rozmiarPlanszy) / rozmiarPlanszy, szerokoscRamki = 0.7 * m_wysokoscOkna / rozmiarPlanszy; if (x < szerokoscRamki || y < szerokoscRamki) return false; x -= szerokoscRamki; y -= szerokoscRamki; x /= rozmiarPola; y /= rozmiarPola; if (x > rozmiarPlanszy - 1 || y > rozmiarPlanszy - 1) return false; wsp.wierszLiczba(y + 1); wsp.kolumna(x + 1); return true; }
void WarcabyGUI::rysujStatystyki() { const unsigned int szerokoscRamki = 0.7 * m_wysokoscOkna / plansza().rozmiar(), rozmiarPlanszy = plansza().rozmiar(), rozmiarPola = (m_wysokoscOkna - 1.4 * m_wysokoscOkna / rozmiarPlanszy) / rozmiarPlanszy; std::ostringstream oss; oss << "Pionkow: " << plansza().iloscPionkowCzarnych(); SDL_Color kolorCzcionki = { 255, 255, 255 }; SDL_Surface* napis = TTF_RenderText_Blended(m_czcionka,oss.str().c_str(), kolorCzcionki); SDL_Rect obszarNapis = { rozmiarPlanszy * rozmiarPola + 2 * szerokoscRamki, szerokoscRamki, napis->w, napis->h }; SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); SDL_FreeSurface(napis); obszarNapis.y += 1.5 * napis->h; oss.str(""); oss << "Matek: " << plansza().iloscMatekCzarnych(); napis = TTF_RenderText_Blended(m_czcionka,oss.str().c_str(),kolorCzcionki); SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); SDL_FreeSurface(napis); oss.str(""); oss << "Pionkow: " << plansza().iloscPionkowBialych(); obszarNapis.y = wysokoscOkna() - szerokoscRamki - 2.5 * napis->h; napis = TTF_RenderText_Blended(m_czcionka,oss.str().c_str(),kolorCzcionki); SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); SDL_FreeSurface(napis); obszarNapis.y += 1.5 * napis->h; oss.str(""); oss << "Matek: " << plansza().iloscMatekBialych(); napis = TTF_RenderText_Blended(m_czcionka,oss.str().c_str(),kolorCzcionki); SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); SDL_FreeSurface(napis); obszarNapis.x -= 1.5 * m_przelacznik->w; }
void WarcabyGUI::rysujPlansze() { SDL_Rect obszarTekstury = { 0, 0, szerokoscOkna(), wysokoscOkna() }; SDL_BlitSurface(m_teksturaDrewna,&obszarTekstury,m_glowneOkno,nullptr); Uint32 kolorBialy = SDL_MapRGB(m_glowneOkno->format,255,255,255), kolorCzarny = SDL_MapRGB(m_glowneOkno->format,0,0,0); const unsigned int rozmiarPlanszy = plansza().rozmiar(), rozmiarPola = (m_wysokoscOkna - 1.4 * m_wysokoscOkna / rozmiarPlanszy) / rozmiarPlanszy, szerokoscRamki = 0.7 * m_wysokoscOkna / rozmiarPlanszy; SDL_Rect obszarRamki = { 0.6 * szerokoscRamki, 0.6 * szerokoscRamki, rozmiarPola * rozmiarPlanszy + 0.8 * szerokoscRamki, rozmiarPola * rozmiarPlanszy + 0.8 * szerokoscRamki }; SDL_FillRect(m_glowneOkno,&obszarRamki, SDL_MapRGB(m_glowneOkno->format,140,140,140)); bool pierwszyBialy = true; const SDL_Color kolorCzcionki = { 255, 255, 255 }; for (unsigned int i = 0; i < rozmiarPlanszy; i++) { bool bialy; if (pierwszyBialy) bialy = true; else bialy = false; for (unsigned int j = 0; j < rozmiarPlanszy; j++) { SDL_Rect pole = { szerokoscRamki + j * rozmiarPola, szerokoscRamki + i * rozmiarPola, rozmiarPola, rozmiarPola }; if (bialy) { SDL_FillRect(m_glowneOkno,&pole,kolorBialy); } else { SDL_FillRect(m_glowneOkno,&pole,kolorCzarny); if (plansza()(i,j).czyPionek()) { if (plansza()(i,j).czyBiale()) SDL_BlitSurface(m_pionekBialy,nullptr,m_glowneOkno,&pole); else if (plansza()(i,j).czyCzarne()) SDL_BlitSurface(m_pionekCzarny,nullptr,m_glowneOkno,&pole); } else { if (plansza()(i,j).czyBiale()) SDL_BlitSurface(m_damkaBiala,nullptr,m_glowneOkno,&pole); else if (plansza()(i,j).czyCzarne()) SDL_BlitSurface(m_damkaCzarna,nullptr,m_glowneOkno,&pole); } } bialy = !bialy; } Wspolrzedna wspTemp; wspTemp.wierszLiczba(i + 1); char wiersz[] = { wspTemp.wiersz(), '\0' }; SDL_Surface* napis = TTF_RenderText_Blended(m_czcionka,wiersz, kolorCzcionki); SDL_Rect obszarNapis = { 0.5 * szerokoscRamki + 0.5 * (0.5 * szerokoscRamki - napis->w), szerokoscRamki + i * rozmiarPola + 0.5 * (rozmiarPola - napis->h), napis->w, napis->h }; SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); SDL_FreeSurface(napis); pierwszyBialy = !pierwszyBialy; } for (unsigned int j = 0; j < rozmiarPlanszy; j++) { Wspolrzedna wspTemp; wspTemp.kolumna(j + 1); std::ostringstream str; str << wspTemp.kolumna(); SDL_Surface* napis = TTF_RenderText_Blended(m_czcionka,str.str().c_str(), kolorCzcionki); SDL_Rect obszarNapis = { szerokoscRamki + j * rozmiarPola + 0.5 * (rozmiarPola - napis->w), 0.5 * szerokoscRamki + 0.5 * (0.5 * szerokoscRamki - napis->h), napis->w, napis->h }; SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); SDL_FreeSurface(napis); } for (auto it : m_zaznaczonePola) { unsigned int y = szerokoscRamki + (it.wierszLiczba() - 1) * rozmiarPola, x = szerokoscRamki + (it.kolumna() - 1) * rozmiarPola; SDL_Rect obszarZaznaczenie { x, y, m_zaznaczenie->w, m_zaznaczenie->h }; SDL_BlitSurface(m_zaznaczenie,nullptr,m_glowneOkno,&obszarZaznaczenie); } }
void WarcabyGUI::rysujPrzyciski() { const unsigned int szerokoscRamki = 0.7 * m_wysokoscOkna / plansza().rozmiar(), rozmiarPlanszy = plansza().rozmiar(), rozmiarPola = (m_wysokoscOkna - 1.4 * m_wysokoscOkna / rozmiarPlanszy) / rozmiarPlanszy; SDL_Color kolorCzcionki = { 255, 255, 255 }; SDL_Surface* napis = TTF_RenderText_Blended(m_czcionka,"Latwy",kolorCzcionki); SDL_Rect obszarNapis = { rozmiarPlanszy * rozmiarPola + 2 * szerokoscRamki, 3.5 * szerokoscRamki, napis->w, napis->h }; SDL_Rect obszarPrzelacznik = { rozmiarPlanszy * rozmiarPola + 2 * szerokoscRamki - 1.5 * m_przelacznik->w, 0, m_przelacznik->w, m_przelacznik->h }; SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); if (poziomKomputera() == POZIOM_KOMPUTERA::LATWY) { obszarPrzelacznik.y = obszarNapis.y; SDL_BlitSurface(m_przelacznik,nullptr,m_glowneOkno,&obszarPrzelacznik); } SDL_FreeSurface(napis); obszarNapis.y += 0.5 * szerokoscRamki; napis = TTF_RenderText_Blended(m_czcionka,"Sredni",kolorCzcionki); SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); if (poziomKomputera() == POZIOM_KOMPUTERA::SREDNI) { obszarPrzelacznik.y = obszarNapis.y; SDL_BlitSurface(m_przelacznik,nullptr,m_glowneOkno,&obszarPrzelacznik); } SDL_FreeSurface(napis); obszarNapis.y += 0.5 * szerokoscRamki; napis = TTF_RenderText_Blended(m_czcionka,"Trudny",kolorCzcionki); SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); if (poziomKomputera() == POZIOM_KOMPUTERA::TRUDNY) { obszarPrzelacznik.y = obszarNapis.y; SDL_BlitSurface(m_przelacznik,nullptr,m_glowneOkno,&obszarPrzelacznik); } SDL_FreeSurface(napis); napis = TTF_RenderText_Blended(m_czcionka,"CPU vs CZL",kolorCzcionki); obszarNapis.y = wysokoscOkna() - 4 * szerokoscRamki; SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); if (typGracza1() == TYP_GRACZA::CZLOWIEK && typGracza2() == TYP_GRACZA::KOMPUTER) { obszarPrzelacznik.y = obszarNapis.y; SDL_BlitSurface(m_przelacznik,nullptr,m_glowneOkno,&obszarPrzelacznik); } SDL_FreeSurface(napis); napis = TTF_RenderText_Blended(m_czcionka,"CZL vs CZL",kolorCzcionki); obszarNapis.y = wysokoscOkna() - 3.5 * szerokoscRamki; SDL_BlitSurface(napis,nullptr,m_glowneOkno,&obszarNapis); if (typGracza1() == TYP_GRACZA::CZLOWIEK && typGracza2() == TYP_GRACZA::CZLOWIEK) { obszarPrzelacznik.y = obszarNapis.y; SDL_BlitSurface(m_przelacznik,nullptr,m_glowneOkno,&obszarPrzelacznik); } SDL_FreeSurface(napis); }