Skip to content
Snippets Groups Projects
Commit 0200295a authored by Barna Réka Emese's avatar Barna Réka Emese
Browse files

Upload New File

parent c96ef622
No related branches found
No related tags found
No related merge requests found
#include "jatekter.hpp"
#include "graphics.hpp"
#include <cmath>
#include <iostream>
using namespace genv;
JatekTer::JatekTer(Alkalmazas* szulo, int x, int y, int meret, JatekVezerlo* jatekVezerlo)
: Widget(szulo, x, y, meret, meret),
mezoMeret_(meret / jatekVezerlo->tablaMeret()),
tablaMeret_(jatekVezerlo->tablaMeret()),
jatekVezerlo_(jatekVezerlo) {}
void JatekTer::rajzol() {
rajzolBuffer(gout);
}
void JatekTer::rajzolBuffer(genv::canvas& cel) {
// Háttér
cel << genv::move_to(_x, _y) << genv::color(70, 70, 70) << genv::box(_meret_x, _meret_y);
// Rács - csak a szélső és középső vonalak vastagabbak
cel << genv::color(0, 0, 0);
for (int i = 0; i <= tablaMeret_; ++i) {
// Vastagabb vonalak minden 5. sor/oszlopnál
if (i % 5 == 0 || i == 0 || i == tablaMeret_) {
//cel << linewidth(2);
} else {
//cel << genv::linewidth(1);
}
// Vízszintes vonalak
cel << genv::move_to(_x, _y + i * mezoMeret_)
<< genv::line_to(_x + _meret_x, _y + i * mezoMeret_);
// Függőleges vonalak
cel << genv::move_to(_x + i * mezoMeret_, _y)
<< genv::line_to(_x + i * mezoMeret_, _y + _meret_y);
}
//cel << genv::linewidth(1);
// Játékállapot
for (int sor = 0; sor < tablaMeret_; ++sor) {
for (int oszlop = 0; oszlop < tablaMeret_; ++oszlop) {
int kozepX = _x + oszlop * mezoMeret_ + mezoMeret_ / 2;
int kozepY = _y + sor * mezoMeret_ + mezoMeret_ / 2;
int sugar = mezoMeret_ / 2 - 2;
switch (jatekVezerlo_->mezoAllapot(sor, oszlop)) {
case JatekVezerlo::X_JATEKOS:
cel << genv::color(255, 100, 100)
<< genv::move_to(kozepX - sugar, kozepY - sugar)
<< genv::line_to(kozepX + sugar, kozepY + sugar)
<< genv::move_to(kozepX + sugar, kozepY - sugar)
<< genv::line_to(kozepX - sugar, kozepY + sugar);
break;
case JatekVezerlo::O_JATEKOS:
cel << genv::color(100, 100, 255);
for (int i = 0; i < 360; i += 15) { // Kevesebb pont a körhöz
double rad = i * 3.14159 / 180;
int px = kozepX + sugar * cos(rad);
int py = kozepY + sugar * sin(rad);
if (i == 0) cel << genv::move_to(px, py);
else cel << genv::line_to(px, py);
}
cel << genv::line_to(kozepX + sugar, kozepY);
break;
case JatekVezerlo::URES:
break;
}
}
}
// jatek_ter.cpp - rajzol() függvény részlete
JatekVezerlo::Jatekos nyertes = jatekVezerlo_->nyertesEllenorzes();
if (nyertes != JatekVezerlo::URES)
{
gout.load_font("LiberationSans-Regular.ttf", 30);
std::string uzenet = (nyertes == JatekVezerlo::X_JATEKOS) ? "X nyert!" : "O nyert!";
gout << color(211, 217, 212)
<< move_to(_x + _meret_x/2 - gout.twidth(uzenet)/2, _y + _meret_y/2)
<< text(uzenet);
}
else if (jatekVezerlo_->teleVanATabla())
{
gout.load_font("LiberationSans-Regular.ttf", 30);
gout << color(211, 217, 212)
<< move_to(_x + _meret_x/2 - gout.twidth("Döntetlen!")/2, _y + _meret_y/2)
<< text("Döntetlen!");
}
// Fókusz
//if (_fokusztalt) {
// cel << color(255, 255, 0)
//<< genv::move_to(_x + fokusztX_ * mezoMeret_ + 1, _y + fokusztY_ * mezoMeret_ + 1)
//<< genv::box(mezoMeret_ - 2, mezoMeret_ - 2);
//}
}
void JatekTer::kezel(genv::event ev) {
if (jatekVezerlo_->nyertesEllenorzes() == JatekVezerlo::URES &&
!jatekVezerlo_->teleVanATabla()) {
if (ev.type == ev_mouse && ev.button == btn_left) {
int oszlop = (ev.pos_x - _x) / mezoMeret_;
int sor = (ev.pos_y - _y) / mezoMeret_;
if (sor >= 0 && sor < tablaMeret_ && oszlop >= 0 && oszlop < tablaMeret_) {
jatekVezerlo_->lepes(sor, oszlop, jatekVezerlo_->aktualisJatekos());
_valtozott = true;
}
}
if (ev.type == ev_key) {
_valtozott = true;
switch (ev.keycode) {
case genv::key_up: if (fokusztY_ > 0) fokusztY_--; break;
case genv::key_down: if (fokusztY_ < tablaMeret_-1) fokusztY_++; break;
case genv::key_left: if (fokusztX_ > 0) fokusztX_--; break;
case genv::key_right: if (fokusztX_ < tablaMeret_-1) fokusztX_++; break;
case genv::key_enter:
jatekVezerlo_->lepes(fokusztY_, fokusztX_, jatekVezerlo_->aktualisJatekos());
break;
}
}
}
}
void JatekTer::mozgatFokuszt(int dx, int dy) {
if (_fokusztalt) {
fokusztX_ = std::max(0, std::min(tablaMeret_-1, fokusztX_ + dx));
fokusztY_ = std::max(0, std::min(tablaMeret_-1, fokusztY_ + dy));
_valtozott = true;
}
}
void JatekTer::lepesFokuszuPoziciora() {
if (_fokusztalt) {
jatekVezerlo_->lepes(fokusztY_, fokusztX_, jatekVezerlo_->aktualisJatekos());
_valtozott = true;
}
}
bool JatekTer::kivalasztva(int eger_x, int eger_y) {
bool mostKivalasztott = (eger_x >= _x && eger_x <= _x + _meret_x &&
eger_y >= _y && eger_y <= _y + _meret_y);
if (mostKivalasztott != _fokusztalt) {
_fokusztalt = mostKivalasztott;
_valtozott = true;
}
return mostKivalasztott;
}
void JatekTer::resetFokuszt() {
fokusztX_ = 7;
fokusztY_ = 7;
_valtozott = true;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment