Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 35 additions & 10 deletions game.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
shoot_sound = pygame.mixer.Sound("shoot.wav")
enemy_hit_sound = pygame.mixer.Sound("enemy_hit.wav")
game_over_sound = pygame.mixer.Sound("game_over.wav")
pygame.mixer.music.load("background_music.mp3")

# Define the player class
class Player(pygame.sprite.Sprite):
Expand Down Expand Up @@ -62,13 +63,25 @@ def __init__(self):
self.rect.x = random.randint(0, screen_width - self.rect.width)
self.rect.y = random.randint(-100, -40)
self.speed = random.randint(1, 3)
self.bullet_delay = random.randint(1000, 3000)
self.last_shot = pygame.time.get_ticks()

def update(self):
self.rect.y += self.speed
if self.rect.top > screen_height + 10:
self.rect.x = random.randint(0, screen_width - self.rect.width)
self.rect.y = random.randint(-100, -40)
self.speed = random.randint(1, 3)
self.shoot()

def shoot(self):
# Shoot bullets at specified interval
current_time = pygame.time.get_ticks()
if current_time - self.last_shot > self.bullet_delay:
bullet = Bullet(self.rect.centerx, self.rect.bottom)
all_sprites.add(bullet)
enemy_bullets.add(bullet)
self.last_shot = current_time

# Define the bullet class
class Bullet(pygame.sprite.Sprite):
Expand All @@ -83,7 +96,7 @@ def __init__(self, x, y):

def update(self):
self.rect.y += self.speed
if self.rect.bottom < 0:
if self.rect.bottom < 0 or self.rect.top > screen_height:
self.kill()

# Create player and groups for sprites
Expand All @@ -92,6 +105,7 @@ def update(self):
all_sprites.add(player)
enemies = pygame.sprite.Group()
bullets = pygame.sprite.Group()
enemy_bullets = pygame.sprite.Group()

# Generate initial enemies
for _ in range(8):
Expand All @@ -102,8 +116,9 @@ def update(self):
# Set up the game clock
clock = pygame.time.Clock()

# Game over flag
# Game over flag and score tracking
game_over = False
score = 0

# Game loop
running = True
Expand All @@ -119,10 +134,11 @@ def update(self):
# Reset the game
game_over = False
player.health = 3
player.score = 0
score = 0
all_sprites.empty()
bullets.empty()
enemies.empty()
enemy_bullets.empty()
for _ in range(8):
enemy = Enemy()
all_sprites.add(enemy)
Expand All @@ -136,17 +152,26 @@ def update(self):
# Check for bullet collisions with enemies
bullet_hits = pygame.sprite.groupcollide(bullets, enemies, True, True)
for hit_enemies in bullet_hits.values():
player.score += len(hit_enemies)
score += len(hit_enemies)
enemy_hit_sound.play()

# Check for enemy collisions with player
enemy_hits = pygame.sprite.spritecollide(player, enemies, True)
if enemy_hits:
for _ in enemy_hits:
player.health -= 1
enemy_hit_sound.play()

# Check for enemy bullet collisions with player
enemy_bullet_hits = pygame.sprite.spritecollide(player, enemy_bullets, True)
if enemy_bullet_hits:
player.health -= 1
if player.health == 0:
game_over = True
pygame.mixer.music.stop()
game_over_sound.play()
enemy_hit_sound.play()

# Check if the player runs out of health
if player.health <= 0:
game_over = True
pygame.mixer.music.stop()
game_over_sound.play()

# Draw
screen.fill(BLACK)
Expand All @@ -155,7 +180,7 @@ def update(self):
# Draw player health and score
font = pygame.font.Font(None, 36)
health_text = font.render(f"Health: {player.health}", True, WHITE)
score_text = font.render(f"Score: {player.score}", True, WHITE)
score_text = font.render(f"Score: {score}", True, WHITE)
screen.blit(health_text, (10, 10))
screen.blit(score_text, (screen_width - score_text.get_width() - 10, 10))

Expand Down