-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstone_trap.py
84 lines (67 loc) · 3.57 KB
/
stone_trap.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import asyncio
import pygame
import os
import time
import random
import math
class StoneTrap:
"""Каменная ловушка из под текстуры"""
def __init__(self, screen_height, screen_width):
self.stone_trap_image = None
self.screen_height = screen_height
self.screen_width = screen_width
# Начальная позиция персонажа
self.stone_trap_x = screen_width * 0.3 # Положение слева
self.stone_trap_y = screen_height * 0.96 # Вычисляем высоту пола
self.check_trap = False
self.check_trap_max = False # Переменная запускающая закрытие ловушки внизу
self.timeout = 0.5
# Размер ловушки
self.trap_width = self.screen_width * 0.1
self.trap_height = self.screen_height * 0.4
self.trap_image = pygame.image.load('media/image_main/Колья.png')
def stone_trap_rect(self):
"""Rect ловушки"""
rect = pygame.Rect(self.stone_trap_x, self.stone_trap_y, self.trap_width, self.trap_height)
return rect
def screen_stone_trap(self, screen):
"""Отображение ловушки"""
self.trap_image = pygame.transform.scale(self.trap_image, (self.trap_width, self.trap_height))
screen.blit(self.trap_image, (self.stone_trap_x, self.stone_trap_y))
def move(self, current_location, now, platforms):
"""Движение ловушки"""
# Timeout срабатывания ловушки
frame_delay = 5000
if now - self.timeout > frame_delay and self.check_trap is False and self.check_trap_max is False:
self.check_trap = True
self.timeout = now
# Ловушка поднимается
if self.check_trap:
self.stone_trap_y -= 4
# Ловушка наверху останавливается
rect_trap = self.stone_trap_rect()
for platform in platforms[current_location]:
if rect_trap.colliderect(platform):
self.check_trap = False
self.check_trap_max = True
# Ловушка опускается
if rect_trap.top < self.screen_height - 35 and self.check_trap_max:
self.stone_trap_y += 4
self.timeout = now
# Ловушка внизу останавливается
if rect_trap.top > self.screen_height - 35:
self.check_trap_max = False
self.check_trap = False
def contact_hero(self, rect_dwarf):
"""Функция контакта с гл героем"""
rect_trap = self.stone_trap_rect()
if rect_dwarf.colliderect(rect_trap):
# Проверка, вошел ли персонаж в ловушку с левой стороны
if rect_dwarf.right > rect_trap.left and rect_dwarf.centerx < rect_trap.centerx:
# Отталкиваем персонажа влево
rect_dwarf.x = rect_trap.left - rect_dwarf.width # Перемещаем персонажа влево от ловушки
# Проверка, вошел ли персонаж в ловушку с правой стороны
elif rect_dwarf.left < rect_trap.right and rect_dwarf.centerx > rect_trap.centerx:
# Отталкиваем персонажа вправо
rect_dwarf.x = rect_trap.right # Перемещаем персонажа вправо от ловушки
return rect_dwarf.x, rect_dwarf.y