Example #1
0
def main():
    pygame.init()
    screen = pygame.display.set_mode((xRes, yRes))
    pygame.display.set_caption('Roguelike')

    animationIndex, spriteIndex = 0, 0
    clock = pygame.time.Clock()
    player = Entity(level)

    loadTextures()
    loadLevel(tileData, decorationData, level)

    while True:
        clock.tick(24)

        player.isMoving = False
        player.dx, player.dy = 0, 0

        keys = pygame.key.get_pressed()
        if keys[K_ESCAPE]: return
        if keys[K_UP]:
            player.isMoving = True
            player.dy = -2 * gameScale
        if keys[K_DOWN]:
            player.isMoving = True
            player.dy = 2 * gameScale
        if keys[K_LEFT]:
            player.isFacingRight = False
            player.isMoving = True
            player.dx = -2 * gameScale
        if keys[K_RIGHT]:
            player.isFacingRight = True
            player.isMoving = True
            player.dx = 2 * gameScale
        if keys[K_z]:
            player.isCasting = True
            animationIndex = 0

        mouse_pos = pygame.mouse.get_pos(
        )  # ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ указатСля ΠΌΡ‹ΡˆΠΈ
        ## ΠžΠ‘Π ΠΠ‘ΠžΠ’ΠšΠ ΠΠΠ–ΠΠ’Π˜Π™ ΠšΠ›ΠΠ’Π˜ΠΠ’Π£Π Π« И МЫШИ ##
        for event in pygame.event.get(
        ):  # добавляСм свой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π² Ρ†ΠΈΠΊΠ» получСния сообщСний ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹
            if event.type == MOUSEBUTTONDOWN:  # Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ событиС - Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ
                #mouse_pos = event.pos # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ x,y ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΌΡ‹ΡˆΠΈ Π½Π° экранС ΠΈΠ³Ρ€Ρ‹
                for cur_obj in gameObjectList:  # Для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² провСряСм ΠΏΠΎΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ курсора ΠΌΡ‹ΡˆΠΈ Π² этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
                    pos_in_mask = mouse_pos[0] - cur_obj.img_rect.x, mouse_pos[
                        1] - cur_obj.img_rect.y  # вычислСниС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ курсора ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ маски прозрачности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
                    if cur_obj.img_rect.collidepoint(
                            mouse_pos
                    ) and cur_obj.img_mask.get_at(
                            pos_in_mask
                    ) == 1:  # провСряСм, находится Π»ΠΈ ΠΌΡ‹ΡˆΡŒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π΅Π½ Π»ΠΈ пиксСль, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ
                        cur_obj_name = 'unnamed'  ### имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ бСзымянный
                        if 'ObjectName' in cur_obj.obj_props:  ### Ссли Π² словарС Π΅ΡΡ‚ΡŒ свойство Π˜ΠΌΡΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°
                            cur_obj_name = cur_obj.obj_props[
                                "ObjectName"]  ### создаСм надпись с этим ΠΈΠΌΠ΅Π½Π΅ΠΌ
                        new_text_obj = models.TextObject(
                            [mouse_pos[0], mouse_pos[1]], cur_obj_name,
                            white_color, 1500
                        )  # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ тСкстовый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ указатСля ΠΌΡ‹ΡˆΠΈ, тСкстом, Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ΄ ΠΌΡ‹ΡˆΠΊΠΎΠΉ, Π±Π΅Π»Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΡˆΡ€ΠΈΡ„Ρ‚Π°white_color ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ сущСствования 1500 миллисСукнд
                        new_text_obj.time1 = time.time(
                        )  # Π² свойство тСкстового ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° time1 заносим врСмя, ΠΊΠΎΠ³Π΄Π° этот тСкст создан

                        if pygame.mouse.get_pressed(
                        )[2]:  ### Ссли Π½Π°ΠΆΠ°Ρ‚Π° ΠŸΠ ΠΠ’ΠΠ― ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ
                            textObjectList.append(
                                new_text_obj
                            )  # ДобавляСм Π½ΠΎΠ²ΡƒΡŽ надпись(тСкстовый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚) Π² список всСх надписСй
                        else:  ### Ссли Π½Π°ΠΆΠ°Ρ‚Π° ЛЕВАЯ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ, Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
                            cur_obj.follow_mouse = True  # устанавливаСм Ρ„Π»Π°Π³ слСдования Π·Π° ΠΌΡ‹ΡˆΠΊΠΎΠΉ(Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΡ‹ΡˆΠΊΠΎΠΉ)
                            cur_obj.follow_mouse_offset = [
                                mouse_pos[0] - cur_obj.pos[0],
                                mouse_pos[1] - cur_obj.pos[1]
                            ]  # смСщСниС ΠΌΡ‹ΡˆΠΊΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ области ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

                        break  # послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ΄ ΠΌΡ‹ΡˆΠΊΠΎΠΉ, Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ появлялось нСсколько надписСй Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС

            elif event.type == pygame.KEYUP:
                if event.key == pygame.K_e:  ### Если Π½Π° ΠΊΠ»Π°Π²ΠΈΡ‚ΡƒΡ€Π΅ Π½Π°ΠΆΠ°Ρ‚Π° клавиша 'e'
                    if World.edit_mode == None:  ### Π’ΠΊΠ»ΡŽΡ‡Π°Π΅v Ρ€Π΅ΠΆΠΈΠΌ EDIT(РСдактирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²)
                        mode_text_obj = models.TextObject(
                            [10, 10], "EDIT", white_color, -1,
                            40)  ### создаСм надпись слСва Π²Π²Π΅Ρ€Ρ…Ρƒ
                        textObjectList.append(
                            mode_text_obj
                        )  ### ДобавляСм надпись Π² список всСх тСкстовых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
                        World.edit_mode = textObjectList[len(textObjectList) -
                                                         1]
                    else:  ### Если Ρ€Π΅ΠΆΠΈΠΌ РСдактирования ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½,
                        textObjectList.remove(
                            World.edit_mode)  ### УдаляСм надпись
                        World.edit_mode = None  ### ΠžΡ‚ΠΌΠ΅Π½ΡΠ΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌ РСдактирования(EDIT)
                        ## ΠŸΡ€ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° рСдактирования, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² консоль всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹
                        all_objects_dict = []  ###список со всСми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ
                        for i in range(len(gameObjectList) -
                                       1):  ### Для всСх ΠΎΡŽΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΈΠ³Ρ€Π΅
                            cur_obj = gameObjectList[i]  ###Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
                            new_obj_dict = {
                                'obj_props': cur_obj.
                                obj_props,  ### всС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° заносим Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ
                                'posX': cur_obj.pos[0],  ### ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ X
                                'posY': cur_obj.pos[1],  ### ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ Y
                                'width':
                                cur_obj.img_rect.w,  ### Π¨ΠΈΡ€ΠΈΠ½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ
                                'height':
                                cur_obj.img_rect.h  ### Высота ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ
                            }
                            all_objects_dict.append(
                                new_obj_dict
                            )  ### добавляСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с описаниСм Π² список всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
                        json_dump = json.dumps(
                            all_objects_dict
                        )  ### Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ описаниС всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ³Ρ€Ρ‹ Π² json-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅
                        print(json.dumps(
                            json_dump))  ### Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ json Π² консоль
                elif event.key == pygame.K_r:  ### ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°ΠΌΠΎΠΊ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
                    if World.show_rects:  ### Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ
                        World.show_rects = False  ### Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌ
                    else:  ### Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ, Ссли ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ
                        World.show_rects = True

            elif event.type == QUIT:
                return

        if animationIndex < 9:
            animationIndex += 1
        else:
            animationIndex = 0
            player.isCasting = False
            player.isMoving = False

        if player.isCasting:
            spriteIndex = 3
        elif player.isMoving:
            spriteIndex = 2
        else:
            spriteIndex = 0

        player.image, player.rect = playerTextures[spriteIndex][animationIndex]
        if not player.isFacingRight:
            player.image = pygame.transform.flip(player.image, True, False)

        pX, pY = player.update()
        for y in range(0, 16):
            for x in range(0, 16):
                screen.blit(
                    level.getTileAt(x, y).image,
                    (x * 16 * gameScale,
                     y * 16 * gameScale + level.getTileAt(x, y).offsetY))
                if (level.getDecorationAt(x, y) is not None):
                    screen.blit(
                        level.getDecorationAt(x, y).image,
                        (x * 16 * gameScale, y * 16 * gameScale +
                         level.getDecorationAt(x, y).offsetY))
                if ((x, y - 1) == (pX, pY)):
                    screen.blit(
                        player.image,
                        (player.x + player.offsetX, player.y + player.offsetY))

## ΠžΠ’Π Π˜Π‘ΠžΠ’ΠšΠ ΠžΠ‘ΠͺΠ•ΠšΠ’ΠžΠ’ ##
        player_pos = (player.x + player.offsetX, player.y + player.offsetY
                      )  #позиция ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ x,y
        for indx, _ in enumerate(
                gameObjectList):  #Π² массивС всСх созданным Π½Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
            cur_obj = gameObjectList[indx]
            if cur_obj.follow_mouse:  # Если установлСн Ρ„Π»Π°Π³ слСдования Π·Π° ΠΌΡ‹ΡˆΠΊΠΎΠΉ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ взят)
                if World.edit_mode != None or (
                        'CanMove' in cur_obj.obj_props
                        and cur_obj.obj_props['CanMove'] == 'True'
                ):  ### Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ рСдактирования(EDIT)
                    # ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ состояния наТатия всСх ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡ‹ΡˆΠΈ
                    if pygame.mouse.get_pressed(
                    )[0]:  # провСряСм, Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ ЛЕВАЯ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ
                        newPosX = mouse_pos[0] - cur_obj.follow_mouse_offset[
                            0]  # высчитываСм Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ смСщСния X-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ
                        newPosY = mouse_pos[1] - cur_obj.follow_mouse_offset[
                            1]  # Y-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ
                        cur_obj.set_position(
                            [newPosX, newPosY]
                        )  # ΠΏΡ€ΠΈ Π·Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΌΡ‹ΡˆΠΈ, пСрСносим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΌΡ‹ΡˆΠΈ
                    else:  # Ссли лСвая ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π°, бросаСм ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚
                        cur_obj.follow_mouse = False  # ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ слСдованиС Π·Π° ΠΌΡ‹ΡˆΡŒΡŽ(бросаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚)
                        gameObjectList.sort(
                            key=lambda x: x.pos[1] + x.lowestY
                        )  # снова сортируСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС ΠΏΠΎ самому Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ пиксСлю

            screen.blit(
                cur_obj.img, cur_obj.pos
            )  #рисуСм ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ экрана

            if World.show_rects or (
                    World.edit_mode != None and cur_obj.follow_mouse
            ):  ### Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ РСдактирования(EDIT), рисуСм ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, ΠΎΡ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ для ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ
                opq_rect = pygame.Rect(
                    cur_obj.pos[0] + cur_obj.opaq_rect[0],
                    cur_obj.pos[1] + cur_obj.opaq_rect[1],
                    cur_obj.opaq_rect[2], cur_obj.opaq_rect[3]
                )  ### расчСт ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° для отобраТСния Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ экранС
                pygame.draw.rect(screen, white_color, opq_rect,
                                 1)  ### рисуСм Ρ€Π°ΠΌΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
                col_rect = pygame.Rect(cur_obj.pos[0] + cur_obj.coll_rect[0],
                                       cur_obj.pos[1] + cur_obj.coll_rect[1],
                                       cur_obj.coll_rect[2],
                                       cur_obj.coll_rect[3])
                pygame.draw.rect(
                    screen, (100, 255, 0), col_rect, 2
                )  ### Π·Π΅Π»Π΅Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ рисуСм ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

            if (player_pos[1] + player.rect[3]) >= (
                    cur_obj.pos[1] + cur_obj.lowestY
            ):  #Ссли самая ниТняя Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹ΡˆΠ΅ ΠΈΠ³Ρ€ΠΎΠΊΠ°
                screen.blit(player.image,
                            player_pos)  #рисуСм ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

        if World.edit_mode != None:  ### Если Ρ€Π΅ΠΆΠΈΠΌ EDIT
            player_rect = pygame.Rect(
                player_pos[0], player_pos[1], player.rect[2],
                player.rect[3])  ### РасчитываСм ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΈΠ³Ρ€ΠΎΠΊΠ°
            pygame.draw.rect(screen, (0, 0, 255), player_rect,
                             2)  ### рисуСм Ρ€Π°ΠΌΠΊΡƒ ΠΈΠ³Ρ€ΠΎΠΊΠ°


## ΠžΠ’Π Π˜Π‘ΠžΠ’ΠšΠ Π’Π•ΠšΠ‘Π’ΠžΠ’Π«Π₯ ΠžΠ‘ΠͺΠ•ΠšΠ’ΠžΠ’ ##
        for indx, _ in enumerate(
                textObjectList
        ):  # пСрСчисляСм всС надписи(тСкстовыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· ΠΈΡ… ΠΎΠ±Ρ‰Π΅Π³ΠΎ списка)
            text_obj = textObjectList[
                indx]  # Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с самим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π° Π½Π΅ ΠΊΠΎΠΏΠΈΠ΅ΠΉ, ΠΊΠ°ΠΊ Π² случаС просто for Ρ†ΠΈΠΊΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ лишнюю ΠΏΠ°ΠΌΡΡ‚ΡŒ
            if text_obj.text_visible == False:  # Если Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Π½Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ
                continue  # пропускаСм этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
            text_surface = pygame.font.SysFont(
                text_obj.font_name, text_obj.font_size).render(
                    text_obj.text_str, False, text_obj.text_color
                )  # рисуСм тСкст(создаСм ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Surface с тСкстом)
            screen.blit(
                text_surface, text_obj.pos
            )  # Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ с нарисованным тСкстом Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ экрана, выводя тСкст Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ экран
            if text_obj.exist_time != -1:  # Ссли Ρƒ надписи ΡƒΠΊΠ°Π·Π°Π½ΠΎ врСмя сущСствования(exist_time)
                elapsed = (
                    time.time() - text_obj.time1
                ) * 1000  #провСряСм сколько миллисСкунд ΠΏΡ€ΠΎΡˆΠ»ΠΎ со Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ создания надписи
                if elapsed > text_obj.exist_time:  # Ссли ΠΏΡ€ΠΎΡˆΠ»ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сущСствования (exist_time)
                    textObjectList.pop(
                        indx)  # удаляСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· списка надписСй

        pygame.display.flip()
Example #2
0
def main():
    pygame.init()
    screen = pygame.display.set_mode((xRes, yRes))
    pygame.display.set_caption('Roguelike')

    animationIndex, spriteIndex = 0, 0
    clock = pygame.time.Clock()
    player = Entity(level)

    loadTextures()
    loadLevel(tileData, decorationData, level)

    while True:
        clock.tick(24)

        player.isMoving = False
        player.dx, player.dy = 0, 0

        keys = pygame.key.get_pressed()
        if keys[K_ESCAPE]: return
        if keys[K_UP]:
            player.isMoving = True
            player.dy = -2 * gameScale
        if keys[K_DOWN]:
            player.isMoving = True
            player.dy = 2 * gameScale
        if keys[K_LEFT]:
            player.isFacingRight = False
            player.isMoving = True
            player.dx = -2 * gameScale
        if keys[K_RIGHT]:
            player.isFacingRight = True
            player.isMoving = True
            player.dx = 2 * gameScale
        if keys[K_z]:
            player.isCasting = True
            animationIndex = 0

        for event in pygame.event.get():
            if event.type == QUIT:
                return

        if animationIndex < 9:
            animationIndex += 1
        else:
            animationIndex = 0
            player.isCasting = False
            player.isMoving = False

        if player.isCasting:
            spriteIndex = 3
        elif player.isMoving:
            spriteIndex = 2
        else:
            spriteIndex = 0

        player.image, player.rect = playerTextures[spriteIndex][animationIndex]
        if not player.isFacingRight:
            player.image = pygame.transform.flip(player.image, True, False)

        pX, pY = player.update()
        for y in range(0, 16):
            for x in range(0, 16):
                screen.blit(
                    level.getTileAt(x, y).image,
                    (x * 16 * gameScale,
                     y * 16 * gameScale + level.getTileAt(x, y).offsetY))
                if (level.getDecorationAt(x, y) is not None):
                    screen.blit(
                        level.getDecorationAt(x, y).image,
                        (x * 16 * gameScale, y * 16 * gameScale +
                         level.getDecorationAt(x, y).offsetY))
                if ((x, y - 1) == (pX, pY)):
                    screen.blit(
                        player.image,
                        (player.x + player.offsetX, player.y + player.offsetY))

        pygame.display.flip()
Example #3
0
def main():
    pygame.init()
    screen = pygame.display.set_mode((xRes, yRes))
    pygame.display.set_caption('Roguelike')

    animationIndex, spriteIndex = 0, 0
    clock = pygame.time.Clock()
    player = Entity(level)

    loadTextures()
    loadLevel(tileData, decorationData, level)

    while True:
        clock.tick(24)

        player.isMoving = False
        player.dx, player.dy = 0, 0

        keys = pygame.key.get_pressed()
        if keys[K_ESCAPE]: return
        if keys[K_UP]:
            player.isMoving = True
            player.dy = -2 * gameScale
        if keys[K_DOWN]:
            player.isMoving = True
            player.dy = 2 * gameScale
        if keys[K_LEFT]:
            player.isFacingRight = False
            player.isMoving = True
            player.dx = -2 * gameScale
        if keys[K_RIGHT]:
            player.isFacingRight = True
            player.isMoving = True
            player.dx = 2 * gameScale
        if keys[K_z]:
            player.isCasting = True
            animationIndex = 0

        for event in pygame.event.get():
            if event.type == QUIT:
                return

        if animationIndex < 9:
            animationIndex += 1
        else:
            animationIndex = 0
            player.isCasting = False
            player.isMoving = False

        if player.isCasting:
            spriteIndex = 3
        elif player.isMoving:
            spriteIndex = 2
        else:
            spriteIndex = 0

        player.image, player.rect = playerTextures[spriteIndex][animationIndex]
        if not player.isFacingRight:
            player.image = pygame.transform.flip(player.image, True, False)

        pX, pY = player.update()
        for y in range(0, 16):
            for x in range(0, 16):
                screen.blit(level.getTileAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getTileAt(x, y).offsetY))
                if (level.getDecorationAt(x, y) is not None):
                    screen.blit(level.getDecorationAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getDecorationAt(x, y).offsetY))
                if ((x, y - 1) == (pX, pY)):
                    screen.blit(player.image, (player.x + player.offsetX, player.y + player.offsetY))

        pygame.display.flip()
Example #4
0
def main():
    pygame.init()
    screen = pygame.display.set_mode((xRes, yRes))
    pygame.display.set_caption('Roguelike')

    animationIndex, spriteIndex = 0, 0
    clock = pygame.time.Clock()
    player = Entity(level)

    loadTextures()
    loadLevel(tileData, decorationData, level)

    while True:
        clock.tick(24)

        player.isMoving = False
        player.dx, player.dy = 0, 0

        keys = pygame.key.get_pressed()
        if keys[K_ESCAPE]: return
        if keys[K_UP]:
            player.isMoving = True
            player.dy = -2 * gameScale
        if keys[K_DOWN]:
            player.isMoving = True
            player.dy = 2 * gameScale
        if keys[K_LEFT]:
            player.isFacingRight = False
            player.isMoving = True
            player.dx = -2 * gameScale
        if keys[K_RIGHT]:
            player.isFacingRight = True
            player.isMoving = True
            player.dx = 2 * gameScale
        if keys[K_z]:
            player.isCasting = True
            animationIndex = 0

        for event in pygame.event.get():
            if event.type == QUIT:
                return

        if animationIndex < 9:
            animationIndex += 1
        else:
            animationIndex = 0
            player.isCasting = False
            player.isMoving = False

        if player.isCasting:
            spriteIndex = 3
        elif player.isMoving:
            spriteIndex = 2
        else:
            spriteIndex = 0

        player.image, player.rect = playerTextures[spriteIndex][animationIndex]
        if not player.isFacingRight:
            player.image = pygame.transform.flip(player.image, True, False)

        pX, pY = player.update()
        for y in range(0, 16):
            for x in range(0, 16):
                screen.blit(
                    level.getTileAt(x, y).image,
                    (x * 16 * gameScale,
                     y * 16 * gameScale + level.getTileAt(x, y).offsetY))
                if (level.getDecorationAt(x, y) is not None):
                    screen.blit(
                        level.getDecorationAt(x, y).image,
                        (x * 16 * gameScale, y * 16 * gameScale +
                         level.getDecorationAt(x, y).offsetY))
                if ((x, y - 1) == (pX, pY)):
                    screen.blit(
                        player.image,
                        (player.x + player.offsetX, player.y + player.offsetY))

        playerPos = (player.x + player.offsetX, player.y + player.offsetY
                     )  #позиция ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ x,y
        for indx, _ in enumerate(
                gameObjectList):  #Π² массивС всСх созданным Π½Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
            curObj = gameObjectList[indx]
            screen.blit(
                curObj.img, curObj.pos
            )  #рисуСм ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ экрана
            if (playerPos[1] + player.rect[3]) >= (
                    curObj.pos[1] + curObj.lowestY
            ):  #Ссли самая ниТняя Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹ΡˆΠ΅ ΠΈΠ³Ρ€ΠΎΠΊΠ°
                screen.blit(player.image,
                            playerPos)  #рисуСм ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

        pygame.display.flip()
Example #5
0
def main():
    pygame.init()
    screen = pygame.display.set_mode((xRes, yRes))
    pygame.display.set_caption('Roguelike')

    animationIndex, spriteIndex = 0, 0
    clock = pygame.time.Clock()
    player = Entity(level)

    loadTextures()
    loadLevel(tileData, decorationData, level)

    while True:
        clock.tick(24)

        player.isMoving = False
        player.dx, player.dy = 0, 0

        mouse_pressed1, mouse_pressed2, mouse_pressed3 = pygame.mouse.get_pressed(
        )  ### ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ состояниС Π½Π°ΠΆΠ°Ρ‚Ρ‹Ρ… Π½Π° ΠΌΡ‹ΡˆΠΊΠ΅ ΠΊΠ½ΠΎΠΏΠΎΠΊ

        keys = pygame.key.get_pressed()
        if keys[K_ESCAPE]: return
        if keys[K_UP]:
            player.isMoving = True
            player.dy = -2 * gameScale
        if keys[K_DOWN]:
            player.isMoving = True
            player.dy = 2 * gameScale
        if keys[K_LEFT]:
            player.isFacingRight = False
            player.isMoving = True
            player.dx = -2 * gameScale
        if keys[K_RIGHT]:
            player.isFacingRight = True
            player.isMoving = True
            player.dx = 2 * gameScale
        if keys[K_z]:
            player.isCasting = True
            animationIndex = 0

#### ΠžΠ‘Π ΠΠ‘ΠžΠ’ΠšΠ ΠΠΠ–ΠΠ’Π˜Π™ ΠšΠ›ΠΠ’Π˜ΠΠ’Π£Π Π« И МЫШИ ####
        for event in pygame.event.get(
        ):  ### добавляСм свой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π² Ρ†ΠΈΠΊΠ» получСния сообщСний ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹
            if event.type == MOUSEBUTTONDOWN:  ### Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ событиС - Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ
                mouse_pos = event.pos  ### ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ x,y ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΌΡ‹ΡˆΠΈ Π½Π° экранС ΠΈΠ³Ρ€Ρ‹
                for curObj in gameObjectList:  ### Для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² провСряСм ΠΏΠΎΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ курсора ΠΌΡ‹ΡˆΠΈ Π² этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
                    pos_in_mask = mouse_pos[0] - curObj.img_rect.x, mouse_pos[
                        1] - curObj.img_rect.y  ### вычислСниС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ курсора ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ маски прозрачности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
                    if curObj.img_rect.collidepoint(
                            mouse_pos
                    ) and curObj.img_mask.get_at(
                            pos_in_mask
                    ) == 1:  ### провСряСм, находится Π»ΠΈ ΠΌΡ‹ΡˆΡŒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π΅Π½ Π»ΠΈ пиксСль, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ
                        new_time_obj = models.textObj(
                            [mouse_pos[0], mouse_pos[1]], curObj.objName,
                            (255, 255, 255), 1500
                        )  ### Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ тСкстовый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ указатСля ΠΌΡ‹ΡˆΠΈ, тСкстом, Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ΄ ΠΌΡ‹ΡˆΠΊΠΎΠΉ, Π±Π΅Π»Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΡˆΡ€ΠΈΡ„Ρ‚Π°(255,255,255) ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ сущСствования 1500 миллисСукнд
                        new_time_obj.time1 = time.time(
                        )  ### Π² свойство тСкстового ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° time1 заносим врСмя, ΠΊΠΎΠ³Π΄Π° этот тСкст создан
                        textObjectList.append(
                            new_time_obj
                        )  ### ДобавляСм Π½ΠΎΠ²ΡƒΡŽ надпись(тСкстовый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚) Π² список всСх надписСй
                        break  ### послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ΄ ΠΌΡ‹ΡˆΡŒΡŽ, Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ появлялось нСсколько надписСй Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС

            elif event.type == QUIT:
                return

        if animationIndex < 9:
            animationIndex += 1
        else:
            animationIndex = 0
            player.isCasting = False
            player.isMoving = False

        if player.isCasting:
            spriteIndex = 3
        elif player.isMoving:
            spriteIndex = 2
        else:
            spriteIndex = 0

        player.image, player.rect = playerTextures[spriteIndex][animationIndex]
        if not player.isFacingRight:
            player.image = pygame.transform.flip(player.image, True, False)

        pX, pY = player.update()
        for y in range(0, 16):
            for x in range(0, 16):
                screen.blit(
                    level.getTileAt(x, y).image,
                    (x * 16 * gameScale,
                     y * 16 * gameScale + level.getTileAt(x, y).offsetY))
                if (level.getDecorationAt(x, y) is not None):
                    screen.blit(
                        level.getDecorationAt(x, y).image,
                        (x * 16 * gameScale, y * 16 * gameScale +
                         level.getDecorationAt(x, y).offsetY))
                if ((x, y - 1) == (pX, pY)):
                    screen.blit(
                        player.image,
                        (player.x + player.offsetX, player.y + player.offsetY))

#### ΠžΠ’Π Π˜Π‘ΠžΠ’ΠšΠ ΠžΠ‘ΠͺΠ•ΠšΠ’ΠžΠ’ ####
        playerPos = (player.x + player.offsetX, player.y + player.offsetY
                     )  #позиция ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ x,y
        for indx, _ in enumerate(
                gameObjectList):  #Π² массивС всСх созданным Π½Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
            curObj = gameObjectList[indx]
            screen.blit(
                curObj.img, curObj.pos
            )  #рисуСм ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ экрана
            if (playerPos[1] + player.rect[3]) >= (
                    curObj.pos[1] + curObj.lowestY
            ):  #Ссли самая ниТняя Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹ΡˆΠ΅ ΠΈΠ³Ρ€ΠΎΠΊΠ°
                screen.blit(player.image,
                            playerPos)  #рисуСм ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°


#### ΠžΠ’Π Π˜Π‘ΠžΠ’ΠšΠ Π’Π•ΠšΠ‘Π’Π ####
            for indx, _ in enumerate(
                    textObjectList
            ):  ### пСрСчисляСм всС надписи(тСкстовыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· ΠΈΡ… ΠΎΠ±Ρ‰Π΅Π³ΠΎ списка)
                textObj = textObjectList[
                    indx]  ### Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с самим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π° Π½Π΅ ΠΊΠΎΠΏΠΈΠ΅ΠΉ, ΠΊΠ°ΠΊ Π² случаС просто for Ρ†ΠΈΠΊΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ лишнюю ΠΏΠ°ΠΌΡΡ‚ΡŒ
                if textObj.textVisible == False:  ### Если Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Π½Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ
                    continue  ### пропускаСм этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
                textSurf = pygame.font.SysFont(
                    textObj.fontName, textObj.fontSize).render(
                        textObj.text_str, False, textObj.text_color
                    )  ### рисуСм тСкст(создаСм ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Surface с тСкстом)
                screen.blit(
                    textSurf, textObj.pos
                )  ### Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ с нарисованным тСкстом Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ экрана, выводя тСкст Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ экран
                if textObj.exist_time != -1:  ### Ссли Ρƒ надписи ΡƒΠΊΠ°Π·Π°Π½ΠΎ врСмя сущСствования(exist_time)
                    elapsed = (
                        time.time() - textObj.time1
                    ) * 1000  ###провСряСм сколько миллисСкунд ΠΏΡ€ΠΎΡˆΠ»ΠΎ со Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ создания надписи
                    if elapsed > textObj.exist_time:  ### Ссли ΠΏΡ€ΠΎΡˆΠ»ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сущСствования (exist_time)
                        textObjectList.pop(
                            indx)  ### удаляСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· списка надписСй

        pygame.display.flip()