def player_laser_enemy_collide(self, enemyLabel: QGraphicsPixmapItem, laserLabel: QGraphicsPixmapItem): try: self.sound_invaderkilled.play() enemyLabel.hide() laserLabel.hide() self.shootLaser.remove_laser(laserLabel) self.shootLaser.remove_enemy(enemyLabel) self.remove_enemy_label(enemyLabel) self.enemyShoot.remove_enemy(enemyLabel) self.moveEnemy.remove_enemy(enemyLabel) if len(self.enemies) == 1: if (self.numberOfPlayer == 1): # Gasenje threadova self.shootLaser.die() self.moveEnemy.die() self.enemyShoot.die() # Unistavanje postojecih projektila na screenu for laser in self.shootLaser.laserLabels: self.removeItem(laser) for laser in self.enemyShoot.lasers: self.removeItem(laser) for shield in self.shields: self.removeItem(shield) self.shields.clear() # Povecavanje nivoa za jedan i restart neprijatelja update gui self.level_numberrr += 1 self.level_advance() self.Widget.setZValue(50) elif (self.numberOfPlayer == 2): # Gasenje threadova self.shootLaser.die() self.moveEnemy.die() self.enemyShoot.die() # Unistavanje postojecih projektila na screenu for laser in self.shootLaser.laserLabels: self.removeItem(laser) for laser in self.enemyShoot.lasers: self.removeItem(laser) for shield in self.shields: self.removeItem(shield) self.shields.clear() # Povecavanje nivoa za jedan i restart neprijatelja update gui self.level_numberrr += 1 self.level_advance() self.Widget.setZValue(50) except Exception as e: print( 'Exception in Main_Thread/player_laser_enemy_collide method: ', str(e))
def enemy_hit_player(self, laserLabel: QGraphicsPixmapItem, playerLabel: QGraphicsPixmapItem): self.sound_shipexplosion.play() laserLabel.hide() if self.player == playerLabel: self.player.loseLife() if self.numberOfPlayer == 2: if self.player2 == playerLabel: self.player2.loseLife() self.update_GUI_lives(self.numberOfPlayer)
def enemy_laser_shield_collide(self, laserLabel: QGraphicsPixmapItem, shieldLabel: QGraphicsPixmapItem): try: self.sound_shipexplosion.play() self.enemyShoot.remove_laser(laserLabel) laserLabel.hide() for shield in self.shields: if shield == shieldLabel: shield.makeDamage() if shield.health <= 0: self.enemyShoot.remove_shield(shield) self.shields.remove(shield) shield.update_shield(shield) except Exception as e: print(str(e))
class NetScene(QGraphicsScene): SPACE_WIDTH = 200 # 留白宽度 def __init__(self, parent, announces, api): super().__init__(parent) self.announces = announces self.api = api api['Scene.setBackgroundColor'] = self.setBackgroundBrush api['Scene.setBackgroundPixmap'] = self.setBackgroundPixmap api['Scene.setLayout'] = self.setLayout api['Scene.renderNode'] = self.renderNode api['Scene.renderEdge'] = self.renderEdge api['Scene.selectedNode'] = lambda: self.selected_node announces['addICNNode'].append(self.addICNNode) announces['addICNEdge'].append(self.addICNEdge) self.node_table = {} # { node_id:node_item, ... } self.edge_table = {} # { edge_id:edge_item, ... } self.cache_pixmap = None self.background_item = QGraphicsPixmapItem() self.addItem(self.background_item) self.selected_node = None def setLayout(self, layout): """ 设置场景中节点的位置 :param layout: {node_id:(x,y), ...} :return: None """ for node_id, (x, y) in layout.items(): self.node_table[node_id].checkPos(x, y) self.adjustBounding() def addICNNode(self, node_id): node_item = NodeItem(node_id) node_item.press_callback = self.pressNode node_item.release_callback = self.releaseNode node_item.double_click_callback = self.announces['doubleClickNode'] node_item.move_callback = self.moveNode self.node_table[node_id] = node_item self.addItem(node_item) self.update() def addICNEdge(self, edge_id): edge_item = EdgeItem(edge_id) edge_item.double_click_callback = self.announces['doubleClickEdge'] src_id, dst_id = edge_id src_item = self.node_table[src_id] dst_item = self.node_table[dst_id] edge_item.adjust(src_item.pos(), dst_item.pos()) self.edge_table[edge_id] = edge_item self.addItem(edge_item) self.update() def renderNode(self, node_id, style: dict): self.node_table[node_id].setStyle(style) def renderEdge(self, edge_id, style: dict): self.edge_table[edge_id].setStyle(style) # ------------------------------------------------------------------------------------------------------------------ def setBackgroundPixmap(self, pixmap): if pixmap is None: self.background_item.hide() else: if self.cache_pixmap is not pixmap: self.cache_pixmap = pixmap self.background_item.setPixmap(pixmap) # 设置位置居中 rect = self.background_item.boundingRect() self.background_item.setPos(-rect.center()) self.background_item.show() def adjustBounding(self): self.setSceneRect( self.itemsBoundingRect().adjusted( -self.SPACE_WIDTH, -self.SPACE_WIDTH, self.SPACE_WIDTH, self.SPACE_WIDTH ) ) self.update() # ------------------------------------------------------------------------------------------------------------------ def pressNode(self, node_id): self.selected_node= node_id self.announces['selectedNode'](self.selected_node) def moveNode(self, src_id): """ 当一个节点位置变化时,调整与该节点链接的边 :param src_id: 节点id :return: None """ graph = self.api['Sim.graph']() # 邻接表{node_id:{neighbor_id, ...}, } src_pos = self.node_table[src_id].pos() for dst_id in graph[src_id]: dst_pos = self.node_table[dst_id].pos() self.edge_table[(src_id, dst_id)].adjust(src_pos, dst_pos) self.edge_table[(dst_id, src_id)].adjust(dst_pos, src_pos) def releaseNode(self, node_id): node_item = self.node_table[node_id] pos = node_item.pos() pos = pos.x(), pos.y() self.announces['sceneNodeMoved'](node_id, pos)
def move_enemy_laser(self, enemyLaser: QGraphicsPixmapItem, newX, newY): if newY < WINDOW_HEIGHT - 50: enemyLaser.setPos(newX, newY) else: enemyLaser.hide() self.enemyShoot.remove_laser(enemyLaser)
def move_laser_up(self, laserLabel: QGraphicsPixmapItem, newX, newY): if newY > 0: laserLabel.setPos(newX, newY) else: laserLabel.hide() self.shootLaser.remove_laser(laserLabel)
class DSO_Scene(QGraphicsScene): def __init__(self, parent=None): super().__init__(0, 0, 540, 440, parent) # we want black background bg = QBrush() bg.setColor(QColor(Qt.black)) bg.setStyle(Qt.SolidPattern) self.setBackgroundBrush(bg) # create paint grid self.grid = DSO_grid(self) self.addItem(self.grid) self.grid.show() # create 3 cursors self.ch1_cursor = DSO_cursor(self, "1", Qt.cyan, "Y") self.addItem(self.ch1_cursor) self.ch2_cursor = DSO_cursor(self, "2", Qt.yellow, "Y") self.addItem(self.ch2_cursor) self.chX_cursor = DSO_cursor(self, "T", Qt.red, "X") self.addItem(self.chX_cursor) # create text boxes to show V/div s/div self.ch1_range = DSO_range(self, "CH1", Qt.cyan) self.ch1_range.setPos(20, 430) self.addItem(self.ch1_range) self.ch2_range = DSO_range(self, "CH2", Qt.yellow) self.ch2_range.setPos(195, 430) self.addItem(self.ch2_range) self.time_range = DSO_range(self, "TIME", Qt.white) self.time_range.setPos(370, 430) self.addItem(self.time_range) self.time_offset = DSO_range(self, "Pos:", Qt.black, Qt.white) self.time_offset.setPos(0, 0) self.addItem(self.time_offset) self.wave1 = DSO_wave(self, Qt.cyan) self.wave1.hide() self.addItem(self.wave1) self.wave2 = DSO_wave(self, Qt.yellow) self.wave2.hide() self.addItem(self.wave2) # finally update screen self.update() self.pixmap = QGraphicsPixmapItem(None) self.addItem(self.pixmap) def updateScreen(self, ch1_data, ch2_data): self.grid.show() if ch1_data["active"]: self.wave1.repaint(ch1_data["samples"]) self.ch1_cursor.setP(2 * (106 - ch1_data["y_offset"])) self.ch1_cursor.show() bw_lim = "" if ch1_data["Bw_limit"]: bw_lim = ", Bw" self.ch1_range.setText("CH1: " + str(ch1_data["V_div"]) + "V/div, " + ch1_data["couple"] + bw_lim) else: self.wave1.hide() self.ch1_cursor.hide() self.ch1_range.setText("CH1: OFF") if ch2_data["active"]: self.wave2.repaint(ch2_data["samples"]) self.ch2_cursor.setP(2 * (106 - ch2_data["y_offset"])) self.ch2_cursor.show() bw_lim = "" if ch2_data["Bw_limit"]: bw_lim = ", Bw" self.ch2_range.setText("CH2: " + str(ch2_data["V_div"]) + "V/div, " + ch2_data["couple"] + bw_lim) else: self.wave2.hide() self.ch2_cursor.hide() self.ch2_range.setText("CH2: OFF") logging.debug(" %d", ch1_data["x_offset"]) logging.debug(" %d", ch2_data["x_offset"]) if ch2_data["x_offset"] == ch1_data["x_offset"]: self.chX_cursor.setRotation(0) self.chX_cursor.setP(2 * (ch2_data["x_offset"]) + 14) self.time_offset.setPos(2 * (ch2_data["x_offset"]), -15) self.time_offset.setText("Pos: " + utils.float2engstr( (125 - ch2_data["x_offset"]) * ch1_data["s_div"] / 25) + "s") else: self.chX_cursor.setP(20) self.chX_cursor.setRotation(90) self.time_offset.setPos(20, -15) self.time_offset.setText("Pos: " + utils.float2engstr( (125 - ch1_data["x_offset"] + 256 - ch2_data["x_offset"]) * ch1_data["s_div"] / 25) + "s") self.time_range.setText("TIME: " + utils.float2engstr(ch1_data["s_div"]) + "s/div") self.pixmap.hide() self.update() def showPixmap(self, pixmap): self.wave1.hide() self.ch1_cursor.hide() self.wave2.hide() self.ch2_cursor.hide() self.grid.hide() logging.info("Inf: Showing pixmap") # self.pixmap = QGraphicsPixmapItem(pixmap, None, self) self.pixmap.setPixmap(pixmap) self.pixmap.setPos(-50, -20) self.pixmap.show() self.update()
def __init_ui(self): # set up the scene self.scene = QGraphicsScene() self.scene.setSceneRect(0, 0, 650, 560) self.scene.setBackgroundBrush(Qt.darkGray) # set up the view self.setScene(self.scene) # these 10 additional pixels are for the margin self.setFixedSize(660, 570) # optimization self.setOptimizationFlag(QGraphicsView.DontAdjustForAntialiasing) self.setOptimizationFlag(QGraphicsView.DontSavePainterState) self.setCacheMode(QGraphicsView.CacheBackground) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setViewport(QGLWidget(QGLFormat())) self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) for imgUrl in self.config.hiscoreAnimation: pixmap = QPixmap(imgUrl) pixmapItem = QGraphicsPixmapItem(pixmap) pixmapItem.setZValue(-1) pixmapItem.hide() self.scene.addItem(pixmapItem) self.hiscoreAnimationItems.append(pixmapItem) for imgUrl in self.config.winnerScreenTieAnimation: pixmap = QPixmap(imgUrl) pixmapItem = QGraphicsPixmapItem(pixmap) pixmapItem.setZValue(-1) pixmapItem.hide() self.scene.addItem(pixmapItem) self.winnerScreenTieAnimationItems.append(pixmapItem) for imgUrl in self.config.winnerScreenPlayer1Animation: pixmap = QPixmap(imgUrl) pixmapItem = QGraphicsPixmapItem(pixmap) pixmapItem.setZValue(-1) pixmapItem.hide() self.scene.addItem(pixmapItem) self.player1AnimationItems.append(pixmapItem) for imgUrl in self.config.winnerScreenPlayer2Animation: pixmap = QPixmap(imgUrl) pixmapItem = QGraphicsPixmapItem(pixmap) pixmapItem.setZValue(-1) pixmapItem.hide() self.scene.addItem(pixmapItem) self.player2AnimationItems.append(pixmapItem) # points animation used when single player is played self.hudHiscorePlayerTotalPointsWhite = HudHiscoreTotalPlayerPointsContainer( self.config, "white", self.firstPlayerTotalPoints) self.hudHiscorePlayerTotalPointsWhite.setPos(45, 235) self.hudHiscorePlayerTotalPointsWhite.hide() self.scene.addItem(self.hudHiscorePlayerTotalPointsWhite) self.hudHiscorePlayerTotalPointsList.append( self.hudHiscorePlayerTotalPointsWhite) self.hudHiscorePlayerTotalPointsGray = HudHiscoreTotalPlayerPointsContainer( self.config, "gray", self.firstPlayerTotalPoints) self.hudHiscorePlayerTotalPointsGray.setPos(45, 235) self.hudHiscorePlayerTotalPointsGray.hide() self.scene.addItem(self.hudHiscorePlayerTotalPointsGray) self.hudHiscorePlayerTotalPointsList.append( self.hudHiscorePlayerTotalPointsGray) self.hudHiscorePlayerTotalPointsDarkGray = HudHiscoreTotalPlayerPointsContainer( self.config, "darkGray", self.firstPlayerTotalPoints) self.hudHiscorePlayerTotalPointsDarkGray.setPos(45, 235) self.hudHiscorePlayerTotalPointsDarkGray.hide() self.scene.addItem(self.hudHiscorePlayerTotalPointsDarkGray) self.hudHiscorePlayerTotalPointsList.append( self.hudHiscorePlayerTotalPointsDarkGray) self.hudHiscorePlayerTotalPointsBlue = HudHiscoreTotalPlayerPointsContainer( self.config, "blue", self.firstPlayerTotalPoints) self.hudHiscorePlayerTotalPointsBlue.setPos(45, 235) self.hudHiscorePlayerTotalPointsBlue.hide() self.scene.addItem(self.hudHiscorePlayerTotalPointsBlue) self.hudHiscorePlayerTotalPointsList.append( self.hudHiscorePlayerTotalPointsBlue) self.hudHiscorePlayerTotalPointsDarkBlue = HudHiscoreTotalPlayerPointsContainer( self.config, "darkBlue", self.firstPlayerTotalPoints) self.hudHiscorePlayerTotalPointsDarkBlue.setPos(45, 235) self.hudHiscorePlayerTotalPointsDarkBlue.hide() self.scene.addItem(self.hudHiscorePlayerTotalPointsDarkBlue) self.hudHiscorePlayerTotalPointsList.append( self.hudHiscorePlayerTotalPointsDarkBlue) # used when there are two players playing self.hudFirstPlayerTotalPoints = HudEndOfStageTotalPlayerPointsContainer( self.config, self.firstPlayerTotalPoints) self.hudFirstPlayerTotalPoints.setPos(85, 205) self.hudFirstPlayerTotalPoints.hide() self.scene.addItem(self.hudFirstPlayerTotalPoints) self.hudSecondPlayerTotalPoints = HudEndOfStageTotalPlayerPointsContainer( self.config, self.secondPlayerTotalPoints) self.hudSecondPlayerTotalPoints.setPos(450, 205) self.hudSecondPlayerTotalPoints.hide() self.scene.addItem(self.hudSecondPlayerTotalPoints)