diff --git a/main.cpp b/main.cpp index 7d524e2a58ee09d7fbff993f7d6b199a9f5e8e41..2f783b92608473be01e079fe3ed94478775da5cf 100644 --- a/main.cpp +++ b/main.cpp @@ -10,7 +10,7 @@ int main() while (gin >> ev && ev.keycode!=key_escape) { tictac->jatek(ev); - + tictac->grafikai_valtozas(); gout << refresh; } } diff --git a/mester.cpp b/mester.cpp index 69a21f5e836085d94def1f3a9e4115e8d42ad551..66ddbf8a213613e0c0b4cb8bea0f0cab10764dfa 100644 --- a/mester.cpp +++ b/mester.cpp @@ -35,26 +35,53 @@ void Mester::iranyitas(Palyamezo* f, event ev) { if(f->select(ev) && !f->get_filled()){ f->occupy(aktiv->get_sorszam()); f->fillin(); - PlayerChange(); + lepes = true; + } +} + +int Mester::moncsok_vizsg(Palyamezo* f, int szam){ + int streak = 1; + for(int i = 1; i<=4;){ + if(szam-(i*20) > 0 && negyzetek[szam-(i*20)]->occupied_by == f->occupied_by){ + streak++; + std::cout << "bal-fel" << std::endl; + std::cout << streak << std::endl; + i++; + } else { + i = 5; + } } + for(int i = 1; i<=4;){ + if(szam+(i*20) <= 400 && negyzetek[szam+(i*20)]->occupied_by == f->occupied_by){ + streak++; + std::cout << "jobb-le" << std::endl; + std::cout << streak << std::endl; + i++; + } else { + i = 5; + } + } + return streak; } -int Mester::atlo_vizsg(Palyamezo* f, int szam){ +int Mester::monno_vizsg(Palyamezo* f, int szam){ int streak = 1; for(int i = 1; i<=4;){ - if(negyzetek[szam-(i*20)]->occupied_by == f->occupied_by){ + if(szam-(i*18) > 0 && negyzetek[szam-(i*18)]->occupied_by == f->occupied_by){ streak++; - if(szam-((i+1)*20) > 0) - i++; + std::cout << "bal-le" << std::endl; + std::cout << streak << std::endl; + i++; } else { i = 5; } } for(int i = 1; i<=4;){ - if(negyzetek[szam+(i*20)]->occupied_by == f->occupied_by){ + if(szam+(i*18) <= 400 && negyzetek[szam+(i*18)]->occupied_by == f->occupied_by){ streak++; - if(szam+((i+1)*20) < 381) - i++; + std::cout << "bal-fel" << std::endl; + std::cout << streak << std::endl; + i++; } else { i = 5; } @@ -65,20 +92,21 @@ int Mester::atlo_vizsg(Palyamezo* f, int szam){ int Mester::horizont_vizsg(Palyamezo* f, int szam){ int streak = 1; for(int i = 1; i<=4;){ - if(negyzetek[szam-(i*19)]->occupied_by == f->occupied_by){ + if(szam-(i*19) > 0 && negyzetek[szam-(i*19)]->occupied_by == f->occupied_by){ streak++; - std::cout << "daaamn" << std::endl; - if(szam-((i+1)*19) > 0) - i++; + std::cout << "bal" << std::endl; + std::cout << streak << std::endl; + i++; } else { i = 5; } } for(int i = 1; i<=4;){ - if(negyzetek[szam+(i*19)]->occupied_by == f->occupied_by){ + if(szam+(i*19) <= 400 && negyzetek[szam+(i*19)]->occupied_by == f->occupied_by){ streak++; - if(szam+((i+1)*19) < 381) - i++; + std::cout << "jobb" << std::endl; + std::cout << streak << std::endl; + i++; } else { i = 5; } @@ -89,19 +117,21 @@ int Mester::horizont_vizsg(Palyamezo* f, int szam){ int Mester::vertic_vizsg(Palyamezo* f, int szam){ int streak = 1; for(int i = 1; i<=4;){ - if(negyzetek[szam-i]->occupied_by == f->occupied_by){ + if(szam-i > 0 && negyzetek[szam-i]->occupied_by == negyzetek[szam]->occupied_by){ streak++; - if(szam-(i+1) > 0) - i++; + std::cout << "fel" << std::endl; + std::cout << streak << std::endl; + i++; } else { i = 5; } } for(int i = 1; i<=4;){ - if(negyzetek[szam+i]->occupied_by == f->occupied_by){ + if(szam+i <= 400 && negyzetek[szam+i]->occupied_by == f->occupied_by){ streak++; - if(szam+(i+1) < 381) - i++; + std::cout << "le" << std::endl; + std::cout << streak << std::endl; + i++; } else { i = 5; } @@ -111,18 +141,27 @@ int Mester::vertic_vizsg(Palyamezo* f, int szam){ bool Mester::streak_vizsgalo(Palyamezo* vizsgalt){ int vizsgalt_index = vizsgalt->index; - if(atlo_vizsg(vizsgalt, vizsgalt_index) >= 5 || horizont_vizsg(vizsgalt, vizsgalt_index) >= 5 || vertic_vizsg(vizsgalt, vizsgalt_index) >= 5){ - return true; - std::cout << "daaamn" << std::endl;} + if(moncsok_vizsg(vizsgalt, vizsgalt_index) >= 5 || monno_vizsg(vizsgalt, vizsgalt_index) >= 5 || horizont_vizsg(vizsgalt, vizsgalt_index) >= 5 || vertic_vizsg(vizsgalt, vizsgalt_index) >= 5){ + std::cout << "streak" << std::endl; + return true;} else { - return false; - std::cout << "not really" << std::endl;} + std::cout << "not really" << std::endl; + return false;} } +void Mester::gameover() {} + void Mester::szabalyzat(Palyamezo* f){ - streak_vizsgalo(f); - //if(streak_vizsgalo()) - //aktiv->pontszam_novelo(); + if(lepes && turn < 400){ + if(streak_vizsgalo(f)) + aktiv->pontszam_novelo(); + PlayerChange(); + lepes = false; + turn++; + std::cout << turn << std::endl; + } + if(player1->get_pontszam() == 3 || player2->get_pontszam() == 3 || turn == 400) + gameover(); } diff --git a/mester.h b/mester.h index f9c1bf68f28bf09366407f9d893f82a0f2238733..c43afbfd7876db62c956413b2b0b2fe4bbdbe2db 100644 --- a/mester.h +++ b/mester.h @@ -8,20 +8,24 @@ class Player; class Mester { - Player* player1; - Player* player2; Player* aktiv; std::vector<Palyamezo*> negyzetek; + bool lepes = false; + int turn = 0; public: Mester(); + Player* player1; + Player* player2; void set_negyzetek(std::vector<Palyamezo*> v); void iranyitas(Palyamezo* f, genv::event ev); void PlayerChange(); - int atlo_vizsg(Palyamezo* f, int szam); + int moncsok_vizsg(Palyamezo* f, int szam); + int monno_vizsg(Palyamezo* f, int szam); int horizont_vizsg(Palyamezo* f, int szam); int vertic_vizsg(Palyamezo* f, int szam); bool streak_vizsgalo(Palyamezo* f); void szabalyzat(Palyamezo* f); + void gameover(); ~Mester(); }; diff --git a/palya.cpp b/palya.cpp index eef29e2c975a8680985f775f7a4273978f291fe6..b4bddc55b7f02d69bb901a260f95c1d4356b4e92 100644 --- a/palya.cpp +++ b/palya.cpp @@ -1,7 +1,8 @@ -#include <iostream> #include "palya.h" #include "palyamezo.h" #include "mester.h" +#include "player.h" +#include "textwidget.h" using namespace std; using namespace genv; @@ -9,23 +10,44 @@ using namespace genv; Palya::Palya() { gout.open(XX,YY); - for(int i = 0; i<20; i++){ - for(int j = 0; j<20; j++){ - Palyamezo* negyzet = new Palyamezo(this, 100+(i*40), 100+(j*40), 40, 40, (19*i)+j); + gout << font("LiberationSans-Regular.ttf",32); + for(int i = 1; i<=20; i++){ + for(int j = 1; j<=20; j++){ + Palyamezo* negyzet = new Palyamezo(this, 100+((i-1)*40), 100+((j-1)*40), 40, 40, 20*(i-1)+j); palyaterulet.push_back(negyzet); negyzet->draw(); } } mesztor = new Mester(); + title = new TextWidget(this, 410, 30, 200, 50, "Tic-tac-toe"); + title->draw(); + gout << font("LiberationSans-Regular.ttf",24); + bo3 = new TextWidget(this, 30, 30, 200, 50, "Best of 3"); + bo3->draw(); + gout << font("LiberationSans-Regular.ttf",26); + pontok1 = new TextWidget(this, 300, 920, 40, 40, "0"); + pontok2 = new TextWidget(this, 700, 920, 40, 40, "0"); + nev1 = new TextWidget(this, 140, 920, 100, 40, mesztor->player1->get_name()); + nev2 = new TextWidget(this, 800, 920, 100, 40, mesztor->player2->get_name()); + pontok1->draw(); + pontok2->draw(); + nev1->draw(); + nev2->draw(); } void Palya::jatek(event ev){ mesztor->set_negyzetek(palyaterulet); for(Palyamezo* negyzet : palyaterulet){ mesztor->iranyitas(negyzet, ev); - if(negyzet->select(ev)) - mesztor->szabalyzat(negyzet); + mesztor->szabalyzat(negyzet); } } +void Palya::grafikai_valtozas(){ + pontok1->set_text(to_string(mesztor->player1->get_pontszam())); + pontok2->set_text(to_string(mesztor->player2->get_pontszam())); + pontok1->draw(); + pontok2->draw(); +} + Palya::~Palya() {} diff --git a/palya.h b/palya.h index 6bf74b3ffb9339914471b72cb6531c1eb3c0bb80..9b06a12daa8bd5037ebeebd60afc8f6f850226e3 100644 --- a/palya.h +++ b/palya.h @@ -5,16 +5,24 @@ class Mester; class Palyamezo; +class TextWidget; class Palya { const int XX = 1000; const int YY = 1000; + TextWidget* title; + TextWidget* bo3; + TextWidget* nev1; + TextWidget* nev2; + TextWidget* pontok1; + TextWidget* pontok2; public: Palya(); std::vector<Palyamezo*> palyaterulet; Mester* mesztor; void jatek(genv::event ev); + void grafikai_valtozas(); ~Palya(); }; diff --git a/textwidget.cpp b/textwidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a1685397e5bb8abf3914e668e47fc1462534adf7 --- /dev/null +++ b/textwidget.cpp @@ -0,0 +1,20 @@ +#include "textwidget.h" + +using namespace std; +using namespace genv; + +TextWidget::TextWidget(Palya* _p, int _x, int _y, int _w, int _h, string _content) : Widget(_p, _x, _y, _w, _h), content(_content) +{ + kezdo_hossz = (w - gout.twidth(content))/8; + kezdo_mag = (h - (gout.cascent()+gout.cdescent()))/2; +} + +void TextWidget::set_text(string vmi) {content = vmi;} + +void TextWidget::draw(){ + gout << color(0,0,0)<<move_to(x,y)<< box(w,h); //border + gout << color(0,0,0) << move_to(x+1,y+1)<<box(w-2,h-2); //fill + gout << color(255,255,255)<<move_to(x+kezdo_hossz,y+kezdo_mag) << text(content); //text +} + +TextWidget::~TextWidget(){} diff --git a/textwidget.h b/textwidget.h new file mode 100644 index 0000000000000000000000000000000000000000..5ebf5364facb5a3456bbc9ebb0e7ed43e3b32375 --- /dev/null +++ b/textwidget.h @@ -0,0 +1,19 @@ +#ifndef TEXTWIDGET_H +#define TEXTWIDGET_H +#include "widget.h" + +class Palya; + +class TextWidget : public Widget{ +protected: + std::string content; + int kezdo_hossz; + int kezdo_mag; +public: + TextWidget(Palya* _p, int _x, int _y, int _w, int _h, std::string _content); + ~TextWidget(); + void set_text(std::string vmi); + void draw() override; +}; + +#endif