-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBox.py
More file actions
188 lines (145 loc) · 5.76 KB
/
Box.py
File metadata and controls
188 lines (145 loc) · 5.76 KB
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
from PyQt5.QtCore import QRect, Qt, QPoint, QSize
from PyQt5.QtGui import QPen, QColor
from PyQt5.QtWidgets import QWidget
class Box(QWidget):
"""
方块类,继承自QWidget。
负责描述游戏地图中的每一个方块的属性和状态。
"""
def __init__(self, boxWidth, boxHeight, leftTopX, leftTopY, boxType=0, parent=None):
"""
初始化方块对象。
:param boxWidth: 方块宽度
:param boxHeight: 方块高度
:param leftTopX: 左上角x坐标
:param leftTopY: 左上角y坐标
:param boxType: 方块类型(0为空,其他为不同类型)
:param parent: 父级QWidget
"""
super().__init__(parent)
self.boxWidth = boxWidth # 方块宽度
self.boxHeight = boxHeight # 方块高度
self.leftTopX = leftTopX # 左上角x
self.leftTopY = leftTopY # 左上角y
self.boxType = boxType # 方块类型
self.edgeLen = min(boxWidth, boxHeight) / 20 # 边框长度
self.isRemoved = False # 是否被移除(逻辑上)
self.isSelected = False # 是否被选中
self.isHinted = False # 是否为提示方块
self.boxRow = None # 行号
self.boxCol = None # 列号
self.boxColor = None # 方块颜色
self.boxEdgeColor = None # 边框颜色
self.paintRemoved = False #画出来消除了
def drawBox(self, painter):
"""绘制方块,包括类型和提示标记"""
boxRect = QRect(int(self.leftTopX), int(self.leftTopY), self.boxWidth, self.boxHeight)
painter.drawRect(boxRect)
painter.setPen(Qt.black)
painter.drawText(boxRect, Qt.AlignCenter, str(self.boxType))
if self.isHinted:
pen = QPen(Qt.white, 2)
painter.setPen(pen)
p1 = QPoint(self.leftTopX, self.leftTopY)
p2 = QPoint(self.leftTopX + self.boxWidth, self.leftTopY)
p3 = QPoint(self.leftTopX + self.boxWidth, self.leftTopY + self.boxHeight)
p4 = QPoint(self.leftTopX, self.leftTopY + self.boxHeight)
painter.drawLine(p1, p3)
painter.drawLine(p2, p4)
def setBoxEdgeColor(self):
"""设置方块边框颜色,选中为黄色,未选中为灰色,空为黑色"""
if self.boxType != 0:
if self.isSelected:
self.boxEdgeColor = QColor(Qt.yellow)
else:
self.boxEdgeColor = QColor(Qt.gray)
else:
self.boxEdgeColor = QColor(Qt.black)
def getEdgeLen(self):
"""获取边框长度"""
return self.edgeLen
def setBoxEdgeLen(self):
"""设置边框长度,选中时更粗"""
if self.isSelected:
self.edgeLen = min(self.boxWidth, self.boxHeight) / 10
else:
self.edgeLen = min(self.boxWidth, self.boxHeight) / 20
def updateBox(self):
"""更新方块的边框颜色和长度"""
self.setBoxEdgeColor()
self.setBoxEdgeLen()
def setBoxType(self, boxtype=0):
"""设置方块类型"""
self.boxType = boxtype
def getBoxType(self):
"""获取方块类型"""
return self.boxType
def getLeftTopX(self):
"""获取左上角x坐标"""
return self.leftTopX
def getLeftTopY(self):
"""获取左上角y坐标"""
return self.leftTopY
def setXandY(self, x, y):
"""设置左上角坐标"""
self.leftTopX = x
self.leftTopY = y
def getBoxWidth(self):
"""获取方块宽度"""
return self.boxWidth
def getBoxHeight(self):
"""获取方块高度"""
return self.boxHeight
def setBoxWeiandHei(self, wid, hei):
"""设置方块宽高"""
self.boxWidth = wid
self.boxHeight = hei
def isBoxSelected(self):
"""判断方块是否被选中"""
return self.isSelected
def setBoxSelected(self, status):
"""设置方块选中状态"""
self.isSelected = status
def getBoxEdgeColor(self):
"""获取方块边框颜色"""
return self.boxEdgeColor
def setBoxColor(self, color):
"""设置方块颜色"""
self.boxColor = color
def getBoxColor(self):
"""获取方块颜色"""
return self.boxColor
def removeBox(self):
"""移除方块(设置为已移除)"""
self.isRemoved = True
def notRemoved(self):
"""恢复方块(设置为未移除)"""
self.isRemoved = False
def isBoxRemoved(self):
"""判断方块是否被移除"""
return self.isRemoved
def setBoxRemoved(self, status):
"""设置方块移除状态"""
self.isRemoved = status
def isBoxExist(self):
"""判断是否为有效方块(非空、未移除、非特殊类型4)"""
return self.boxType != 0 and (self.isRemoved == False) and self.boxType != 4
def isBoxOrItemExist(self):
"""判断是否为有效方块或道具(非空且未移除)"""
return self.boxType != 0 and (self.isRemoved == False)
def setBoxRowCol(self, row, col):
"""设置方块的行列号"""
self.boxRow = row
self.boxCol = col
def getBoxRow(self):
"""获取方块行号"""
return self.boxRow
def getBoxCol(self):
"""获取方块列号"""
return self.boxCol
def getHintStatus(self):
"""获取方块是否为提示状态"""
return self.isHinted
def setHintStatus(self, status):
"""设置方块提示状态"""
self.isHinted = status