0

I want to have falling objects (Enemies) that get removed from the window when the bullet hits the Enemy object. What would be a good way to go about doing this?

import pygame, sys

classes

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("ship.png")
        self.image = pygame.transform.scale(self.image, (50,50))
        self.rect = self.image.get_rect(center = (screen_width/2, screen_height/2))

    def update(self):
        self.rect.center = pygame.mouse.get_pos()

    def create_bullet(self):
        return Bullet(pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1])

    

class Bullet(pygame.sprite.Sprite):
    def __init__(self, pos_x, pos_y):
        super().__init__()
        self.image = pygame.image.load("bullet.png")
        self.image = pygame.transform.scale(self.image, (100,100))
        self.rect = self.image.get_rect(center = (pos_x + 29, pos_y))

    def update(self):
        self.rect.y -= 30

        if self.rect.y >= screen_height:
            self.kill()

Here I created a new Enemy class to define Enemy objects and have them fall from the top of the window to the bottom. But if they get hit before they reach the bottom then they get removed from the screen. What would be a good way to implement this in pygame?

class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("astroid.png")
        self.image = pygame.transform.scale(self.image, (100,100))
    def update(self):
        self.image.update()





pygame.init()
clock = pygame.time.Clock()
screen_width, screen_height = 1500, 1000
screen = pygame.display.set_mode((screen_width, screen_height))
background = pygame.image.load("spacebg.jpg")
pygame.mouse.set_visible(False)

player = Player()
player_group = pygame.sprite.Group()
player_group.add(player)

bullet_group = pygame.sprite.Group()
enemy_group = pygame.sprite.Group()

Game Loop

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            bullet_group.add(player.create_bullet())


    screen.blit(background, (0,0))
    enemy_group.draw(screen)
    enemy_group.update()
    bullet_group.draw(screen)
    player_group.draw(screen)
    bullet_group.update()
    player_group.update()
    
    pygame.display.flip()
    clock.tick(60)

0 Answers0