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