-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cell.pde
105 lines (91 loc) · 2.29 KB
/
Cell.pde
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
class Cell {
PShape cellShape, flagShape, beeShape;
int neighbouringBeeCount = 0;
ArrayList<Cell> neighbours;
int q, r;
boolean bee = false, revealed = false, flagged = false;
float size;
PVector center;
Cell(int q, int r, float size) {
/**
* Initialization method of a cell
*/
this.q = q;
this.r = r;
this.size = size;
// Shapes Initialization
cellShape = cellShapeInit();
flagShape = flagShapeInit();
beeShape = beeShapeInit();
/* Cell Center Calculation */
float x = this.size * (1.5 * this.q);
float y = this.size * (sqrt(3) * 0.5 * this.q + sqrt(3.0) * this.r);
this.center = new PVector(x, y);
}
void leftClicked() {
/**
* Left click method of a cell
*/
if (this.flagged) {
// Remove flag if cell is flagged
this.flagged = false;
board.flagCount -= 1;
} else if (!this.revealed) {
this.revealCell();
if (this.bee) {
// Set gameOver flag if cell has bee
gameOver = true;
}
}
}
void rightClicked() {
/**
* Right click method of a cell
*/
if (!this.revealed) {
this.flagged = !this.flagged;
board.flagCount += 1;
}
}
void revealCell() {
/**
* Reveal method of a cell
*/
this.revealed = true;
cellShape.setFill(revealedColor);
if (this.neighbouringBeeCount == 0) {
// Reveal adjacent cells if no neighbouring bee
for (Cell c : this.neighbours) {
if (!c.revealed) {
c.revealCell();
}
}
}
}
void show() {
/**
* Show method of a cell
*/
pushMatrix();
/* Draw Hexagon */
translate(this.center.x, this.center.y);
shape(cellShape, 0, 0);
/* Draw Bee, Count, Flag */
if (this.revealed) {
if (this.bee) {
/* Draw a bee */
shape(beeShape, 0, 0);
} else if (this.neighbouringBeeCount != 0) {
/* Display Neigbouring Bee Count */
fill(boundaryColor);
textAlign(CENTER, CENTER);
textSize(this.size);
text(this.neighbouringBeeCount, 0, 0);
}
} else if (this.flagged) {
/* Draw a Flag */
shape(flagShape, 0, 0);
}
popMatrix();
}
}