import pygame import sys import os # Initialize Pygame pygame.init() pygame.mixer.init() # Constants WIDTH, HEIGHT = 800, 600 PADDLE_WIDTH, PADDLE_HEIGHT = 100, 10 PADDLE_SPEED = 10 BRICK_WIDTH, BRICK_HEIGHT = 80, 20 BRICK_ROWS = 4 BRICK_COLS = 10 LINE_HEIGHT = 5 # Colors WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) # Sounds wall_sound = None block_sound = None death_sound = None # Check if sound files exist before loading if os.path.exists("wall.wav"): wall_sound = pygame.mixer.Sound("wall.wav") if os.path.exists("block.wav"): block_sound = pygame.mixer.Sound("block.wav") if os.path.exists("death.wav"): death_sound = pygame.mixer.Sound("death.wav") # Create the game window screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Arkanoid") # 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 heart bar image heart_bar_image = pygame.image.load("heartbar.png").convert_alpha() HEART_WIDTH, HEART_HEIGHT = 15, 15 # Adjust heart size here HEART_SPACING = 20 # Adjust spacing between hearts here # Create the paddle paddle = pygame.Rect((WIDTH - PADDLE_WIDTH) // 2, HEIGHT - PADDLE_HEIGHT - 20, PADDLE_WIDTH, PADDLE_HEIGHT) # Create the ball (cat) cat_rect = cat_image.get_rect(center=(WIDTH // 2, HEIGHT // 2)) cat_speed = [5, 5] # Cat movement speed # Create death line line = pygame.Rect(0, HEIGHT - LINE_HEIGHT, WIDTH, LINE_HEIGHT) # Create bricks bricks = [] for row in range(BRICK_ROWS): for col in range(BRICK_COLS): brick = pygame.Rect(col * (BRICK_WIDTH + 5), row * (BRICK_HEIGHT + 5), BRICK_WIDTH, BRICK_HEIGHT) bricks.append(brick) # Scoring score = 0 font = pygame.font.Font(None, 36) # Lives lives = 9 # Start with 9 lives # Game Over flag and text game_over = False game_started = False game_over_text = font.render("Game Over", True, WHITE) game_over_rect = game_over_text.get_rect(center=(WIDTH // 2, HEIGHT // 2)) # Flags for paddle movement move_left = False move_right = False # Main game loop while not game_over: for event in pygame.event.get(): 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 # Move the paddle based on flags if move_left and paddle.left > 0: paddle.x -= PADDLE_SPEED 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] if wall_sound: wall_sound.play() if cat_rect.top <= 0 or cat_rect.colliderect(paddle): cat_speed[1] = -cat_speed[1] if wall_sound: wall_sound.play() # Check for collision with bricks for brick in bricks[:]: if cat_rect.colliderect(brick): bricks.remove(brick) score += 1 if block_sound: block_sound.play() # Check for loss of life if cat_rect.bottom >= HEIGHT: lives -= 1 if death_sound: death_sound.play() if lives <= 0: game_over = True break else: cat_rect.center = (WIDTH // 2, HEIGHT // 2) # Clear the screen screen.fill(BLACK) # Draw paddle pygame.draw.rect(screen, WHITE, paddle) # Draw bricks for brick in bricks: pygame.draw.rect(screen, WHITE, brick) # Draw cat screen.blit(cat_image, cat_rect) # Draw heart bar representing lives start_x = 10 # Adjust the starting x-coordinate to move the heart bar more to the left for i in range(lives): heart_image = pygame.transform.scale(heart_bar_image, (HEART_WIDTH, HEART_HEIGHT)) screen.blit(heart_image, (start_x + i * (HEART_WIDTH + HEART_SPACING), 10)) # Draw score score_text = font.render(f"Score: {score}", True, (128, 0, 128)) # Purple color screen.blit(score_text, (10, 50)) # Update the display pygame.display.flip() # Cap the frame rate pygame.time.Clock().tick(60) # Display Game Over text screen.fill(BLACK) screen.blit(game_over_text, game_over_rect) pygame.display.flip() # Wait for a few seconds before quitting pygame.time.delay(1500) pygame.quit() sys.exit()