Example #1
0
 def update(self):
     pygame.display.update()
     Base.CurrentScreen.fill(self.background)
     self.clock.tick(Con.FPS)
     Base.addTime()
Example #2
0
    def gameloop(self, playerNum=1):
        pygame.init()
        result = None
        self.running = True
        self.manager = Controller.LocalManager(self.frame)  #
        pygame.display.set_caption(self.caption)
        sw, sh = self.frame.get_size()

        player_1 = Player(self.frame)  #

        # 创建玩家
        self.manager.addPlayer(player_1)  #
        for i in range(playerNum - 1):  #
            self.manager.addPlayer(Player(self.frame))  #
        # 创建敌人
        for i in range(self.enemy_num):  #
            one_enemy = Enemy(self.frame)  #
            self.manager.addEnemy(one_enemy)  #

        try:
            self.manager.startGame()
            while self.running:
                events = pygame.event.get()
                for event in events:
                    if event.type == pygame.KEYDOWN:
                        if event.key == pygame.K_ESCAPE:
                            return
                        if event.key == pygame.K_LALT:
                            Base.setting()
                    if event.type == pygame.QUIT:
                        return

                # 更新敌人和玩家状态
                situation, process, result = self.manager.updateSituation()  #
                if situation == WIN:
                    raise Exception("Winning!")
                if situation == LOST:
                    raise Exception("Lost...")

                # 计算信息
                message = f'Enemies:{self.enemy_num} ' \
                          f'Escapes:{self.manager.enemyHandler.escapeCount()} ' \
                          f'Second:{Base.getTimeSec():.1f} ' \
                          f'Process:{process:.2%}'

                # 摆放顶部文字
                text1 = self.Font.render(message, True, Con.TextColor)
                w, h = text1.get_size()
                sizeratio = w / sw
                text1after = pygame.transform.scale(text1, (int(sw), int(h / sizeratio)))
                aw = text1after.get_rect().width
                Base.CurrentScreen.blit(text1after, (int(sw / 2 - aw / 2), 0))  # 为了第一人称时方便观看数据,打印到root

                # 显示帧率
                if Con.FPSShowing:
                    Base.printFPS(int(self.clock.get_fps()))

                # 刷新页面
                self.flush(player_1.pos)
                self.clock.tick(Con.FPS)
                Base.addTime()
        finally:
            traceback.print_exc()
            self.close()
            return result
Example #3
0
    def showMenu(self):
        while True:
            events = pygame.event.get()
            for e in events:
                if e.type == pygame.QUIT:
                    self.close()
                    return False, None
                if e.type == pygame.VIDEORESIZE:
                    if Con.FullScreen:  # 全屏不缩放
                        continue
                    if Con.ScreenSize[0] != e.size[0]:  # 横改变
                        width = e.size[0]
                        height = int(e.size[0] / Con.ScreenSizeRatio)
                    else:  # 纵改变
                        height = e.size[1]
                        width = int(e.size[1] * Con.ScreenSizeRatio)
                    size = max(width, Con.MinSize[0]), max(height, Con.MinSize[1])
                    self.resize(size, pygame.RESIZABLE)
                if e.type == pygame.MOUSEBUTTONDOWN:
                    if Base.mouseInRect(self.startRect):
                        return ['c', 's'][self.chooseServer], [self.cUI, self.sUI][self.chooseServer].getText()
                    if Base.mouseInRect(self.backRect):
                        self.close()
                        return False, None
                    if Base.mouseInRect(self.toggleRect):
                        self.toggle()
                if e.type == pygame.KEYDOWN:
                    if e.key in self.fullKeys:
                        self.fullScreen()
                    if e.key in self.toggleSCKeys:
                        self.toggle()
                    if e.key in self.quitKeys:
                        self.close()
                        return False, None
                    if e.key in self.refreshKeys:
                        self.__init__()
                    if e.key in self.startKeys:
                        return ['c', 's'][self.chooseServer], [self.cUI, self.sUI][self.chooseServer].getText()
                    if e.key in self.settingKeys:
                        self.setting()
            Base.CurrentScreen.fill(Con.BackGround)
            # 显示对应UI
            ui = self.sUI if self.chooseServer else self.cUI
            ui.update(events)
            ui.pack()
            # 摆放底部文字
            bottom = 'Create ' + ["CLIENT", "SERVER"][self.chooseServer] + ' [SPACE] to toggle'
            textbottom = self.font.render(
                bottom,
                True, Con.TextColor, self.sOrcColor.calcColor()
            )
            w, h = textbottom.get_size()
            sw, sh = Base.CurrentScreen.get_size()
            mouseposx, mouseposy = pygame.mouse.get_pos()
            textbottommovedistansex = sw - w
            textbottompos = (int(textbottommovedistansex * mouseposx / sw), sh - textbottom.get_height())  # 浮动式摆法
            Base.CurrentScreen.blit(textbottom, textbottompos)
            self.startRect = pygame.Rect([*textbottompos, *textbottom.get_size()])
            # 返回按钮
            back = self.font.render('Back', True, Con.TextColor)
            backPos = (0, 0)
            Base.CurrentScreen.blit(back, backPos)
            self.backRect = pygame.Rect([*backPos, *back.get_size()])
            # 切换按钮
            toggle = self.font.render('Toggle', True, Con.TextColor, self.sOrcColor.calcColor())
            togglePos = (
                int(Base.CurrentScreen.get_width() - toggle.get_width()),
                0
            )
            Base.CurrentScreen.blit(toggle, togglePos)
            self.toggleRect = pygame.Rect([*togglePos, *toggle.get_size()])

            # 显示帧率
            if Con.FPSShowing:
                Base.printFPS(int(self.clock.get_fps()))

            # 刷新
            Base.flushAll()
            pygame.display.update()
            self.clock.tick(Con.FPS)
            Base.addTime()