Files
QTicTacToe/qtictactoeboard.cpp
2024-11-30 09:36:15 +02:00

84 lines
1.8 KiB
C++

#include "qtictactoeboard.h"
#include <QPainter>
#include <QMouseEvent>
QTicTacToeBoard::QTicTacToeBoard(QWidget *parent, int playersCount) :
QWidget(parent)
{
currPlayer = 1;
boardPlayer = 0;
this->playersCount = playersCount;
}
void QTicTacToeBoard::setBoardPlayer(int player)
{
boardPlayer = player;
currPlayer = 1;
}
void QTicTacToeBoard::setGame(QTicTacToeGame *game)
{
this->game = game;
setGeometry(0,0,game->getSize()*cellSize,game->getSize()*cellSize);
connect(game,SIGNAL(itemPuted(int,int,int)), this, SLOT(turn(int,int,int)));
update();
}
void QTicTacToeBoard::turn(int /*x*/, int /*y*/, int /*player*/)
{
currPlayer = (currPlayer == playersCount?1:currPlayer+1);
update();
}
QSize QTicTacToeBoard::sizeHint()
{
if (game)
return QSize(game->getSize()*cellSize, game->getSize()*cellSize);
else
return QSize(0,0);
}
void QTicTacToeBoard::mousePressEvent(QMouseEvent *event)
{
if (boardPlayer && currPlayer != boardPlayer) return;
int x = event->x() / cellSize;
int y = event->y() / cellSize;
game->put(x,y,currPlayer);
}
void QTicTacToeBoard::paintEvent(QPaintEvent *)
{
if (!game) return;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(Qt::darkGreen, 1));
int size = game->getSize();
for (int i=1; i<size; i++)
{
painter.drawLine(i*cellSize,0,i*cellSize,this->height());
painter.drawLine(0,i*cellSize,this->width(),i*cellSize);
}
for (int i=0; i<size; i++)
{
for (int j=0; j<size;j++)
{
int player = game->getPlayer(i,j);
if (player)
{
painter.drawImage(i*cellSize, j*cellSize, QImage(QString(":/%1").arg(player)));
}
}
}
}