-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathqboardc4.cpp
60 lines (49 loc) · 1.64 KB
/
qboardc4.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "qboardc4.h"
#include <QPainter>
QBoardC4::QBoardC4(QMutex *mutex,Board *abstract_board,int cell_size) : QWidget(), mutex(mutex),
board(abstract_board), cell_size(cell_size), border_size(20), cell_border(15) {
assert(board);
BoardC4 *local_board=dynamic_cast<BoardC4*>(board->deepcopy());
setFixedSize(cell_size*local_board->width+2*border_size,cell_size*local_board->height+2*border_size);
}
void QBoardC4::paintEvent(QPaintEvent * event) {
Q_UNUSED(event);
QPainter painter(this);
mutex->lock();
BoardC4 *local_board=dynamic_cast<BoardC4*>(board->deepcopy());
mutex->unlock();
//draw grid
int min_x=border_size,max_x=border_size+local_board->width*cell_size;
int min_y=border_size,max_y=border_size+local_board->height*cell_size;
int x=min_x;
for (int column=0; column<=local_board->width; column++) {
painter.drawLine(x,min_y,x,max_y);
x+=cell_size;
}
int y=min_y;
for (int row=0; row<=local_board->height; row++) {
painter.drawLine(min_x,y,max_x,y);
y+=cell_size;
}
//draw_tokens
x=min_x;
for (int column=0; column<local_board->width; column++) {
y=min_y;
for (int row=0; row<local_board->height; row++) {
switch (local_board->tokens[column][row]) {
case PLAYER_1:
painter.drawLine(x+cell_border,y+cell_border,x+cell_size-cell_border,y+cell_size-cell_border);
painter.drawLine(x+cell_border,y+cell_size-cell_border,x+cell_size-cell_border,y+cell_border);
break;
case PLAYER_2:
painter.drawEllipse(x+cell_border,y+cell_border,cell_size-2*cell_border,cell_size-2*cell_border);
break;
case NOT_PLAYED:
break;
}
y+=cell_size;
}
x+=cell_size;
}
delete local_board;
}