def _update_gui(self): for y_pos in range(self.height): for x_pos in range(self.width): _, _, life = self.grid[y_pos][x_pos] neighbours = _get_neighbours_of_cell(self.grid, self.grid[y_pos][x_pos]) lifes = [ list(n)[INDEX_ALIVE] for n in neighbours if list(n)[INDEX_ALIVE] ] total_lifes = len(lifes) weight = ((float(total_lifes) / 8.0) * 175.0) + 80.0 if life: color = QColor(weight, weight / 2, weight / 2) self.buttons[y_pos][x_pos].setStyleSheet( """QWidget { background-color: %s; }""" % color.name()) else: color = QColor(1, 1, weight) self.buttons[y_pos][x_pos].setStyleSheet( """QWidget { background-color: %s; }""" % color.name())
class LevelSelectionView(QFrame): """ Represents the View of the Level Selection """ ENTRIES_PER_ROW = 3 def __init__(self, parent, level_selection): """ Initialize the Level Selection View """ QFrame.__init__(self) #, parent) self.resize(640, 480) self.level_selection = level_selection self.setFocusPolicy(Qt.StrongFocus) self.color = QColor(200, 200, 200) self.setStyleSheet("QFrame { background-color: %s }" % self.color.name()) self.levelDetailsView = LevelDetailsView(self.level_selection, parent=self) width = self.ENTRIES_PER_ROW * LevelOverviewView.WIDTH + 32 self.levelDetailsView.move(width, 0) self.levelDetailsView.resize(640 - width, 480) self.levelOverviews = [] for level in level_selection.levels: overview = LevelOverviewView(self, level, level_selection) self.levelOverviews.append(overview) for i in range(len(self.levelOverviews)): overview = self.levelOverviews[i] overview.move( 16 + (i % self.ENTRIES_PER_ROW) * LevelOverviewView.WIDTH, 32 + i / self.ENTRIES_PER_ROW * LevelOverviewView.HEIGHT) def paintEvent(self, event): """ """ for overview in self.levelOverviews: overview.updateView() self.levelDetailsView.updateView() def updateView(self): """ Update the View """
def __init__(self, text, color, size=QSize(80, 30), parent=None): super(RaisedButton, self).__init__(parent) self.resize(size) if color == None: color = QColor(66, 165, 245) else: color = QColor(color) self.isFlat = True self.color = color self.setText(text) self.effect = QGraphicsDropShadowEffect(self.parent()) self.effect.setOffset(3) self.effect.setColor(QColor(0, 0, 0, 40)) self.setGraphicsEffect(self.effect) self.press = False with open("QPushButton-Raised.qss") as f: dat = f.read() color1 = color.name() color2 = color.lighter().name() dat = dat % (str(color1), str(color2)) self.setStyleSheet(dat)
class LevelSelectionView(QFrame): """ Represents the View of the Level Selection """ ENTRIES_PER_ROW = 3 def __init__(self, parent, level_selection): """ Initialize the Level Selection View """ QFrame.__init__(self)#, parent) self.resize(640, 480) self.level_selection = level_selection self.setFocusPolicy(Qt.StrongFocus) self.color = QColor(200, 200, 200) self.setStyleSheet("QFrame { background-color: %s }" % self.color.name()) self.levelDetailsView = LevelDetailsView(self.level_selection, parent=self) width = self.ENTRIES_PER_ROW*LevelOverviewView.WIDTH+32 self.levelDetailsView.move(width, 0) self.levelDetailsView.resize(640-width, 480) self.levelOverviews = [] for level in level_selection.levels: overview = LevelOverviewView(self, level, level_selection) self.levelOverviews.append(overview) for i in range(len(self.levelOverviews)): overview = self.levelOverviews[i] overview.move(16+(i%self.ENTRIES_PER_ROW)*LevelOverviewView.WIDTH, 32+i/self.ENTRIES_PER_ROW*LevelOverviewView.HEIGHT) def paintEvent(self, event): """ """ for overview in self.levelOverviews: overview.updateView() self.levelDetailsView.updateView() def updateView(self): """ Update the View """
class GameStatusView(QFrame): """ It's the game status view """ def __init__(self, level, width, height, parent=None): """ """ QFrame.__init__(self, parent) self.level = level self.setup() self.updateView() self.color = QColor(200, 200, 200) self.setStyleSheet("QFrame { background-color: %s }" % self.color.name()) self.resize(width, height) def setup(self): """ Setup the View """ self.setupFont() self.setupPowerLabel() self.setupMovesLabel() self.setupRemainingDefensesLabels() def setupFont(self): """ Setup the Font """ self.font = QFont() self.font.setPointSize(14) def setupPowerLabel(self): """ Setup the Power Label """ self.powerLabel = QLabel("", self) self.powerLabel.move(32, 16) self.powerLabel.setFont(self.font) def setupMovesLabel(self): """ Setup the Moves Label """ self.movesLabel = QLabel("", self) self.movesLabel.move(32, 16 + 48) self.movesLabel.setFont(self.font) def setupRemainingDefensesLabels(self): """ Setup the Remaining Defenses Labels """ self.remainingDefensesLabels = {} labelNumber = 1 remainingDefenses = self.level.getRemainingDefenses() for defenseClass in remainingDefenses: label = QLabel("", self) label.move(32, 16 + 48 * (labelNumber + 1)) label.setFont(self.font) self.remainingDefensesLabels[defenseClass] = label labelNumber += 1 def updateView(self): """ Update the View """ self.updatePowerLabel() self.updateMovesLabel() self.updateRemainingDefensesLabels() def updatePowerLabel(self): """ Update the Power Label """ self.powerLabel.setText("Power: {0}".format( self.level.drone.powerRating.power)) def updateMovesLabel(self): """ Update the Moves Label """ self.movesLabel.setText("Moves: {0}".format( self.level.moveRating.moveCount)) self.movesLabel.resize(self.movesLabel.contentsRect().width(), self.movesLabel.contentsRect().height()) def updateRemainingDefensesLabels(self): """ Update the Remaining Mines Label """ remainingDefenses = self.level.getRemainingDefenses() for defenseClass in remainingDefenses: label = self.remainingDefensesLabels[defenseClass] label.setText("{0} Left: {1}".format( defenseClass.friendlyName, remainingDefenses[defenseClass]))
class LevelCompletionView(QFrame): """ View of the Level Completion Status """ def __init__(self, level, width, height, parent=None): """ Initialize the Level Completion View """ QFrame.__init__(self, parent) self.level = level self.setup() self.updateView() self.color = QColor(200, 200, 200) self.setStyleSheet("QFrame { background-color: %s }" % self.color.name()) self.resize(width, height) def setup(self): """ Setup the View """ self.setupFont() self.setupLevelCompletionLabel() self.setupCompletionDetailsLabel() def setupFont(self): """ Setup the Font """ self.font = QFont() self.font.setPointSize(32) def setupLevelCompletionLabel(self): """ Setup the Power Label """ self.font = QFont() self.font.setPointSize(32) self.levelCompletionLabel = QLabel("You Won!", self) self.levelCompletionLabel.move(32, 16) self.levelCompletionLabel.setFont(self.font) self.levelCompletionLabel.setVisible(False) def setupCompletionDetailsLabel(self): """ Setup the Remaining Mines Label """ self.font = QFont() self.font.setPointSize(24) self.completionDetailsLabel = QLabel("Destroyed!", self) self.completionDetailsLabel.move(32, 64) self.completionDetailsLabel.setFont(self.font) self.completionDetailsLabel.setVisible(False) def updateView(self): """ Update the View """ self.updateLevelCompletionLabel() self.updateCompletionDetailsLabel() def updateLevelCompletionLabel(self): """ Update the Power Label """ if self.level.won(): self.levelCompletionLabel.setText("You Won!") self.levelCompletionLabel.setVisible(True) elif self.level.lost(): self.levelCompletionLabel.setText("Game Over!") self.levelCompletionLabel.setVisible(True) def updateCompletionDetailsLabel(self): """ Update the Remaining Mines Label """ if self.level.destroyed(): self.completionDetailsLabel.setText("Destroyed") self.completionDetailsLabel.setVisible(True) elif self.level.noPower() and not self.level.won(): self.completionDetailsLabel.setText("Insufficient Power") self.completionDetailsLabel.setVisible(True) elif self.level.won(): text = "" if self.level.completionRating.awarded: text += "C" if self.level.moveRating.awarded: text += "M" if self.level.powerRating.awarded: text += "P" self.completionDetailsLabel.setText(text) self.completionDetailsLabel.setVisible(True)
class GameStatusView(QFrame): """ It's the game status view """ def __init__(self, level, width, height, parent=None): """ """ QFrame.__init__(self, parent) self.level = level self.setup() self.updateView() self.color = QColor(200, 200, 200) self.setStyleSheet("QFrame { background-color: %s }" % self.color.name()) self.resize(width, height) def setup(self): """ Setup the View """ self.setupFont() self.setupPowerLabel() self.setupMovesLabel() self.setupRemainingDefensesLabels() def setupFont(self): """ Setup the Font """ self.font = QFont() self.font.setPointSize(14) def setupPowerLabel(self): """ Setup the Power Label """ self.powerLabel = QLabel("", self) self.powerLabel.move(32, 16) self.powerLabel.setFont(self.font) def setupMovesLabel(self): """ Setup the Moves Label """ self.movesLabel = QLabel("", self) self.movesLabel.move(32, 16+48) self.movesLabel.setFont(self.font) def setupRemainingDefensesLabels(self): """ Setup the Remaining Defenses Labels """ self.remainingDefensesLabels = {} labelNumber = 1 remainingDefenses = self.level.getRemainingDefenses() for defenseClass in remainingDefenses: label = QLabel("", self) label.move(32, 16+48*(labelNumber+1)) label.setFont(self.font) self.remainingDefensesLabels[defenseClass] = label labelNumber += 1 def updateView(self): """ Update the View """ self.updatePowerLabel() self.updateMovesLabel() self.updateRemainingDefensesLabels() def updatePowerLabel(self): """ Update the Power Label """ self.powerLabel.setText("Power: {0}".format(self.level.drone.powerRating.power)) def updateMovesLabel(self): """ Update the Moves Label """ self.movesLabel.setText("Moves: {0}".format(self.level.moveRating.moveCount)) self.movesLabel.resize(self.movesLabel.contentsRect().width(), self.movesLabel.contentsRect().height()) def updateRemainingDefensesLabels(self): """ Update the Remaining Mines Label """ remainingDefenses = self.level.getRemainingDefenses() for defenseClass in remainingDefenses: label = self.remainingDefensesLabels[defenseClass] label.setText("{0} Left: {1}".format(defenseClass.friendlyName, remainingDefenses[defenseClass]))