code
parent
aaff17b276
commit
09338bc01b
122
main.py
122
main.py
|
@ -1,87 +1,48 @@
|
||||||
# code
|
# code
|
||||||
import pygame
|
import pygame
|
||||||
|
|
||||||
class Player(pygame.sprite.Sprite):
|
def load_movement_sprites(prefix, num_sprites):
|
||||||
def __init__(self, color, size, pos, walls):
|
sprite_list = []
|
||||||
super().__init__()
|
for i in range(1, num_sprites + 1):
|
||||||
self.image = pygame.Surface(size)
|
filename = f"{prefix}{i}.png"
|
||||||
self.image.fill(color)
|
sprite = pygame.image.load(filename)
|
||||||
self.rect = self.image.get_rect(center=pos)
|
sprite_list.append(sprite)
|
||||||
self.foot_size = 15
|
return sprite_list
|
||||||
self.dt = 0
|
|
||||||
self.weight = 2500
|
|
||||||
self.speed_x = 0
|
|
||||||
self.max_speed_x = 700
|
|
||||||
self.speed_y = 0
|
|
||||||
self.max_speed_y = 1500
|
|
||||||
self.is_jumping = False
|
|
||||||
self.jumping_time = 0
|
|
||||||
self.walls = walls
|
|
||||||
|
|
||||||
def gravity(self, dt):
|
# Load player and movement sprites
|
||||||
self.speed_y += self.weight * dt
|
player_image = pygame.image.load("player.png")
|
||||||
if self.speed_y > self.max_speed_y:
|
forward_sprites = load_movement_sprites("forward", 5)
|
||||||
self.speed_y = self.max_speed_y
|
backward_sprites = load_movement_sprites("backward", 5)
|
||||||
self.rect.y += self.speed_y * dt
|
left_sprites = load_movement_sprites("left", 5)
|
||||||
|
right_sprites = load_movement_sprites("right", 5)
|
||||||
|
|
||||||
def jump(self):
|
class Player:
|
||||||
if not self.is_jumping:
|
def __init__(self, x, y):
|
||||||
self.is_jumping = True
|
self.x = x
|
||||||
self.jumping_time = 0
|
self.y = y
|
||||||
self.speed_y = -1500
|
self.image = player_image
|
||||||
|
self.movement_sprites = {
|
||||||
|
'forward': forward_sprites,
|
||||||
|
'backward': backward_sprites,
|
||||||
|
'left': left_sprites,
|
||||||
|
'right': right_sprites
|
||||||
|
}
|
||||||
|
self.current_sprite_index = 0
|
||||||
|
self.current_movement = 'forward'
|
||||||
|
|
||||||
def move_x(self, dt):
|
def update_position(self, dx, dy):
|
||||||
if abs(self.speed_x) > self.max_speed_x:
|
self.x += dx
|
||||||
self.speed_x = self.max_speed_x * (self.speed_x / abs(self.speed_x))
|
self.y += dy
|
||||||
|
|
||||||
self.rect.x += self.speed_x * dt
|
def change_movement(self, direction):
|
||||||
|
self.current_movement = direction
|
||||||
|
|
||||||
def collision(self):
|
def draw(self):
|
||||||
collisions = pygame.sprite.spritecollide(self, self.walls, False)
|
# Draw the current movement sprite at the player's position
|
||||||
if collisions:
|
screen.blit(self.movement_sprites[self.current_movement][self.current_sprite_index], (self.x, self.y))
|
||||||
for wall in collisions:
|
|
||||||
if abs(self.rect.bottom - wall.rect.top) < self.foot_size:
|
|
||||||
self.rect.bottom = wall.rect.top
|
|
||||||
self.speed_y = 0
|
|
||||||
self.jumping_time = 0
|
|
||||||
self.is_jumping = False
|
|
||||||
|
|
||||||
elif abs(self.rect.top - wall.rect.bottom) < self.foot_size:
|
# Create a Player instance
|
||||||
self.rect.top = wall.rect.bottom
|
player = Player(20 // 2, 80 // 2)
|
||||||
self.speed_y = 0
|
|
||||||
|
|
||||||
elif abs(self.rect.right - wall.rect.left) < self.foot_size:
|
|
||||||
self.rect.right = wall.rect.left
|
|
||||||
self.speed_x = 0
|
|
||||||
elif abs(self.rect.left - wall.rect.right) < self.foot_size:
|
|
||||||
self.rect.left = wall.rect.right
|
|
||||||
self.speed_x = 0
|
|
||||||
|
|
||||||
def player_input(self, dt):
|
|
||||||
keys = pygame.key.get_pressed()
|
|
||||||
move_direction = 0
|
|
||||||
if keys[pygame.K_w]:
|
|
||||||
self.jump()
|
|
||||||
elif keys[pygame.K_SPACE]:
|
|
||||||
self.jump()
|
|
||||||
if keys[pygame.K_a]:
|
|
||||||
self.speed_x -= self.max_speed_x * 3 * dt
|
|
||||||
move_direction = -1
|
|
||||||
if keys[pygame.K_d]:
|
|
||||||
self.speed_x += self.max_speed_x * 3 * dt
|
|
||||||
move_direction = 1 + move_direction
|
|
||||||
if (move_direction == 0 or (self.speed_x * move_direction < 0)) and not self.is_jumping:
|
|
||||||
self.speed_x -= self.speed_x * 5 * dt
|
|
||||||
elif self.is_jumping:
|
|
||||||
self.speed_x -= self.speed_x * dt
|
|
||||||
if abs(self.speed_x) < 5:
|
|
||||||
self.speed_x = 0
|
|
||||||
|
|
||||||
def update(self, dt):
|
|
||||||
self.player_input(dt)
|
|
||||||
self.gravity(dt)
|
|
||||||
self.move_x(dt)
|
|
||||||
self.collision()
|
|
||||||
|
|
||||||
|
|
||||||
class Camera:
|
class Camera:
|
||||||
|
@ -130,18 +91,19 @@ class Button:
|
||||||
self.image = self.up_image
|
self.image = self.up_image
|
||||||
|
|
||||||
pygame.init()
|
pygame.init()
|
||||||
|
# Настройки
|
||||||
FPS = 60
|
FPS = 60
|
||||||
BACKGROUND_IMAGE = "background.png"
|
BACKGROUND_IMAGE = "background.png"
|
||||||
FONT, SIZE = 'comicsansms', 14
|
FONT, SIZE = 'comicsansms', 14
|
||||||
|
|
||||||
|
screen_info = pygame.display.Info() # Пока-что пусть будет
|
||||||
|
screen = pygame.display.set_mode((1920, 1080), pygame.FULLSCREEN)
|
||||||
|
pygame.display.set_caption('Hell Circus')
|
||||||
programIcon = pygame.image.load('icon.png')
|
programIcon = pygame.image.load('icon.png')
|
||||||
pygame.display.set_icon(programIcon)
|
pygame.display.set_icon(programIcon)
|
||||||
pygame.display.set_caption('Hell Circus')
|
|
||||||
font = pygame.font.SysFont(FONT, SIZE)
|
font = pygame.font.SysFont(FONT, SIZE)
|
||||||
screen_info = pygame.display.Info()
|
|
||||||
screen = pygame.display.set_mode((1920, 1080), vsync=1)
|
|
||||||
pygame.display.set_caption("Simple platformer")
|
|
||||||
clock = pygame.time.Clock()
|
clock = pygame.time.Clock()
|
||||||
deltatime = 0
|
deltatime = 0
|
||||||
running = True
|
running = True
|
||||||
|
|
Loading…
Reference in New Issue