diff --git a/application.cpp b/application.cpp new file mode 100644 index 0000000000000000000000000000000000000000..02905c8d02fd282e09b15ded5c202698dba33877 --- /dev/null +++ b/application.cpp @@ -0,0 +1,221 @@ +#include "application.hpp" +#include "checkbox.hpp" + + +using namespace genv; + +Application::Application(int boardSize) +{ + + gout.open(boardSize * 40, boardSize * 40); // Minden négyzet mérete 40x40 pixel + + for (int i = 0; i < boardSize; i++) + { + for (int j = 0; j < boardSize; j++) + { + + widgets.push_back(new CheckBox(this, j * 40, i * 40, 40, 40)); + } + } +} + + +void Application::gameover(int sz) +{ + game = false; + //gout << move_to(0, 0) << color(0, 0, 0) << box(800, 800); + gout << color(0, 0, 0) << move_to(100,300)<< box(800, 800); + if (sz == 0) + { + gout << move_to(100, 300) << color(255, 255, 255) << text(" Game over!\n Döntetlen! Jatek bezarasa: ESC,\n Uj jatek inditasa: space-t.") << refresh; + } + + else if (sz % 2 == 0) + { + gout <<move_to(0,0)<<color(0,0,0) <<box(1000,1000)<< move_to(100, 300) << color(255, 255, 255) << text(" Game over!\n X nyert! Jatek bezarasa: ESC,\n Uj jatek inditasa: space-t.") << refresh; + } + else + { + gout << move_to(100, 300) << color(255, 255, 255) << text(" Game over!\n O nyert! Jatek bezarasa: ESC,\n Uj jatek inditasa: space-t.") << refresh; + } +} + +bool Application::checker(int focus, int index) +{ + if ("first" == "first") + { + int counter = 0; + int valt = focus; + + while (widgets[valt]->value_sz() != 0 && widgets[valt]->value_sz() % 2 == index % 2) + { + counter++; + valt++; + } + + valt = focus; + + + while (widgets[valt]->value_sz() != 0 && widgets[valt]->value_sz() % 2 == index % 2) + { + counter++; + valt--; + } + + if (counter >= 6) + { + return true; + } + } + + if ("second" == "second") + { + int counter = 0; + int valt = focus; + + while (widgets[valt]->value_sz() != 0 && widgets[valt]->value_sz() % 2 == index % 2) + { + counter++; + valt = valt + 15; + } + + valt = focus; + + while (widgets[valt]->value_sz() != 0 && widgets[valt]->value_sz() % 2 == index % 2) + { + counter++; + valt = valt - 15; + } + + if (counter >= 6) + { + return true; + } + } + + if ("third" == "third") + { + int counter = 0; + int valt = focus; + + while (widgets[valt]->value_sz() != 0 && widgets[valt]->value_sz() % 2 == index % 2) + { + counter++; + valt = valt + 16; + } + + valt = focus; + + while (widgets[valt]->value_sz() != 0 && widgets[valt]->value_sz() % 2 == index % 2) + { + counter++; + valt = valt - 16; + } + + if (counter >= 6) + { + return true; + } + } + + if ("fourth" == "fourth") + { + int counter = 0; + int valt = focus; + + while (widgets[valt]->value_sz() != 0 && widgets[valt]->value_sz() % 2 == index % 2) + { + counter++; + valt = valt + 14; + } + + valt = focus; + + while (widgets[valt]->value_sz() != 0 && widgets[valt]->value_sz() % 2 == index % 2) + { + counter++; + valt = valt - 14; + } + + if (counter >= 6) + { + return true; + } + } + + return false; +} +void Application::event_loop() { + event ev; + + int focus = -1; + + int sz = 0; + + while(gin >> ev) + { + + if (ev.type == ev_key && ev.keycode==key_escape) + { + break; + } + + if (ev.type == ev_key && ev.keycode==key_space && game == false) + { + for (Widget * w : widgets) + { + w->value(0); + } + + game = true; + } + + if (ev.type == ev_mouse && ev.button == btn_left) + { + for (size_t i = 0; i < widgets.size(); i++) + { + if (widgets[i]->is_selected(ev.pos_x, ev.pos_y)) + focus = i; + } + } + + if (focus!=-1) { + widgets[focus]->handle(ev); + + if (widgets[focus]->is_checked() && widgets[focus]->value_sz() == 0) + { + sz++; + widgets[focus]->value(sz); + } + + } + + if (game) + { + for (Widget * w : widgets) + { + w->draw(); + } + } + + if (focus!=-1) + { + if (checker(focus, widgets[focus]->value_sz())) + { + gameover(widgets[focus]->value_sz()); + + } + } + + if (sz == 225) + { + gameover(0); + } + + gout << refresh; + } +} +void Application::registerWidget(Widget * widget) +{ + widgets.push_back(widget); +}