From 655a629ccfaf914b6760b4db42e60555bf42631d Mon Sep 17 00:00:00 2001 From: nadula nisith <132653607+Ncode01@users.noreply.github.com> Date: Sat, 26 Apr 2025 11:03:57 +0530 Subject: [PATCH 1/8] player lives and game over logic --- space_adventure.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/space_adventure.py b/space_adventure.py index 7411aa0..d173035 100644 --- a/space_adventure.py +++ b/space_adventure.py @@ -293,7 +293,7 @@ def main_game(): all_sprites.add(new_enemy) enemies.add(new_enemy) if player.shield <= 0: - # player.lives -= 1 + player.lives -= 1 # Uncommented this line to reduce lives when shield is depleted player.shield = 100 player.hide() if player.lives == 0: @@ -310,7 +310,12 @@ def main_game(): player.powerup() if game_over: - pass + # Display Game Over message + draw_text(screen, "GAME OVER", 64, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2) + pygame.display.flip() + # Wait for a few seconds + pygame.time.delay(2000) # Wait for 2 seconds + running = False # Exit the game loop # Draw / render screen.fill(BLACK) From 5dc74a80602061ecfa76cde138af8059aab91a8d Mon Sep 17 00:00:00 2001 From: nadula nisith <132653607+Ncode01@users.noreply.github.com> Date: Sat, 26 Apr 2025 11:08:52 +0530 Subject: [PATCH 2/8] collision detection --- space_adventure.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/space_adventure.py b/space_adventure.py index d173035..3291373 100644 --- a/space_adventure.py +++ b/space_adventure.py @@ -145,10 +145,10 @@ def __init__(self, x, y): self.rect = self.image.get_rect() self.rect.centerx = x self.rect.bottom = y - self.speedy = 1 + self.speedy = 10 # Increased bullet speed from 1 to 10 def update(self): - self.rect.y += self.speedy + self.rect.y -= self.speedy # Changed += to -= so bullets move upward if self.rect.bottom < 0: self.kill() @@ -267,9 +267,9 @@ def main_game(): all_sprites.update() # Check bullet-enemy collisions - hits = pygame.sprite.groupcollide(enemies, bullets, False, True) + hits = pygame.sprite.groupcollide(enemies, bullets, True, True) # Changed False to True so enemies are destroyed when hit for hit in hits: - score += 10 + score += 100 # Changed from 10 to 100 points per enemy destroyed # Create explosion explosion = Explosion(hit.rect.center, 30) all_sprites.add(explosion) From 5f61099fc9c37fab517c892675e2c7971ffeeacc Mon Sep 17 00:00:00 2001 From: nadula nisith <132653607+Ncode01@users.noreply.github.com> Date: Sat, 26 Apr 2025 11:11:57 +0530 Subject: [PATCH 3/8] movements --- space_adventure.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/space_adventure.py b/space_adventure.py index 3291373..ac85fda 100644 --- a/space_adventure.py +++ b/space_adventure.py @@ -82,9 +82,9 @@ def update(self): self.speed_x = 0 keystate = pygame.key.get_pressed() if keystate[pygame.K_LEFT]: - self.speed_x = 8 + self.speed_x = -8 # Changed from 8 to -8 for correct left movement if keystate[pygame.K_RIGHT]: - self.speed_x = -8 + self.speed_x = 8 # Changed from -8 to 8 for correct right movement self.rect.x += self.speed_x if self.rect.right > SCREEN_WIDTH + 20: From 39d57add21c37a14c83ad0388cfa7b41b190e7a4 Mon Sep 17 00:00:00 2001 From: nadula nisith <132653607+Ncode01@users.noreply.github.com> Date: Sat, 26 Apr 2025 11:13:40 +0530 Subject: [PATCH 4/8] power level --- space_adventure.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/space_adventure.py b/space_adventure.py index ac85fda..9c46a40 100644 --- a/space_adventure.py +++ b/space_adventure.py @@ -99,9 +99,13 @@ def shoot(self): all_sprites.add(bullet) bullets.add(bullet) elif self.power_level >= 2: - bullet1 = Bullet(self.rect.centerx, self.rect.top) + # Create two bullets side by side + bullet1 = Bullet(self.rect.centerx - 10, self.rect.top) # Left bullet + bullet2 = Bullet(self.rect.centerx + 10, self.rect.top) # Right bullet all_sprites.add(bullet1) + all_sprites.add(bullet2) bullets.add(bullet1) + bullets.add(bullet2) def hide(self): self.hidden = True From 09d3b559744b8aa43471ec426490b3a5282220c2 Mon Sep 17 00:00:00 2001 From: nadula nisith <132653607+Ncode01@users.noreply.github.com> Date: Sat, 26 Apr 2025 11:19:26 +0530 Subject: [PATCH 5/8] fix --- space_adventure.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/space_adventure.py b/space_adventure.py index 9c46a40..b00f65c 100644 --- a/space_adventure.py +++ b/space_adventure.py @@ -5,6 +5,7 @@ # Initialize pygame pygame.init() +pygame.mixer.init() # Initialize sound mixer # Screen dimensions SCREEN_WIDTH = 800 @@ -29,6 +30,16 @@ def load_image(name): print(e) return pygame.Surface((30, 30)) +# Load sounds +shoot_sound = pygame.mixer.Sound(os.path.join('assets', 'sounds', 'shoot.wav')) +explosion_sound = pygame.mixer.Sound(os.path.join('assets', 'sounds', 'explosion.wav')) +powerup_sound = pygame.mixer.Sound(os.path.join('assets', 'sounds', 'powerup.wav')) + +# Set sound volume +shoot_sound.set_volume(0.4) +explosion_sound.set_volume(0.6) +powerup_sound.set_volume(0.7) + # Game settings FPS = 60 @@ -94,6 +105,7 @@ def update(self): def shoot(self): if not self.hidden: + shoot_sound.play() # Play shoot sound if self.power_level == 1: bullet = Bullet(self.rect.centerx, self.rect.top) all_sprites.add(bullet) @@ -135,11 +147,13 @@ def update(self): self.rect.x = random.randrange(0, SCREEN_WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = random.randrange(1, 8) + self.speedx = random.randrange(-3, 3) # Reset speedx when enemy goes off bottom if self.rect.left < -25 or self.rect.right > SCREEN_WIDTH + 25: self.rect.x = random.randrange(0, SCREEN_WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = random.randrange(1, 8) + self.speedx = random.randrange(-3, 3) # Reset speedx when enemy goes off sides # Bullet class class Bullet(pygame.sprite.Sprite): @@ -179,6 +193,9 @@ def __init__(self, center, size): self.size = size self.images = explosion_imgs self.image = self.images[0] + # Scale the explosion images based on the size parameter + if size != 30: # 30 is the default/normal size, don't scale if it's already that size + self.image = pygame.transform.scale(self.image, (size, size)) self.rect = self.image.get_rect() self.rect.center = center self.frame = 0 @@ -190,10 +207,12 @@ def update(self): if now - self.last_update > self.frame_rate: self.last_update = now self.frame += 1 - if self.frame >= 5: + if self.frame >= len(self.images): # Use length of images list instead of hardcoded value self.kill() - elif self.frame < 5: + elif self.frame < len(self.images): # Use length of images list self.image = self.images[self.frame] + if self.size != 30: # Scale only if not default size + self.image = pygame.transform.scale(self.image, (self.size, self.size)) old_center = self.rect.center self.rect = self.image.get_rect() self.rect.center = old_center @@ -273,6 +292,7 @@ def main_game(): # Check bullet-enemy collisions hits = pygame.sprite.groupcollide(enemies, bullets, True, True) # Changed False to True so enemies are destroyed when hit for hit in hits: + explosion_sound.play() # Play explosion sound score += 100 # Changed from 10 to 100 points per enemy destroyed # Create explosion explosion = Explosion(hit.rect.center, 30) @@ -306,11 +326,12 @@ def main_game(): # Check player-powerup collisions hits = pygame.sprite.spritecollide(player, powerups, True) for hit in hits: + powerup_sound.play() # Play powerup sound if hit.type == 'shield': player.shield += 20 if player.shield > 100: player.shield = 100 - if hit.type == 'power': + elif hit.type == 'power': # Changed from 'if' to 'elif' for proper type handling player.powerup() if game_over: From 996836e34c6c56fd79988be74f86c97de6cf1c79 Mon Sep 17 00:00:00 2001 From: nadula nisith <132653607+Ncode01@users.noreply.github.com> Date: Sat, 26 Apr 2025 11:23:46 +0530 Subject: [PATCH 6/8] fixxxxxxxxxxxxxxx --- space_adventure.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/space_adventure.py b/space_adventure.py index b00f65c..79006aa 100644 --- a/space_adventure.py +++ b/space_adventure.py @@ -98,10 +98,11 @@ def update(self): self.speed_x = 8 # Changed from -8 to 8 for correct right movement self.rect.x += self.speed_x - if self.rect.right > SCREEN_WIDTH + 20: - self.rect.right = SCREEN_WIDTH + 20 - if self.rect.left < -20: - self.rect.left = -20 + # Fix boundary checking to keep the ship fully visible on screen + if self.rect.right > SCREEN_WIDTH: + self.rect.right = SCREEN_WIDTH + if self.rect.left < 0: + self.rect.left = 0 def shoot(self): if not self.hidden: @@ -245,6 +246,24 @@ def draw_lives(surface, x, y, lives, img): img_rect.y = y surface.blit(img, img_rect) +# Function to draw power level indicator +def draw_power_level(surface, x, y, power_level): + if power_level <= 1: + return # Don't show anything for normal power + + # Draw power level indicator + text = f"POWER: {power_level}" + font = pygame.font.SysFont("arial", 18) + text_surface = font.render(text, True, YELLOW) + text_rect = text_surface.get_rect() + text_rect.topleft = (x, y) + surface.blit(text_surface, text_rect) + + # Draw a pulsating glow effect around the ship when powered up + if int(pygame.time.get_ticks() / 200) % 2 == 0: # Pulsating effect every 200ms + return + pygame.draw.circle(surface, YELLOW, player.rect.center, 30, 2) + # Game loop def main_game(): global all_sprites, bullets, enemies, powerups @@ -350,6 +369,7 @@ def main_game(): draw_text(screen, str(score), 18, SCREEN_WIDTH / 2, 10) draw_shield_bar(screen, 5, 5, player.shield) draw_lives(screen, SCREEN_WIDTH - 100, 5, player.lives, player_mini_img) + draw_power_level(screen, SCREEN_WIDTH - 200, 5, player.power_level) # Flip the display pygame.display.flip() From f7fd296285123b2261a258780aa5ce7f8c95cb14 Mon Sep 17 00:00:00 2001 From: nadula nisith <132653607+Ncode01@users.noreply.github.com> Date: Sat, 26 Apr 2025 11:36:27 +0530 Subject: [PATCH 7/8] assets fix --- space_adventure.py | 97 +++++++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 44 deletions(-) diff --git a/space_adventure.py b/space_adventure.py index 79006aa..9a0522e 100644 --- a/space_adventure.py +++ b/space_adventure.py @@ -5,7 +5,6 @@ # Initialize pygame pygame.init() -pygame.mixer.init() # Initialize sound mixer # Screen dimensions SCREEN_WIDTH = 800 @@ -21,31 +20,42 @@ # Asset loading function def load_image(name): - image_path = os.path.join('assets', 'images', name) try: - image = pygame.image.load(image_path).convert_alpha() - return image - except pygame.error as e: - print(f"Cannot load image: {image_path}") - print(e) - return pygame.Surface((30, 30)) - -# Load sounds -shoot_sound = pygame.mixer.Sound(os.path.join('assets', 'sounds', 'shoot.wav')) -explosion_sound = pygame.mixer.Sound(os.path.join('assets', 'sounds', 'explosion.wav')) -powerup_sound = pygame.mixer.Sound(os.path.join('assets', 'sounds', 'powerup.wav')) - -# Set sound volume -shoot_sound.set_volume(0.4) -explosion_sound.set_volume(0.6) -powerup_sound.set_volume(0.7) + # First try to load from support directory + image_path = os.path.join('support', name) + if os.path.exists(image_path): + image = pygame.image.load(image_path).convert_alpha() + return image + except: + pass + + # If not found, create a default surface with a color based on the name + size = (30, 30) + surf = pygame.Surface(size) + if 'player' in name: + surf.fill(GREEN) + elif 'enemy' in name: + surf.fill(RED) + elif 'bullet' in name: + surf.fill(BLUE) + elif 'powerup' in name: + if 'shield' in name: + surf.fill(BLUE) + else: + surf.fill(YELLOW) + elif 'explosion' in name: + surf.fill(YELLOW) + else: + surf.fill(WHITE) + + return surf # Game settings FPS = 60 # Create the screen screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) -pygame.display.set_caption("Space Adventure - Debug Challenge") +pygame.display.set_caption("Space Adventure") # Clock for controlling game speed clock = pygame.time.Clock() @@ -93,9 +103,9 @@ def update(self): self.speed_x = 0 keystate = pygame.key.get_pressed() if keystate[pygame.K_LEFT]: - self.speed_x = -8 # Changed from 8 to -8 for correct left movement + self.speed_x = -8 if keystate[pygame.K_RIGHT]: - self.speed_x = 8 # Changed from -8 to 8 for correct right movement + self.speed_x = 8 self.rect.x += self.speed_x # Fix boundary checking to keep the ship fully visible on screen @@ -106,7 +116,6 @@ def update(self): def shoot(self): if not self.hidden: - shoot_sound.play() # Play shoot sound if self.power_level == 1: bullet = Bullet(self.rect.centerx, self.rect.top) all_sprites.add(bullet) @@ -148,13 +157,13 @@ def update(self): self.rect.x = random.randrange(0, SCREEN_WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = random.randrange(1, 8) - self.speedx = random.randrange(-3, 3) # Reset speedx when enemy goes off bottom + self.speedx = random.randrange(-3, 3) if self.rect.left < -25 or self.rect.right > SCREEN_WIDTH + 25: self.rect.x = random.randrange(0, SCREEN_WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = random.randrange(1, 8) - self.speedx = random.randrange(-3, 3) # Reset speedx when enemy goes off sides + self.speedx = random.randrange(-3, 3) # Bullet class class Bullet(pygame.sprite.Sprite): @@ -164,10 +173,10 @@ def __init__(self, x, y): self.rect = self.image.get_rect() self.rect.centerx = x self.rect.bottom = y - self.speedy = 10 # Increased bullet speed from 1 to 10 + self.speedy = 10 def update(self): - self.rect.y -= self.speedy # Changed += to -= so bullets move upward + self.rect.y -= self.speedy if self.rect.bottom < 0: self.kill() @@ -195,7 +204,7 @@ def __init__(self, center, size): self.images = explosion_imgs self.image = self.images[0] # Scale the explosion images based on the size parameter - if size != 30: # 30 is the default/normal size, don't scale if it's already that size + if size != 30: self.image = pygame.transform.scale(self.image, (size, size)) self.rect = self.image.get_rect() self.rect.center = center @@ -208,11 +217,11 @@ def update(self): if now - self.last_update > self.frame_rate: self.last_update = now self.frame += 1 - if self.frame >= len(self.images): # Use length of images list instead of hardcoded value + if self.frame >= len(self.images): self.kill() - elif self.frame < len(self.images): # Use length of images list + elif self.frame < len(self.images): self.image = self.images[self.frame] - if self.size != 30: # Scale only if not default size + if self.size != 30: self.image = pygame.transform.scale(self.image, (self.size, self.size)) old_center = self.rect.center self.rect = self.image.get_rect() @@ -249,9 +258,8 @@ def draw_lives(surface, x, y, lives, img): # Function to draw power level indicator def draw_power_level(surface, x, y, power_level): if power_level <= 1: - return # Don't show anything for normal power + return - # Draw power level indicator text = f"POWER: {power_level}" font = pygame.font.SysFont("arial", 18) text_surface = font.render(text, True, YELLOW) @@ -260,13 +268,13 @@ def draw_power_level(surface, x, y, power_level): surface.blit(text_surface, text_rect) # Draw a pulsating glow effect around the ship when powered up - if int(pygame.time.get_ticks() / 200) % 2 == 0: # Pulsating effect every 200ms + if int(pygame.time.get_ticks() / 200) % 2 == 0: return pygame.draw.circle(surface, YELLOW, player.rect.center, 30, 2) # Game loop def main_game(): - global all_sprites, bullets, enemies, powerups + global all_sprites, bullets, enemies, powerups, player game_over = False running = True @@ -278,6 +286,7 @@ def main_game(): powerups = pygame.sprite.Group() # Create player + global player player = Player() all_sprites.add(player) @@ -309,10 +318,9 @@ def main_game(): all_sprites.update() # Check bullet-enemy collisions - hits = pygame.sprite.groupcollide(enemies, bullets, True, True) # Changed False to True so enemies are destroyed when hit + hits = pygame.sprite.groupcollide(enemies, bullets, True, True) for hit in hits: - explosion_sound.play() # Play explosion sound - score += 100 # Changed from 10 to 100 points per enemy destroyed + score += 100 # Create explosion explosion = Explosion(hit.rect.center, 30) all_sprites.add(explosion) @@ -336,7 +344,7 @@ def main_game(): all_sprites.add(new_enemy) enemies.add(new_enemy) if player.shield <= 0: - player.lives -= 1 # Uncommented this line to reduce lives when shield is depleted + player.lives -= 1 player.shield = 100 player.hide() if player.lives == 0: @@ -345,12 +353,11 @@ def main_game(): # Check player-powerup collisions hits = pygame.sprite.spritecollide(player, powerups, True) for hit in hits: - powerup_sound.play() # Play powerup sound if hit.type == 'shield': player.shield += 20 if player.shield > 100: player.shield = 100 - elif hit.type == 'power': # Changed from 'if' to 'elif' for proper type handling + elif hit.type == 'power': player.powerup() if game_over: @@ -358,8 +365,8 @@ def main_game(): draw_text(screen, "GAME OVER", 64, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2) pygame.display.flip() # Wait for a few seconds - pygame.time.delay(2000) # Wait for 2 seconds - running = False # Exit the game loop + pygame.time.delay(2000) + running = False # Draw / render screen.fill(BLACK) @@ -373,8 +380,10 @@ def main_game(): # Flip the display pygame.display.flip() - - pygame.quit() + +# Initialize global player variable +player = None if __name__ == "__main__": main_game() + pygame.quit() From 49c2b04a9fc186b8a4be263b11d2284c8affcf51 Mon Sep 17 00:00:00 2001 From: nadula nisith <132653607+Ncode01@users.noreply.github.com> Date: Sat, 26 Apr 2025 12:04:48 +0530 Subject: [PATCH 8/8] issue 2 --- space_adventure.py | 111 ++++++++++++++++----------------------------- 1 file changed, 38 insertions(+), 73 deletions(-) diff --git a/space_adventure.py b/space_adventure.py index 9a0522e..78a73ef 100644 --- a/space_adventure.py +++ b/space_adventure.py @@ -20,42 +20,21 @@ # Asset loading function def load_image(name): + image_path = os.path.join('assets', 'images', name) try: - # First try to load from support directory - image_path = os.path.join('support', name) - if os.path.exists(image_path): - image = pygame.image.load(image_path).convert_alpha() - return image - except: - pass - - # If not found, create a default surface with a color based on the name - size = (30, 30) - surf = pygame.Surface(size) - if 'player' in name: - surf.fill(GREEN) - elif 'enemy' in name: - surf.fill(RED) - elif 'bullet' in name: - surf.fill(BLUE) - elif 'powerup' in name: - if 'shield' in name: - surf.fill(BLUE) - else: - surf.fill(YELLOW) - elif 'explosion' in name: - surf.fill(YELLOW) - else: - surf.fill(WHITE) - - return surf + image = pygame.image.load(image_path).convert_alpha() + return image + except pygame.error as e: + print(f"Cannot load image: {image_path}") + print(e) + return pygame.Surface((30, 30)) # Game settings FPS = 60 # Create the screen screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) -pygame.display.set_caption("Space Adventure") +pygame.display.set_caption("Space Adventure - Debug Challenge") # Clock for controlling game speed clock = pygame.time.Clock() @@ -103,12 +82,11 @@ def update(self): self.speed_x = 0 keystate = pygame.key.get_pressed() if keystate[pygame.K_LEFT]: - self.speed_x = -8 + self.speed_x = -8 # Changed from 8 to -8 for correct left movement if keystate[pygame.K_RIGHT]: - self.speed_x = 8 + self.speed_x = 8 # Changed from -8 to 8 for correct right movement self.rect.x += self.speed_x - # Fix boundary checking to keep the ship fully visible on screen if self.rect.right > SCREEN_WIDTH: self.rect.right = SCREEN_WIDTH if self.rect.left < 0: @@ -157,13 +135,11 @@ def update(self): self.rect.x = random.randrange(0, SCREEN_WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = random.randrange(1, 8) - self.speedx = random.randrange(-3, 3) if self.rect.left < -25 or self.rect.right > SCREEN_WIDTH + 25: self.rect.x = random.randrange(0, SCREEN_WIDTH - self.rect.width) self.rect.y = random.randrange(-100, -40) self.speedy = random.randrange(1, 8) - self.speedx = random.randrange(-3, 3) # Bullet class class Bullet(pygame.sprite.Sprite): @@ -173,10 +149,10 @@ def __init__(self, x, y): self.rect = self.image.get_rect() self.rect.centerx = x self.rect.bottom = y - self.speedy = 10 + self.speedy = 10 # Increased bullet speed from 1 to 10 def update(self): - self.rect.y -= self.speedy + self.rect.y -= self.speedy # Changed += to -= so bullets move upward if self.rect.bottom < 0: self.kill() @@ -203,9 +179,6 @@ def __init__(self, center, size): self.size = size self.images = explosion_imgs self.image = self.images[0] - # Scale the explosion images based on the size parameter - if size != 30: - self.image = pygame.transform.scale(self.image, (size, size)) self.rect = self.image.get_rect() self.rect.center = center self.frame = 0 @@ -217,12 +190,10 @@ def update(self): if now - self.last_update > self.frame_rate: self.last_update = now self.frame += 1 - if self.frame >= len(self.images): + if self.frame >= 5: self.kill() - elif self.frame < len(self.images): + elif self.frame < 5: self.image = self.images[self.frame] - if self.size != 30: - self.image = pygame.transform.scale(self.image, (self.size, self.size)) old_center = self.rect.center self.rect = self.image.get_rect() self.rect.center = old_center @@ -255,26 +226,9 @@ def draw_lives(surface, x, y, lives, img): img_rect.y = y surface.blit(img, img_rect) -# Function to draw power level indicator -def draw_power_level(surface, x, y, power_level): - if power_level <= 1: - return - - text = f"POWER: {power_level}" - font = pygame.font.SysFont("arial", 18) - text_surface = font.render(text, True, YELLOW) - text_rect = text_surface.get_rect() - text_rect.topleft = (x, y) - surface.blit(text_surface, text_rect) - - # Draw a pulsating glow effect around the ship when powered up - if int(pygame.time.get_ticks() / 200) % 2 == 0: - return - pygame.draw.circle(surface, YELLOW, player.rect.center, 30, 2) - # Game loop def main_game(): - global all_sprites, bullets, enemies, powerups, player + global all_sprites, bullets, enemies, powerups game_over = False running = True @@ -286,7 +240,6 @@ def main_game(): powerups = pygame.sprite.Group() # Create player - global player player = Player() all_sprites.add(player) @@ -318,9 +271,9 @@ def main_game(): all_sprites.update() # Check bullet-enemy collisions - hits = pygame.sprite.groupcollide(enemies, bullets, True, True) + hits = pygame.sprite.groupcollide(enemies, bullets, True, True) # Changed False to True so enemies are destroyed when hit for hit in hits: - score += 100 + score += 100 # Changed from 10 to 100 points per enemy destroyed # Create explosion explosion = Explosion(hit.rect.center, 30) all_sprites.add(explosion) @@ -344,7 +297,7 @@ def main_game(): all_sprites.add(new_enemy) enemies.add(new_enemy) if player.shield <= 0: - player.lives -= 1 + player.lives -= 1 # Uncommented this line to reduce lives when shield is depleted player.shield = 100 player.hide() if player.lives == 0: @@ -357,16 +310,25 @@ def main_game(): player.shield += 20 if player.shield > 100: player.shield = 100 - elif hit.type == 'power': + # Display shield powerup text + draw_text(screen, "+SHIELD", 18, player.rect.centerx, player.rect.top - 10) + if hit.type == 'power': player.powerup() + # Display power powerup text + draw_text(screen, "+POWER LEVEL " + str(player.power_level), 18, player.rect.centerx, player.rect.top - 10) + + # Show visual feedback by updating the display immediately + pygame.display.flip() if game_over: # Display Game Over message draw_text(screen, "GAME OVER", 64, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2) pygame.display.flip() # Wait for a few seconds - pygame.time.delay(2000) - running = False + pygame.time.delay(2000) # Wait for 2 seconds + running = False # Exit the game loop + pygame.quit() + sys.exit() # Make sure to completely exit the game # Draw / render screen.fill(BLACK) @@ -376,14 +338,17 @@ def main_game(): draw_text(screen, str(score), 18, SCREEN_WIDTH / 2, 10) draw_shield_bar(screen, 5, 5, player.shield) draw_lives(screen, SCREEN_WIDTH - 100, 5, player.lives, player_mini_img) - draw_power_level(screen, SCREEN_WIDTH - 200, 5, player.power_level) + + # Draw power level indicator if powered up + if player.power_level > 1: + time_left = 5 - (pygame.time.get_ticks() - player.power_timer) / 1000 + if time_left > 0: + draw_text(screen, f"POWER LEVEL: {player.power_level} ({time_left:.1f}s)", 18, SCREEN_WIDTH / 2, 30) # Flip the display pygame.display.flip() - -# Initialize global player variable -player = None + + pygame.quit() if __name__ == "__main__": main_game() - pygame.quit()