From e4044183b58c530c0b8965871edecfa0930bf791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anna=20Marija=20Red=C5=BEepova?= Date: Sun, 3 Mar 2024 15:03:03 +0000 Subject: [PATCH] Update game2 --- game2 | 186 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 142 insertions(+), 44 deletions(-) diff --git a/game2 b/game2 index 20e65fd..9f37fd4 100644 --- a/game2 +++ b/game2 @@ -16,12 +16,15 @@ BRICK_ROWS = 4 BRICK_COLS = 10 LINE_HEIGHT = 5 CUPCAKE_WIDTH, CUPCAKE_HEIGHT = 30, 30 +FOOTBALL_WIDTH, FOOTBALL_HEIGHT = 40, 40 +TROLLFACE_WIDTH, TROLLFACE_HEIGHT = 50, 50 # Colors WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) PURPLE = (128, 0, 128) +GREEN = (0, 255, 0) # Load additional sound files if os.path.exists("wearethechampions.mp3"): @@ -38,6 +41,10 @@ if os.path.exists("lookatthisdude.mp3"): death_sound = pygame.mixer.Sound("lookatthisdude.mp3") if os.path.exists("chew.wav"): chew_sound = pygame.mixer.Sound("chew.wav") +if os.path.exists("meow.mp3"): + meow_sound = pygame.mixer.Sound("meow.mp3") +if os.path.exists("rimshot.mp3"): + rimshot_sound = pygame.mixer.Sound("rimshot.mp3") # Create the game window screen = pygame.display.set_mode((WIDTH, HEIGHT)) @@ -47,15 +54,83 @@ pygame.display.set_caption("Arkanoid") background_image = pygame.image.load("beach.jpg").convert() background_image = pygame.transform.scale(background_image, (WIDTH, HEIGHT)) -# Load cat image -cat_original_image = pygame.image.load("cat.png").convert_alpha() -CAT_WIDTH, CAT_HEIGHT = 50, 50 -cat_image = pygame.transform.scale(cat_original_image, (CAT_WIDTH, CAT_HEIGHT)) - # Load cupcake image cupcake_original_image = pygame.image.load("cupcake.png").convert_alpha() cupcake_image = pygame.transform.scale(cupcake_original_image, (CUPCAKE_WIDTH, CUPCAKE_HEIGHT)) +# Load football image +football_original_image = pygame.image.load("football.png").convert_alpha() +football_image = pygame.transform.scale(football_original_image, (FOOTBALL_WIDTH, FOOTBALL_HEIGHT)) + +# Load trollface image +trollface_original_image = pygame.image.load("trollface.png").convert_alpha() +trollface_image = pygame.transform.scale(trollface_original_image, (TROLLFACE_WIDTH, TROLLFACE_HEIGHT)) + +# Load character images +purple_cat_original_image = pygame.image.load("cat.png").convert_alpha() +orange_cat_original_image = pygame.image.load("orangecat.jpg").convert_alpha() +cool_tomato_original_image = pygame.image.load("tomato.png").convert_alpha() +confused_lemon_original_image = pygame.image.load("lemon.jpg").convert_alpha() + +# Constants for character selection +CHARACTER_WIDTH, CHARACTER_HEIGHT = 100, 100 +CHARACTER_SPACING = 50 +CHARACTER_Y = HEIGHT // 2 - CHARACTER_HEIGHT // 2 +CHARACTER_OPTIONS = [ + {"name": "Purple Cat", "image": pygame.transform.scale(purple_cat_original_image, (CHARACTER_WIDTH, CHARACTER_HEIGHT))}, + {"name": "Orange Cat", "image": pygame.transform.scale(orange_cat_original_image, (CHARACTER_WIDTH, CHARACTER_HEIGHT))}, + {"name": "Cool Tomato", "image": pygame.transform.scale(cool_tomato_original_image, (CHARACTER_WIDTH, CHARACTER_HEIGHT))}, + {"name": "Confused Lemon", "image": pygame.transform.scale(confused_lemon_original_image, (CHARACTER_WIDTH, CHARACTER_HEIGHT))} +] +SELECT_CHAR_FONT = pygame.font.Font(None, 36) +SELECT_CHAR_TEXT = SELECT_CHAR_FONT.render("Select your character:", True, WHITE) +SELECT_CHAR_TEXT_POS = SELECT_CHAR_TEXT.get_rect(center=(WIDTH // 2, HEIGHT // 4)) + +# Variables for character selection +selected_character_index = 0 +selected_character_rect = pygame.Rect(0, 0, CHARACTER_WIDTH + 10, CHARACTER_HEIGHT + 10) +selected_character_rect.center = (WIDTH // 2, CHARACTER_Y + CHARACTER_HEIGHT // 2) + +# Function to draw character options +def draw_character_options(): + character_x = (WIDTH - (CHARACTER_WIDTH + CHARACTER_SPACING) * len(CHARACTER_OPTIONS)) // 2 + for i, option in enumerate(CHARACTER_OPTIONS): + character_rect = pygame.Rect(character_x, CHARACTER_Y, CHARACTER_WIDTH, CHARACTER_HEIGHT) + pygame.draw.rect(screen, WHITE, character_rect, 2) + if i == selected_character_index: + pygame.draw.rect(screen, RED, character_rect, 2) + screen.blit(option["image"], (character_x + 5, CHARACTER_Y + 5)) + character_x += CHARACTER_WIDTH + CHARACTER_SPACING + +# Function to handle character selection +def handle_character_selection(): + global selected_character_index + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + sys.exit() + elif event.type == pygame.KEYDOWN: + if event.key == pygame.K_LEFT: + selected_character_index = (selected_character_index - 1) % len(CHARACTER_OPTIONS) + elif event.key == pygame.K_RIGHT: + selected_character_index = (selected_character_index + 1) % len(CHARACTER_OPTIONS) + elif event.key == pygame.K_RETURN: + return CHARACTER_OPTIONS[selected_character_index]["image"] + +# Main loop for character selection screen +while True: + screen.fill(BLACK) + screen.blit(SELECT_CHAR_TEXT, SELECT_CHAR_TEXT_POS) + draw_character_options() + pygame.display.flip() + selected_character_image = handle_character_selection() + if selected_character_image: + break + +# Set the selected character image +cat_image = selected_character_image +CAT_WIDTH, CAT_HEIGHT = cat_image.get_size() + # Create the paddle paddle = pygame.Rect((WIDTH - PADDLE_WIDTH) // 2, HEIGHT - PADDLE_HEIGHT - 20, PADDLE_WIDTH, PADDLE_HEIGHT) @@ -73,28 +148,14 @@ for row in range(BRICK_ROWS): brick = pygame.Rect(col * (BRICK_WIDTH + 5), row * (BRICK_HEIGHT + 5), BRICK_WIDTH, BRICK_HEIGHT) bricks.append(brick) -# Falling Cupcakes -class Cupcake: - def __init__(self): - self.width = CUPCAKE_WIDTH - self.height = CUPCAKE_HEIGHT - self.x = random.randint(0, WIDTH - self.width) - self.y = 0 - self.speed = random.randint(1, 3) - - def update(self): - self.y += self.speed - - def draw(self, surface): - surface.blit(cupcake_image, (self.x, self.y)) - # Create a list to hold falling cupcakes falling_cupcakes = [] -# Function to spawn falling cupcakes -def spawn_cupcakes(): - if len(falling_cupcakes) < 2: # Maximum 2 cupcakes on screen - falling_cupcakes.append(Cupcake()) +# Create a list to hold falling footballs +falling_footballs = [] + +# Create a list to hold falling trollfaces +falling_trollfaces = [] # Scoring score = 0 @@ -118,6 +179,10 @@ winning_rect = winning_text.get_rect(center=(WIDTH // 2, HEIGHT // 2)) move_left = False move_right = False +# Event to spawn falling objects +SPAWN_OBJECTS = pygame.USEREVENT + 1 +pygame.time.set_timer(SPAWN_OBJECTS, 5000) # Spawn objects every 5 seconds + # Function to draw heart def draw_heart(surface, color, pos): # Draw filled heart @@ -131,18 +196,25 @@ while not game_over: if event.type == pygame.QUIT: pygame.quit() sys.exit() - # Key pressed elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: move_left = True elif event.key == pygame.K_RIGHT: move_right = True - # Key released elif event.type == pygame.KEYUP: if event.key == pygame.K_LEFT: move_left = False elif event.key == pygame.K_RIGHT: move_right = False + elif event.type == SPAWN_OBJECTS: + # Randomly spawn an object (cupcake, football, or trollface) + spawn_type = random.choice(["cupcake", "football", "trollface"]) + if spawn_type == "cupcake": + falling_cupcakes.append(Cupcake()) + elif spawn_type == "football": + falling_footballs.append(Football()) + else: + falling_trollfaces.append(Trollface()) # Move the paddle based on flags if move_left and paddle.left > 0: @@ -150,10 +222,6 @@ while not game_over: if move_right and paddle.right < WIDTH: paddle.x += PADDLE_SPEED - # Move the cat - cat_rect.x += cat_speed[0] - cat_rect.y += cat_speed[1] - # Check for collision with walls if cat_rect.left <= 0 or cat_rect.right >= WIDTH: cat_speed[0] = -cat_speed[0] @@ -174,14 +242,38 @@ while not game_over: # Check for collision with cupcakes for cupcake in falling_cupcakes[:]: - if cat_rect.colliderect(cupcake.x, cupcake.y, cupcake.width, cupcake.height): + if paddle.colliderect(cupcake.x, cupcake.y, cupcake.width, cupcake.height): falling_cupcakes.remove(cupcake) if chew_sound: chew_sound.play() - lives += 1 # Restore one life - # Increase the size of the cat - cat_image = pygame.transform.scale(cat_original_image, (CAT_WIDTH + 10, CAT_HEIGHT + 10)) - cat_rect = cat_image.get_rect(center=cat_rect.center) + # Update cat size and speed + cat_rect.width += 10 + cat_rect.height += 10 + cat_speed[0] += 1 + cat_speed[1] += 1 + + # Check for collision with footballs + for football in falling_footballs[:]: + if paddle.colliderect(football.x, football.y, football.width, football.height): + falling_footballs.remove(football) + if meow_sound: + meow_sound.play() + # Update cat size and speed + cat_rect.width -= 10 + cat_rect.height -= 10 + cat_speed[0] -= 1 + cat_speed[1] -= 1 + + # Check for collision with trollfaces + for trollface in falling_trollfaces[:]: + if paddle.colliderect(trollface.x, trollface.y, trollface.width, trollface.height): + falling_trollfaces.remove(trollface) + if rimshot_sound: + rimshot_sound.play() + # Grow a random brick + brick = random.choice(bricks) + brick.width += 10 + brick.height += 5 # Check for loss of life if cat_rect.bottom >= HEIGHT: @@ -203,7 +295,7 @@ while not game_over: screen.blit(background_image, (0, 0)) # Draw paddle - pygame.draw.rect(screen, WHITE, paddle) + pygame.draw.rect(screen, GREEN, paddle) # Draw bricks for brick in bricks: @@ -217,6 +309,16 @@ while not game_over: cupcake.update() cupcake.draw(screen) + # Draw falling footballs + for football in falling_footballs: + football.update() + football.draw(screen) + + # Draw falling trollfaces + for trollface in falling_trollfaces: + trollface.update() + trollface.draw(screen) + # Draw heart bar representing lives for i in range(lives): draw_heart(screen, RED, (10 + i * 30, 10)) # Adjust the heart position and color as needed @@ -225,9 +327,6 @@ while not game_over: score_text = font.render(f"Score: {score}", True, PURPLE) screen.blit(score_text, (10, 50)) - # Spawn falling cupcakes - spawn_cupcakes() - # Update the display pygame.display.flip() @@ -243,14 +342,13 @@ elif winning: if win_sound: win_sound.play() screen.blit(winning_text, winning_rect) + +# Update the display pygame.display.flip() -# Stop background music when game is over -if bg_music: - bg_music.stop() - # Wait for a few seconds before quitting -pygame.time.delay(1500) +pygame.time.wait(5000) +# Quit Pygame pygame.quit() sys.exit()