Pygame_Roland_alexannder/main.py

179 lines
5.3 KiB
Python

import pygame
from player import Player
from enemy import Enemy
from settings import SCREEN_HEIGHT, SCREEN_WIDTH
from pygame.locals import (
RLEACCEL,
K_UP,
K_DOWN,
K_LEFT,
K_RIGHT,
K_ESCAPE,
KEYDOWN,
QUIT,
K_SPACE,
K_f,
K_RETURN,
)
pygame.mixer.init()
pygame.init()
pygame.font.init()
my_font = pygame.font.SysFont('Comic Sans MS', 30)
pygame.mixer.music.load("sounds/aura.mp3")
collision_sound = pygame.mixer.Sound("sounds/dead.ogg")
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
ADDENEMY = pygame.USEREVENT + 1
pygame.time.set_timer(ADDENEMY, 1000)
running = True
game_started = False
# Initialize player, enemy, and sprite groups
player = Player()
enemy = Enemy()
enemies = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
all_sprites.add(player)
all_sprites.add(enemy)
enemies.add(enemy)
bg1 = pygame.transform.scale(pygame.image.load("sprites/Day.city.png").convert(), (SCREEN_WIDTH, SCREEN_HEIGHT))
clock = pygame.time.Clock()
# Start screen loop
while not game_started:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_SPACE:
game_started = True # Start the game when Space is pressed
if event.key == K_f:
game_started = True # Start the game when F is pressed (optional)
elif event.type == QUIT:
running = False
game_started = True # Exit the loop if quit event occurs
screen.fill((0, 0, 0))
text = my_font.render("Start", True, (255, 255, 255))
screen.blit(text, (
(SCREEN_WIDTH - text.get_width()) / 2,
(SCREEN_HEIGHT - text.get_height()) / 2,
))
text = my_font.render("Press Space to Start", True, (255, 255, 255))
screen.blit(text, (
(SCREEN_WIDTH - text.get_width()) / 2,
(SCREEN_HEIGHT - text.get_height() - 200)
))
pygame.display.flip()
clock.tick(30) # Limit FPS to 30
pygame.mixer.music.play(loops=-1, fade_ms=1000)
# Main game loop
while running:
screen.fill((0, 0, 0)) # Background color
screen.blit(bg1, (0, 0)) # Draw the background image
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False # Quit on Escape
elif event.key == K_RETURN: # Press Enter to restart
# Reset the game state
player.kill() # Remove player from all_sprites
enemy.kill() # Remove enemy from all_sprites
enemies.empty() # Empty enemies group
all_sprites.empty() # Empty all_sprites group
# Reinitialize player, enemies, and all sprites
player = Player()
enemy = Enemy()
enemies.add(enemy)
all_sprites.add(player)
all_sprites.add(enemy)
# Reset background and re-enter game loop
continue # Restart game loop from the beginning
elif event.type == QUIT:
running = False # Quit on window close
elif event.type == ADDENEMY:
# Add a new enemy each second
new_enemy = Enemy()
enemies.add(new_enemy)
all_sprites.add(new_enemy)
pressed_keys = pygame.key.get_pressed()
player.update(pressed_keys)
enemies.update()
# Render all sprites
for entity in all_sprites:
screen.blit(entity.surf, entity.rect)
# Check for collisions between player and enemies
if pygame.sprite.spritecollideany(player, enemies):
player.kill() # Remove player when it collides with an enemy
pygame.time.delay(250) # Wait a bit before showing the game over screen
pygame.mixer.stop
collision_sound.play()
# Game Over screen after collision
screen.fill((0, 0, 0)) # Clear the screen with a black background
text = my_font.render("Game Over", True, (255, 0, 0))
screen.blit(text, (
(SCREEN_WIDTH - text.get_width()) / 2,
(SCREEN_HEIGHT - text.get_height()) / 2
))
text = my_font.render("Press Enter to Restart", True, (255, 255, 255))
screen.blit(text, (
(SCREEN_WIDTH - text.get_width()) / 2,
(SCREEN_HEIGHT - text.get_height()) / 2 + 50,
))
text = my_font.render("Press Escape to Quit", True, (255, 255, 255))
screen.blit(text, (
(SCREEN_WIDTH - text.get_width()) / 2,
(SCREEN_HEIGHT - text.get_height()) / 2 +100,
))
pygame.display.flip()
# Wait for the player to press Enter to restart or Escape to quit
waiting_for_input = True
while waiting_for_input:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_RETURN:
waiting_for_input = False # Player pressed Enter to restart
if event.key == K_ESCAPE:
running = False # Player pressed Escape to quit
waiting_for_input = False
elif event.type == QUIT:
waiting_for_input = False
running = False
pygame.display.flip() # Update the screen
clock.tick(60) # Limit FPS to 60
pygame.mixer.music.stop()
pygame.mixer.quit()
pygame.quit()