2. if self.rectangle.left < 0 or self.rectangle.right > width:
self.speed = (-self.speed[0], self.speed[1])
if self.rectangle.top < 0 or self.rectangle.bottom > height:
self.speed = (self.speed[0], -self.speed[1])
class Enemy2(Sprite):
def __init__(self, image, width, height):
super().__init__(image, width, height)
self.speed = (0, 0)
self.acceleration = 0.1
def move(self, target_position):
dx = target_position[0] - self.rectangle.centerx
dy = target_position[1] - self.rectangle.centery
dist = math.sqrt(dx ** 2 + dy ** 2)
if dist != 0:
dx_norm = dx / dist
dy_norm = dy / dist
self.speed = (self.speed[0] + dx_norm * self.acceleration, self.speed[1] + dy_norm *
self.acceleration)
self.rectangle.move_ip(self.speed[0], self.speed[1])
class PowerUp(Sprite):
def __init__(self, image, width, height):
super().__init__(image, width, height)
def main():
pygame.init()
myfont = pygame.font.SysFont('monospace', 24)
width, height = 600, 400
screen = pygame.display.set_mode((width, height))
enemy1 = pygame.image.load("devil.png").convert_alpha()
enemy2 = pygame.image.load("ghost.png").convert_alpha()
enemy1_image = pygame.transform.smoothscale(enemy1, (50, 50))
enemy2_image = pygame.transform.smoothscale(enemy2, (50, 50))
enemy_sprites = []
enemy2_sprites = []
for i in range(5):
enemy_sprites.append(Enemy(enemy1_image, width, height))
for i in range(2):
3. enemy2_sprites.append(Enemy2(enemy2_image, width, height))
player_image = pygame.image.load("prayerhands.jpeg").convert_alpha()
player_image = pygame.transform.scale(player_image, (50, 50))
x, y = 0, 0
player_sprite = Sprite(player_image, x, y)
life = 3
powerup_image = pygame.image.load("life_powerup.jpeg").convert_alpha()
powerups = []
is_playing = True
clock = pygame.time.Clock()
while is_playing:
clock.tick(60)
if life <= 0:
is_playing = False
for event in pygame.event.get():
if event.type == pygame.QUIT:
is_playing = False
pos = pygame.mouse.get_pos()
player_sprite.set_position(pos)
for enemy_sprite in enemy_sprites:
if player_sprite.is_colliding(enemy_sprite):
life -= 0.2
for powerup_sprite in powerups:
if player_sprite.is_colliding(powerup_sprite):
life += 1
powerups = [p for p in powerups if not player_sprite.is_colliding(p)]
for enemy_sprite in enemy_sprites:
enemy_sprite.move()
enemy_sprite.bounce(width, height)
for enemy2_sprite in enemy2_sprites:
enemy2_sprite.move(player_sprite.rectangle.center)
if random.random() < 0.01:
powerups.append(PowerUp(powerup_image, random.randint(0, width),
random.randint(0, height)))
screen.fill((255, 255, 255))
for enemy_sprite in enemy_sprites:
4. enemy_sprite.draw(screen)
for enemy2_sprite in enemy2_sprites:
enemy2_sprite.draw(screen)
for powerup_sprite in powerups:
powerup_sprite.draw(screen)
player_sprite.draw(screen)
text = "Life: " + str('%.1f' % life)
label = myfont.render(text, True, (0, 0, 0))
screen.blit(label, (20, 20))
pygame.display.update()
pygame.time.wait(2000)
pygame.quit()
sys.exit()
if __name__ == "__main__":
main()