From 84551d8cfcfd39002d519c74e9dae2ddf2b50830 Mon Sep 17 00:00:00 2001 From: Gerhards Kristians Tillers Date: Sun, 25 Feb 2024 19:11:53 +0000 Subject: [PATCH] Upload files to "/" --- Movement_version_2.py | 230 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 Movement_version_2.py diff --git a/Movement_version_2.py b/Movement_version_2.py new file mode 100644 index 0000000..cddd447 --- /dev/null +++ b/Movement_version_2.py @@ -0,0 +1,230 @@ +import pygame +from random import randint +import math + +# pygame setup +pygame.init() +pygame.display.set_caption("Vampire survivors") +screen = pygame.display.set_mode((1280, 720)) +clock = pygame.time.Clock() +running = True + +class Player(pygame.sprite.Sprite): + def __init__(self, pos, group, pos_x, pos_y): + super().__init__(group) + + self.direction = pygame.math.Vector2() + self.speed = 5 + + + # Shooting + self.can_shoot = True + self.shoot_cooldown_time = 200 # Milliseconds + self.shoot_cooldown = 0 + + #sprites right + self.sprites_right = [] + self.in_animation = False + self.side = True + self.sprites_right.append(pygame.image.load("Sprites/Idle/Player_right.png")) + self.sprites_right.append(pygame.image.load("Sprites/Running/Player_run_right_1.png")) + self.sprites_right.append(pygame.image.load("Sprites/Running/Player_run_right_2.png")) + self.sprites_right.append(pygame.image.load("Sprites/Running/Player_run_right_3.png")) + self.sprites_right.append(pygame.image.load("Sprites/Running/Player_run_right_4.png")) + self.sprites_right.append(pygame.image.load("Sprites/Running/Player_run_right_5.png")) + self.sprites_right.append(pygame.image.load("Sprites/Running/Player_run_right_6.png")) + self.current_sprite_right = 0 + self.image = self.sprites_right[self.current_sprite_right] + self.rect = self.image.get_rect(center = pos) + + self.rect = self.image.get_rect() + self.rect.topleft = [pos_x,pos_y] + + + #sprites left + self.sprites_left = [] + self.in_animation_2 = False + self.sprites_left.append(pygame.image.load("Sprites/Idle/Player_left.png")) + self.sprites_left.append(pygame.image.load("Sprites/Running/Player_run_left_1.png")) + self.sprites_left.append(pygame.image.load("Sprites/Running/Player_run_left_2.png")) + self.sprites_left.append(pygame.image.load("Sprites/Running/Player_run_left_3.png")) + self.sprites_left.append(pygame.image.load("Sprites/Running/Player_run_left_4.png")) + self.sprites_left.append(pygame.image.load("Sprites/Running/Player_run_left_5.png")) + self.sprites_left.append(pygame.image.load("Sprites/Running/Player_run_left_6.png")) + self.current_sprite_left = 0 + self.image = self.sprites_left[self.current_sprite_left] + + self.rect = self.image.get_rect() + self.rect.topleft = [pos_x,pos_y] + + + def animate_right(self, start): + self.in_animation = start + + def animate_left(self, start): + self.in_animation_2 = start + + def sides(self, start): + self.side = start + + + def input(self): + keys = pygame.key.get_pressed() + + self.direction.y = (keys[pygame.K_DOWN] or keys[pygame.K_s]) - (keys[pygame.K_UP] or keys[pygame.K_w]) + self.direction.x = (keys[pygame.K_RIGHT] or keys[pygame.K_d]) - (keys[pygame.K_LEFT] or keys[pygame.K_a]) + + if pygame.mouse.get_pressed()[0] and self.can_shoot: + direction = -(pygame.math.Vector2(self.rect.topleft) - pygame.mouse.get_pos() - camera_group.offset) + direction = pygame.math.Vector2.normalize(direction) + new_projectile = Projectile(self.rect.center, direction, camera_group) + self.can_shoot = False + self.shoot_cooldown = pygame.time.get_ticks() + + def update(self): + self.input() + self.rect.center += self.direction * self.speed + + now = pygame.time.get_ticks() + if now - self.shoot_cooldown > self.shoot_cooldown_time: + self.can_shoot = True + + # Animation for moving right + if self.direction.x > 0: + self.animate_right(True) + self.animate_left(False) + self.side = True + self.image = self.sprites_right[int(self.current_sprite_right)] + self.current_sprite_right = (self.current_sprite_right + 0.2) % len(self.sprites_right) + # Animation for moving left + elif self.direction.x < 0: + self.animate_left(True) + self.animate_right(False) + self.side = False + self.image = self.sprites_left[int(self.current_sprite_left)] + self.current_sprite_left = (self.current_sprite_left + 0.2) % len(self.sprites_left) + # Idle animation when not moving + else: + self.animate_right(False) + self.animate_left(False) + # Set the idle sprite based on the last direction + if self.side: + self.image = self.sprites_right[0] + else: + self.image = self.sprites_left[0] + + + if self.direction.y > 0 and self.side == True: + self.animate_right(True) + elif self.direction.y > 0 and self.side == False: + self.animate_left(True) + elif self.direction.y < 0 and self.side == True: + self.animate_right(True) + elif self.direction.y < 0 and self.side == False: + self.animate_left(True) + +class Projectile(pygame.sprite.Sprite): + def __init__(self, pos, direction, group): + super().__init__(group) + self.image = pygame.image.load("Sprites/bullet.png").convert_alpha() + + self.direction = direction + self.speed = 10 + angle = math.degrees(math.atan2(-self.direction.y, self.direction.x)) + + self.image = pygame.transform.rotate(self.image, angle) + self.rect = self.image.get_rect(center = pos) + + self.life_timer = 10000 # Milliseconds + self.spawned_time = pygame.time.get_ticks() + + def collision(self): + for enemy in enemies: + distance = pygame.math.Vector2.length(pygame.math.Vector2(enemy.rect.center) - self.rect.center) + if distance < 20: + self.kill() + enemy.damage(1) + break + + def update(self): + self.rect.center += self.direction * self.speed + self.collision() + + now = pygame.time.get_ticks() + if now - self.spawned_time > self.life_timer: + self.kill() + +class Enemy(pygame.sprite.Sprite): + def __init__(self, pos, group): + super().__init__(group) + self.image = pygame.surface.Surface((20, 20)) + self.image.fill("red") + self.rect = self.image.get_rect(center = pos) + self.direction = pygame.math.Vector2() + self.speed = 1 + + def damage(self, damage): + enemies.remove(self) + self.kill() + + def update(self): + self.direction = pygame.math.Vector2(player.rect.center) - self.rect.center + if(pygame.math.Vector2.length(self.direction)<20): + self.kill() + self.direction = pygame.math.Vector2.normalize(self.direction) + self.rect.center += self.direction * self.speed + +class CameraGroup(pygame.sprite.Group): + def __init__(self): + super().__init__() + self.display_surface = pygame.display.get_surface() + + self.offset = pygame.math.Vector2(300, 100) + self.half_w = self.display_surface.get_size()[0] // 2 + self.half_h = self.display_surface.get_size()[1] // 2 + + def center_target_camera(self, target): + self.offset.x = target.rect.centerx - self.half_w + self.offset.y = target.rect.centery - self.half_h + + def custom_draw(self, player): + self.center_target_camera(player) + + for sprite in sorted(self.sprites(), key=lambda sprite: sprite.rect.centery): + offset_pos = sprite.rect.topleft - self.offset + self.display_surface.blit(sprite.image, offset_pos) + +def spawn_enemy(): + random_x = randint(-1000, 1000) + random_y = randint(-1000, 1000) + enemies.append(Enemy((player.rect.centerx + random_x, player.rect.centery + random_y), camera_group)) + +spawn_enemy_event = pygame.USEREVENT + 1 +#Setup +camera_group = CameraGroup() +enemies = [] + +player = Player((500, 500), camera_group, 10, 10) +pygame.time.set_timer(spawn_enemy_event, 100) + + +for i in range(20): + spawn_enemy() + +while running: + for e in pygame.event.get(): + if e.type == pygame.QUIT: + running = False + if e.type == spawn_enemy_event: + spawn_enemy() + + screen.fill("cyan") + + camera_group.update() + camera_group.custom_draw(player) + + pygame.display.flip() + + clock.tick(60) + +pygame.quit()