示例#1
0
    def render(self):
        display.blit(background, (0, 0))  # отрисовка заднего фона

        # отрисовка кнопок изменения громкости
        self.exit_btn.draw(0, 0)
        self.volume_up_btn.draw(0, 0)
        self.volume_down_btn.draw(0, 0)

        # отрисовка надписи и значения 'music volume'
        display.blit(music_volume_image, (60, 110))
        drawing_text(str(int(self.music_volume)), (680, 120),
                     font_color=(255, 255, 255),
                     font_size=72,
                     font_type='corp_round_v1.ttf')

        # отрисовка кнопок изменения скорости нот
        self.speed_up_btn.draw(0, 0)
        self.speed_down_btn.draw(0, 0)

        # отрисовка надписи и значения 'scroll speed'
        display.blit(scroll_speed_image, (60, 260))
        drawing_text(str(self.scroll_speed) + ' px', (680, 270),
                     font_color=(255, 255, 255),
                     font_size=72,
                     font_type='corp_round_v1.ttf')

        # отрисовка кнопки подтверждения изменений
        self.confrim_btn.draw(0, 0)
示例#2
0
    def draw(self):
        display.blit(pygame.image.load('image/StartMenu.jpg'), (0, 0))

        drawing_text('Выберите персонажа',
                     345,
                     70,
                     font_color=pygame.Color('white'),
                     font_size=40)
        name = self.list_chr[self.ind_chr][0]
        drawing_text(name, (1185 - len(name) * 40) // 2,
                     140,
                     font_color=pygame.Color('grey'),
                     font_size=40)

        for i in range(2):
            name, cords = self.list_chr[i]
            display.blit(pygame.image.load(f'image/{name}_0.png'), cords)
            if i != self.ind_chr:
                x, y = pygame.mouse.get_pos()
                if cords[0] < x < cords[0] + 96 and cords[
                        1] < y < cords[1] + 120:
                    display.blit(
                        pygame.image.load('image/select_square_1.png'), cords)
            else:
                display.blit(pygame.image.load('image/select_square_0.png'),
                             cords)

        self.confirm_button.draw(0, 0)
示例#3
0
    def draw(self, x, y, size=32):
        mouse = pygame.mouse.get_pos()
        click = pygame.mouse.get_pressed()

        if self.x < mouse[0] < self.x + self.width and self.y < mouse[
                1] < self.y + self.height:
            image = self.image[self.ind_image // self.count_img]
            self.glow_transparency += glow_v / fps
            self.glow_transparency = min(self.glow_transparency, 255)
            if self.glow:
                self.glow.set_alpha(self.glow_transparency)
            if self.ind_image != self.count_img**2 - 1:
                self.ind_image += 1
            if click[0] and self.func:
                self.func()
        else:
            image = self.image[self.ind_image // self.count_img]
            if self.ind_image != 0:
                self.ind_image -= 1
            self.glow_transparency -= glow_v / fps
            self.glow_transparency = max(self.glow_transparency, 0)
            if self.glow:
                self.glow.set_alpha(self.glow_transparency)
        if self.glow:
            display.blit(self.glow, (self.x, self.y))
        display.blit(image, (self.x, self.y))
        drawing_text(self.text, (x, y), (0, 0, 0), size)
示例#4
0
    def draw(self, x, y, size=32):
        mouse = pygame.mouse.get_pos()
        click = pygame.mouse.get_pressed()

        if self.x < mouse[0] < self.x + self.width and self.y < mouse[
                1] < self.y + self.height:
            image = self.image_on
            if click[0]:
                self.func()
        else:
            image = self.image_off

        display.blit(image, (self.x, self.y))
        drawing_text(self.text, x, y, (0, 0, 0), size)
示例#5
0
    def show_points(self):  # отрисовка статистики игрока
        score = str(self.score)  # общий счет игрока
        score = '0' * (10 - len(score)) + score  # добавление нулей если число меньше миллиарда
        display.blit(self.score_surface, (670, 30))  # обновление области общего счета
        drawing_text(score, (670, 40), pygame.Color('white'), font_size=40,
                     font_type='corp_round_v1.ttf')  # отрисовка общего счета

        sum_marks = sum(self.count_marks.values())  # кол-во всех полученных оценок
        if sum_marks != 0:  # подсчет точности описан в файле ReadMe.txt
            self.accuracy = (self.score - 19 * self.count_marks[301]) / (sum_marks * 300) * 100
            if self.accuracy > 100:
                self.accuracy = 100
        display.blit(self.acc_surface, (670, 90))  # обновление точности
        drawing_text(str(('%.2f' % self.accuracy)) + ' %', (670, 100), pygame.Color('white'),
                     font_size=40, font_type='corp_round_v1.ttf')  # отрисовка точности

        display.blit(self.combo_surface, (670, 150))  # обновление комба игрока
        drawing_text(str(self.combo) + 'x', (670, 160), pygame.Color('white'), font_size=40,
                     font_type='corp_round_v1.ttf')  # отрисовка комба

        # отрисовка полоски способности персонажа
        if self.character == 0 or self.character == 1 or self.character == 3:
            if self.activate_ability:  # если способность персонажа активна
                self.ability_score += 50  # уменьшается полоска способности
                if self.ability_score == 10000:
                    self.activate_ability = False  # способность отключается
            elif self.ability_score > 0: # способность накапливаться пока не заполнена
                self.ability_score -= 5  # заполняется способность медленне, чем тратиться(в 10 раз)
            self.ability_sprite.update()  # обновление полоски способности персонажа
            pygame.draw.rect(display, (37, 25, 45), (672, 232, 371 * self.ability_score // 10000,
                                                     24))  # отрисовка не заполненой области
示例#6
0
    def render(self):
        display.blit(menu_background[0],
                     (0, 0))  # отрисовка изображений заднего фона
        display.blit(menu_background[1], (0, 620))
        display.blit(menu_background[2], (0, 0))

        chr = character_list[self.ind_chr]  # спрайт отображаемого персонажа
        if self.ind_chr == self.character:  # отрисовка круга выбранного персонажа
            pygame.draw.circle(display, (212, 84, 182), (565, 385), 220)
        chr.update()
        text, cords = self.names_chr[
            self.ind_chr]  # имя и координаты имени персонажа
        drawing_text(text,
                     cords,
                     font_color=pygame.Color('White'),
                     font_size=70)  # отрисовка имени
        text = character_ability[
            self.ind_chr]  # описание способности персонажа
        for i in range(
                len(text)
        ):  # отрисовка описание способности персонажа(тень текста)
            drawing_text(text[i], (240 - 10 * i + 2, 600 + 30 * i + 2),
                         font_size=30,
                         font_color=pygame.Color('Black'))
        for i in range(
                len(text)
        ):  # отрисовка описание способности персонажа(основной текст)
            drawing_text(text[i], (240 - 10 * i, 600 + 30 * i),
                         font_color=pygame.Color('White'),
                         font_size=30)

        # отрисовка кнопок
        self.exit_btn.draw(0, 0)  # выход к экрану выбора карт
        self.confirm_btn.draw(0, 0)  # подтвердить выбранного персонажа
        self.left_button.draw(0, 0)  # прошлый персонаж
        self.right_button.draw(0, 0)  # следующий персонаж
示例#7
0
    def __init__(self, maps):
        settings_values = load_settings()
        self.result = -1  # переменная для отслеживания состояния экрана

        self.maps = maps
        # создание кнопок
        self.exit_btn = Button(-30,
                               615,
                               222,
                               92,
                               '',
                               exit_button_image,
                               self.back,
                               glow=glow_left)

        self.chr_btn = Button(-30,
                              -30,
                              223,
                              92,
                              '',
                              chr_button_image,
                              self.chr_menu,
                              glow=glow_left)

        self.play_btn = Button(908,
                               650,
                               222,
                               92,
                               '',
                               play_button_image,
                               self.start_game,
                               glow=glow_right)

        self.settings_btn = Button(908,
                                   0,
                                   223,
                                   92,
                                   '',
                                   settings_button_image,
                                   self.open_settings,
                                   glow=glow_right)
        self.active_map = 0
        self.maps[0][0] -= 30
        self.menu_background = self.maps[self.active_map][2].background
        # загрузка аудиофайла
        map = f'maps/{self.maps[0][2].dir}/{self.maps[0][2].general["AudioFilename"]}'
        pygame.mixer.music.load(map)
        pygame.mixer.music.set_volume(0.1 *
                                      int(settings_values['music_volume']))
        pygame.mixer.music.play(-1)

        # загрузка рекордов для всех карт
        self.records = {}
        con = sqlite3.connect('records.db')
        cur = con.cursor()
        result = cur.execute("SELECT * FROM Records")
        for elem in result:
            # преобразование элементов словаря с рекордами
            # из текста в изображения с текстом
            elem = list(elem)
            elem[6] = 'Сыграно ' + elem[6] + ', ' + elem[7]
            elem[3] = 'Score: ' + str(elem[3])
            elem[5] = 'Combo: ' + str(elem[5]) + 'x'
            elem[4] = str('%.2f' % elem[4]) + '%'
            for i in range(3, 8):
                elem[i] = drawing_text(str(elem[i]), (-100, -100),
                                       font_color=(255, 255, 255),
                                       font_size=15)
            if elem[1] in self.records:
                self.records[elem[1]].append(elem)
            else:
                self.records[elem[1]] = [elem]
        for i in self.records:
            self.records[i] = list(reversed(self.records[i]))
        self.cache = {}  # кеш для быстрой отрисовки текста
示例#8
0
    def render(self):
        mouse = pygame.mouse.get_pos()
        click = pygame.mouse.get_pressed()
        display.blit(self.menu_background, (0, 0))
        display.blit(back_mask, (0, 0))
        for i, elem in enumerate(self.maps):
            x, y, map = elem
            if 1020 >= y >= -60:  # отрисовка карты на экране
                if 500 <= mouse[0] and y <= mouse[1] <= y + 80 and mouse[
                        1] <= 720 - 96:
                    # отрисовка, если на карту наведен курсор
                    # сдвиг прямоугольника карты влево
                    self.maps[i][0] -= shift_v / fps
                    self.maps[i][0] = min(self.maps[i][0], 500)
                    self.maps[i][0] = max(470, self.maps[i][0])
                    display.blit(song_rect_active, (x, y))
                    if click[0]:  # если курсор нажали
                        # смена активной карты
                        self.maps[self.active_map][0] += 30
                        self.active_map = i
                        map = self.maps[self.active_map][2]
                        self.menu_background = map.background
                        self.maps[i][0] -= 30
                        self.maps[i][0] = min(self.maps[i][0], 500)
                        self.maps[i][0] = max(470, self.maps[i][0])
                        pygame.mixer.music.load(
                            f'maps/{map.dir}/{map.general["AudioFilename"]}')
                        pygame.mixer.music.set_volume(
                            0.1 * int(settings_values['music_volume']))
                        pygame.mixer.music.play(-1)

                else:
                    # отрисовка карты если курсор на нее не наведен
                    if i != self.active_map:  # сдвиг карты влево
                        self.maps[i][0] += shift_v / fps
                    self.maps[i][0] = min(self.maps[i][0], 500)
                    self.maps[i][0] = max(470, self.maps[i][0])
                    display.blit(song_rect, (x, y))
                song_background = map.small_background
                display.blit(song_background, (x, y))
                title, artist, creator, version = map.title, map.artist, map.creator, map.version
                # отрисовка текста об карте с сохранением изображений текста
                if title in self.cache:
                    display.blit(self.cache[title], (x + 130, y + 10))
                else:
                    self.cache[title] = drawing_text(title, (x + 130, y + 10),
                                                     font_color=pygame.Color(
                                                         255, 255, 255),
                                                     font_size=20)
                if artist in self.cache:
                    display.blit(self.cache[artist], (x + 130, y + 32))
                else:
                    self.cache[artist] = drawing_text(artist,
                                                      (x + 130, y + 32),
                                                      font_color=pygame.Color(
                                                          200, 200, 200),
                                                      font_size=15,
                                                      italic=True)
                if version in self.cache:
                    display.blit(self.cache[version], (x + 130, y + 50))
                else:
                    self.cache[version] = drawing_text(version,
                                                       (x + 130, y + 50),
                                                       font_color=pygame.Color(
                                                           255, 255, 255),
                                                       font_size=23)
        # отрисовка кнопок, полосок меню
        display.blit(menu_back_plus, (0, 620))
        display.blit(menu_plus, (0, 0))
        self.play_btn.draw(0, 0)
        self.exit_btn.draw(0, 0)
        self.play_btn.draw(0, 0)
        self.chr_btn.draw(0, 0)
        self.settings_btn.draw(0, 0)
        # удаление из словаря с рекордами рекорда, если для какой-то карты их больше 6
        if int(self.maps[self.active_map][2].map_id) in self.records:
            while len(self.records[int(
                    self.maps[self.active_map][2].map_id)]) > 6:
                self.records[int(self.maps[self.active_map][2].map_id)].pop()
            records = self.records[int(self.maps[self.active_map][2].map_id)]
        else:
            records = []
        for y, elem in enumerate(records):  # отрисовка рекорда
            elem_id, map_id, mapset_id, score, accuracy, combo, date, time = elem
            y *= 90
            y += 100
            display.blit(records_rect, (-200, y))
            display.blit(date, (10, y + 10))
            display.blit(score, (10, y + 30))
            display.blit(accuracy, (300, y + 60))
            display.blit(combo, (10, y + 50))
示例#9
0
    def render(self):
        display.blit(background, (0, 0))
        display.blit(self.rank, (775, 110))

        # отрисовка точности игрока
        drawing_text(self.accuracy, (790, 400), (255, 255, 255), 60, font_type='corp_round_v1.ttf')
        display.blit(miss, (0, 40))
        drawing_text(self.marks[0], (65, 100), (200, 0, 0), 50, font_type='corp_round_v1.ttf')

        # отрисовка набранных оценок
        display.blit(bad, (290, 40))
        drawing_text(self.marks[1], (355, 100), (230, 0, 150), 50, font_type='corp_round_v1.ttf')

        display.blit(good, (0, 170))
        drawing_text(self.marks[2], (65, 230), (0, 185, 230), 50, font_type='corp_round_v1.ttf')

        display.blit(great, (290, 170))
        drawing_text(self.marks[3], (355, 230), (0, 230, 30), 50, font_type='corp_round_v1.ttf')

        display.blit(perfect, (0, 320))
        drawing_text(self.marks[4], (65, 390), (255, 255, 75), 50, font_type='corp_round_v1.ttf')

        display.blit(marvelous, (290, 315))
        drawing_text(self.marks[5], (355, 390), (235, 250, 255), 50, font_type='corp_round_v1.ttf')

        # отрисовка максимального комбо игрока
        drawing_text(self.count_combo, (210, 520), (255, 255, 255), 50, font_type='corp_round_v1.ttf')
        score_width = len(self.score) * 25
        x = 890 - score_width // 2
        drawing_text(self.score, (x, 530), (255, 255, 255), 50, font_type='corp_round_v1.ttf')

        self.back_btn.draw(0, 0)
        self.restart_btn.draw(0, 0)