diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e3c00aefde04b1e49521406226cf4a4b2b7fb934
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,18 @@
+#include "palya.h"
+
+using namespace std;
+using namespace genv;
+
+int main()
+{
+    Palya* tictac = new Palya();
+
+    event ev;
+    while (gin >> ev && ev.keycode!=key_escape)
+    {
+        tictac->proba(ev);
+        gout << refresh;
+    }
+}
+
+//Papp Benjamin (I8KQEC)
diff --git a/palya.cpp b/palya.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..28ea3984db23d7fe8a2b929c3d55d8f566fc396e
--- /dev/null
+++ b/palya.cpp
@@ -0,0 +1,28 @@
+#include <iostream>
+#include "palya.h"
+
+using namespace std;
+using namespace genv;
+
+Palya::Palya()
+{
+    gout.open(XX,YY);
+    for(int i = 0; i<20; i++){
+        for(int j = 0; j<20; j++){
+            Palyamezo* proba = new Palyamezo(this, 100+(i*40), 100+(j*40), 40, 40, i, j);
+            palyaterulet.push_back(proba);
+        }
+    }
+    for(Widget* r : palyaterulet)
+        r->draw();
+}
+
+void Palya::proba(event ev)
+{
+    for(Palyamezo* r : palyaterulet){
+        if(r->hozzaer(ev))
+            cout << r->index_m << " - " << r->index_n << endl;
+    }
+}
+
+Palya::~Palya() {}
diff --git a/palya.h b/palya.h
new file mode 100644
index 0000000000000000000000000000000000000000..198ef9964ac3c5f99186753391f27bc8747a37d5
--- /dev/null
+++ b/palya.h
@@ -0,0 +1,17 @@
+#ifndef PALYA_H
+#define PALYA_H
+#include <vector>
+#include "palyamezo.h"
+
+class Palya
+{
+    std::vector<Palyamezo*> palyaterulet;
+public:
+    const int XX = 1000;
+    const int YY = 1000;
+    Palya();
+    void proba(genv:: event ev);
+    ~Palya();
+};
+
+#endif // PALYA_H
diff --git a/palyamezo.cpp b/palyamezo.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b6bf45ec7bbc8195c3910d9b96802fc1e9c89333
--- /dev/null
+++ b/palyamezo.cpp
@@ -0,0 +1,15 @@
+#include "palyamezo.h"
+
+using namespace genv;
+
+Palyamezo::Palyamezo(Palya* _p, int _x, int _y, int _w, int _h, int _m, int _n) :
+    Widget(_p, _x, _y, _w, _h), index_m(_m), index_n(_n) {}
+
+Palyamezo::~Palyamezo() {}
+
+void Palyamezo::draw(){
+    int t = 255;
+    gout << move_to(x,y) << color(t,t,t) << box(w,h);
+    t = 0;
+    gout << move_to(x+1,y+1) << color(t,t,t) << box(w-2,h-2);
+}
diff --git a/palyamezo.h b/palyamezo.h
new file mode 100644
index 0000000000000000000000000000000000000000..a2ea4f0fd18df2fe16d15db6969b060bdaefdb81
--- /dev/null
+++ b/palyamezo.h
@@ -0,0 +1,15 @@
+#ifndef PALYAMEZO_H
+#define PALYAMEZO_H
+#include "widget.h"
+
+class Palyamezo : public Widget
+{
+public:
+    Palyamezo(Palya* _p, int _x, int _y, int _w, int _h, int _m, int _n);
+    ~Palyamezo();
+    int index_m;
+    int index_n;
+    void draw() override;
+};
+
+#endif // PALYAMEZO_H
diff --git a/widget.cpp b/widget.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7684c8e8fa7b62b5d2263a4734eee704ca0665bc
--- /dev/null
+++ b/widget.cpp
@@ -0,0 +1,21 @@
+#include "widget.h"
+
+using namespace genv;
+
+Widget::Widget(Palya* _p, int _x, int _y, int _w, int _h) : p(_p), x(_x), y(_y), w(_w), h(_h){}
+
+bool Widget::hozzaer(event ev)
+{
+    if(ev.pos_x > x && ev.pos_x < x+w && ev.pos_y < y+h && ev.pos_y > y)
+        return true;
+    else
+        return false;
+}
+
+bool Widget::select(event ev)
+{
+    if(hozzaer(ev) && ev.button==btn_left)
+        return true;
+    if(!hozzaer(ev) && ev.button==btn_left)
+        return false;
+}
diff --git a/widget.h b/widget.h
new file mode 100644
index 0000000000000000000000000000000000000000..fedfd3a2c7ec70cc49f50504fdf18123f87052e8
--- /dev/null
+++ b/widget.h
@@ -0,0 +1,18 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+#include "graphics.hpp"
+
+class Palya;
+
+class Widget{
+protected:
+    int x,y,w,h;
+    Palya* p;
+public:
+    Widget(Palya* _p, int _x, int _y, int _w, int _h);
+    bool hozzaer(genv::event ev);
+    bool select(genv::event ev);
+    virtual void draw() = 0;
+};
+
+#endif