Exemple #1
0
    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))
Exemple #2
0
    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)
Exemple #3
0
    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))
Exemple #4
0
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)
Exemple #5
0
 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)
Exemple #6
0
 def move_laser_up(self, laserLabel: QGraphicsPixmapItem, newX, newY):
     if newY > 0:
         laserLabel.setPos(newX, newY)
     else:
         laserLabel.hide()
         self.shootLaser.remove_laser(laserLabel)
Exemple #7
0
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()
Exemple #8
0
    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)