qtictactoeboard.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "qtictactoeboard.h"
  2. #include <QPainter>
  3. #include <QMouseEvent>
  4. QTicTacToeBoard::QTicTacToeBoard(QWidget *parent, int playersCount) :
  5. QWidget(parent)
  6. {
  7. currPlayer = 1;
  8. boardPlayer = 0;
  9. this->playersCount = playersCount;
  10. }
  11. void QTicTacToeBoard::setBoardPlayer(int player)
  12. {
  13. boardPlayer = player;
  14. currPlayer = 1;
  15. }
  16. void QTicTacToeBoard::setGame(QTicTacToeGame *game)
  17. {
  18. this->game = game;
  19. setGeometry(0,0,game->getSize()*cellSize,game->getSize()*cellSize);
  20. connect(game,SIGNAL(itemPuted(int,int,int)), this, SLOT(turn(int,int,int)));
  21. update();
  22. }
  23. void QTicTacToeBoard::turn(int /*x*/, int /*y*/, int /*player*/)
  24. {
  25. currPlayer = (currPlayer == playersCount?1:currPlayer+1);
  26. update();
  27. }
  28. QSize QTicTacToeBoard::sizeHint()
  29. {
  30. if (game)
  31. return QSize(game->getSize()*cellSize, game->getSize()*cellSize);
  32. else
  33. return QSize(0,0);
  34. }
  35. void QTicTacToeBoard::mousePressEvent(QMouseEvent *event)
  36. {
  37. if (boardPlayer && currPlayer != boardPlayer) return;
  38. int x = event->x() / cellSize;
  39. int y = event->y() / cellSize;
  40. game->put(x,y,currPlayer);
  41. }
  42. void QTicTacToeBoard::paintEvent(QPaintEvent *)
  43. {
  44. if (!game) return;
  45. QPainter painter(this);
  46. painter.setRenderHint(QPainter::Antialiasing);
  47. painter.setPen(QPen(Qt::darkGreen, 1));
  48. int size = game->getSize();
  49. for (int i=1; i<size; i++)
  50. {
  51. painter.drawLine(i*cellSize,0,i*cellSize,this->height());
  52. painter.drawLine(0,i*cellSize,this->width(),i*cellSize);
  53. }
  54. for (int i=0; i<size; i++)
  55. {
  56. for (int j=0; j<size;j++)
  57. {
  58. int player = game->getPlayer(i,j);
  59. if (player)
  60. {
  61. painter.drawImage(i*cellSize, j*cellSize, QImage(QString(":/%1").arg(player)));
  62. }
  63. }
  64. }
  65. }