/
Vlada
/
rep2
Обзор
Документация
Войти
/
Vlada
/
rep2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
player.py
83 строки
4 KB
Vlada
upload files
05 ноя 2024, 07:58
05 ноя 2024, 07:58
79df3a3
Код
Авторство
О чём код?
import pygame from pygame import * MOVE_SPEED = 7 WIDTH = 42 # Ширина игрока HEIGHT = 32 # Высота игрока COLOR = "#888888" JUMP_POWER = 10 GRAVITY = 0.35 # Сила гравитации pygame.init() jump_sound = pygame.mixer.Sound('jump.mp3') class Player(sprite.Sprite): def __init__(self, x, y): sprite.Sprite.__init__(self) self.xvel = 0 # Скорость перемещения self.startX = x # Начальная позиция self.startY = y # Загрузка изображений и изменение их размера self.image_right = [ transform.scale(image.load("cat_right1.png"), (WIDTH, HEIGHT)), transform.scale(image.load("cat_right2.png"), (WIDTH, HEIGHT)) ] self.image_left = [transform.flip(img, True, False) for img in self.image_right] # Зеркалим изображения self.image = self.image_right[0] # Начальное изображение self.rect = Rect(x, y, WIDTH, HEIGHT) # Прямоугольный объект для героя self.yvel = 0 # Скорость по вертикали self.onGround = False # На земле ли? self.animation_index = 0 self.animation_counter = 0 def update(self, left, right, up, platforms): if left: self.xvel = -MOVE_SPEED # Двигаемся влево self.image = self.image_left[self.animation_index] elif right: self.xvel = MOVE_SPEED # Двигаемся вправо self.image = self.image_right[self.animation_index] else: self.xvel = 0 # Останавливаемся self.animation_index = 0 # Сбрасываем анимацию при остановке if up: if self.onGround: # Прыгаем, только когда можем оттолкнуться от земли jump_sound.play() self.yvel = -JUMP_POWER if not self.onGround: self.yvel += GRAVITY self.onGround = False # Мы не знаем, когда мы на земле self.rect.y += self.yvel self.collide(0, self.yvel, platforms) self.rect.x += self.xvel # переносим свои положение на xvel self.collide(self.xvel, 0, platforms) # Обновление анимации if self.xvel != 0: self.animation_counter += 1 if self.animation_counter >= 5: # Измените это значение для настройки скорости анимации self.animation_index = (self.animation_index + 1) % len(self.image_right) self.animation_counter = 0 def collide(self, xvel, yvel, platforms): for p in platforms: if sprite.collide_rect(self, p): # если есть пересечение платформы с игроком if xvel > 0: # если движется вправо self.rect.right = p.rect.left # то не движется вправо if xvel < 0: # если движется влево self.rect.left = p.rect.right # то не движется влево if yvel > 0: # если падает вниз self.rect.bottom = p.rect.top # то не падает вниз self.onGround = True # и становится на что-то твердое self.yvel = 0 # и энергия падения пропадает if yvel < 0: # если движется вверх self.rect.top = p.rect.bottom # то не движется вверх self.yvel = 0 # и энергия прыжка пропадает