/
Dragon925
/
Python-Graphics
Обзор
Документация
Войти
/
Dragon925
/
Python-Graphics
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
lesson_29
classes.py
125 строк
4 KB
Alexandr Romanov
Пример выполнения задания 10
24 апр 2025, 19:50
24 апр 2025, 19:50
cc596b3
Код
Авторство
О чём код?
from pygame import Surface, Color, image, key, K_SPACE, K_DOWN from random import randint class Dino: def __init__(self, x: int, y: int, image_paths: list[str], duck_image_paths: list[str], max_speed: int, max_d: int | float): self.images = [] for image_path in image_paths: _image = image.load(image_path) _image.set_colorkey(Color("white")) self.images.append(_image) self.duck_images = [] for image_path in duck_image_paths: _image = image.load(image_path) _image.set_colorkey(Color("white")) self.duck_images.append(_image) self.current_image = 0 self.rect = self.images[0].get_rect(topleft=(x, y)) self.speed = 0 self.max_speed = max_speed self.d_speed = 0 self.max_d = max_d self.start_y = y self.is_ducked = False def draw(self, screen: Surface): images = self.duck_images if self.is_ducked else self.images screen.blit(images[self.current_image], self.rect) def animate(self): if not self.d_speed: ln = len(self.duck_images) if self.is_ducked else len(self.images) self.current_image = (self.current_image + 1) % ln def jump(self): if self._check_jump_possibility(): self.d_speed = self.max_d self.speed = self.max_speed self.rect.top += self.speed self.speed += self.d_speed if self.rect.top >= self.start_y and not self.is_ducked: self.rect.top = self.start_y self.speed = 0 self.d_speed = 0 def quick_down(self): if self._check_quick_down_possibility(): self.speed = -self.max_speed def duck(self): if self._check_duck_possibility(): self.is_ducked = True self.rect = self.duck_images[0].get_rect(bottomleft=self.rect.bottomleft) else: self.is_ducked = False self.rect = self.images[0].get_rect(bottomleft=self.rect.bottomleft) def _check_jump_possibility(self) -> bool: pressed = key.get_pressed() return pressed[K_SPACE] and not self.d_speed def _check_duck_possibility(self) -> bool: pressed = key.get_pressed() return pressed[K_DOWN] and not self.d_speed def _check_quick_down_possibility(self): pressed = key.get_pressed() return pressed[K_DOWN] and self.d_speed class Ground: def __init__(self, y: int, image_path: str, speed: int): self.image = image.load(image_path) self.image.set_colorkey(Color("white")) self.rect = self.image.get_rect(topleft=(0, y)) self.speed = speed def draw(self, screen: Surface): screen.blit(self.image, self.rect) def move(self, width: int): self.rect.x -= self.speed if self.rect.right <= width + 10: self.rect.x = 0 class Cloud: def __init__(self, image_path: str, width: int, height: int, speed: int): self.image = image.load(image_path) self.image.set_colorkey(Color("white")) x = randint(width, width * 2) y = randint(0, height // 3) self.rect = self.image.get_rect(topleft=(x, y)) self.speed = speed def draw(self, screen: Surface): screen.blit(self.image, self.rect) def move(self, width: int, height: int): self.rect.x -= self.speed if self.rect.right < 0: self.rect.left = randint(width, width * 2) self.rect.top = randint(0, height // 3) class Obstacle: def __init__(self, x: int, y: int, image_path: str, speed: int): self.image = image.load(image_path) self.image.set_colorkey(Color("white")) y = y - self.image.get_height() + 20 self.rect = self.image.get_rect(topleft=(x, y)) self.speed = speed def draw(self, screen: Surface): screen.blit(self.image, self.rect) def move(self): self.rect.x -= self.speed