pixel_gamble/code/player.py
2022-02-19 09:14:43 +07:00

67 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pygame
from data import *
# КЛАСС ОТВЕЧАЕТ ЗА ОТРИСОВКУ ИГРОКА В ВЫБРАННОЙ ПОЗИЦИИ
class Player(pygame.sprite.Sprite):
def __init__(self, pos, groups, obs_sprites):
super().__init__(groups)
self.image = pygame.image.load("../data/textures/player/player.png") # ЗАГРУЗКА
self.rect = self.image.get_rect(topleft=pos) # ОТРИСОВКА
self.hitbox = self.rect.inflate(0, -26) # РАЗМЕР ХИТБОКСА
self.point = pygame.math.Vector2() # ПОЗИЦИЯ ИГРОКА
self.obs_sprites = obs_sprites
self.speed = 5
def wasd(self):
keyboard = pygame.key.get_pressed()
# ПЕРМЕЩЕНИЕ Y
if keyboard[pygame.K_w]:
self.point.y = -1
elif keyboard[pygame.K_s]:
self.point.y = 1
else:
self.point.y = 0
# ПЕРМЕЩЕНИЕ X
if keyboard[pygame.K_a]:
self.point.x = -1
elif keyboard[pygame.K_d]:
self.point.x = 1
else:
self.point.x = 0
def move(self, speed): # СКОРОСТЬ ПЕРЕДВЕЖЕНИЯ
if self.point.magnitude() != 0:
self.point = self.point.normalize() # ФИКС СКОРОСТИ ПО ДИАГОНАЛИ
self.hitbox.x += self.point.x * speed
self.barrier(True)
self.hitbox.y += self.point.y * speed
self.barrier(False)
self.rect.center = self.hitbox.center
def barrier(self, point):
if point:
for sprite in self.obs_sprites:
if sprite.hitbox.colliderect(self.hitbox):
# СТОЛКНОВЕНИЕ ПО ГОРИЗОНТУ
if self.point.x > 0: # влево
self.hitbox.right = sprite.hitbox.left
if self.point.x < 0: # вправо
self.hitbox.left = sprite.hitbox.right
else:
for sprite in self.obs_sprites:
if sprite.hitbox.colliderect(self.hitbox):
# СТОЛКНОВЕНИЕ ПО ВЕРТИКАЛИ
if self.point.y > 0: # вниз
self.hitbox.bottom = sprite.hitbox.top
if self.point.y < 0: # вверх
self.hitbox.top = sprite.hitbox.bottom
def update(self):
self.wasd()
self.move(self.speed)