In this game, you collect as many stars as you can in 30 seconds. Each star is worth 10 points. Your goal is to get as many points as you can in the 30 seconds.
Click here for a demonstration
In order to play the game, copy the code below and paste it into your python file. Run the code and enjoy!
Copy the code for FREE!:
import pygame import sys import random # Initialize Pygame pygame.init() # Set up display width, height = 800, 600 screen = pygame.display.set_mode((width, height)) pygame.display.set_caption("Star collector") # Set up colors black = (0, 0, 0) white = (255, 255, 255) yellow = (255, 255, 0) red = (255, 0, 0) # Set up player player_size = 50 player_x = width // 2 - player_size // 2 player_y = height // 2 - player_size // 2 player_speed = 5 # Set up stars stars = [] star_size = 20 num_stars = 10 # Set up obstacles obstacles = [] obstacle_size = 30 num_obstacles = 5 # Set up projectiles projectiles = [] projectile_size = 10 projectile_speed = 7 # Set up score and timer score = 0 font = pygame.font.SysFont(None, 30) timer = 30 # in seconds start_time = pygame.time.get_ticks() # Set up end game screen end_game_font = pygame.font.SysFont(None, 60) def respawn_stars(): for _ in range(num_stars): star = { 'x': random.randint(0, width - star_size), 'y': random.randint(0, height - star_size) } stars.append(star) def draw_objects(): for star in stars: pygame.draw.rect(screen, yellow, (star['x'], star['y'], star_size, star_size)) for obstacle in obstacles: pygame.draw.rect(screen, red, (obstacle['x'], obstacle['y'], obstacle_size, obstacle_size)) for projectile in projectiles: pygame.draw.rect(screen, white, (projectile['x'], projectile['y'], projectile_size, projectile_size)) pygame.draw.rect(screen, white, (player_x, player_y, player_size, player_size)) # Display score and timer score_text = font.render(f"Score: {score}", True, white) screen.blit(score_text, (10, 10)) time_passed = (pygame.time.get_ticks() - start_time) // 1000 remaining_time = max(timer - time_passed, 0) timer_text = font.render(f"Time: {remaining_time}", True, white) screen.blit(timer_text, (width - 120, 10)) def end_game(): end_text = end_game_font.render(f"Game Over\nYour Score: {score}\nCan you do better?", True, white) screen.blit(end_text, (width // 2 - 200, height // 2 - 60)) pygame.display.flip() pygame.time.wait(3000) # Display the end screen for 3 seconds pygame.quit() sys.exit() # Main game loop while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # Handle shooting projectiles if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: projectile = { 'x': player_x + player_size // 2 - projectile_size // 2, 'y': player_y, 'direction': 'up' } projectiles.append(projectile) # Handle player movement keys = pygame.key.get_pressed() if keys[pygame.K_LEFT] and player_x > 0: player_x -= player_speed if keys[pygame.K_RIGHT] and player_x < width - player_size: player_x += player_speed if keys[pygame.K_UP] and player_y > 0: player_y -= player_speed if keys[pygame.K_DOWN] and player_y < height - player_size: player_y += player_speed # Update stars and obstacles if not stars: respawn_stars() for obstacle in obstacles: obstacle['y'] += 3 # Obstacles move down the screen # Check for collisions with projectiles for projectile in projectiles: if ( obstacle['x'] < projectile['x'] < obstacle['x'] + obstacle_size and obstacle['y'] < projectile['y'] < obstacle['y'] + obstacle_size ): obstacles.remove(obstacle) projectiles.remove(projectile) score += 20 # Update projectiles projectiles = [{'x': proj['x'], 'y': proj['y'] - projectile_speed, 'direction': proj['direction']} for proj in projectiles if proj['y'] > 0] # Check for star collisions collected_stars = [star for star in stars if player_x < star['x'] < player_x + player_size and player_y < star['y'] < player_y + player_size] for star in collected_stars: stars.remove(star) score += 10 # Check for obstacle collisions with the player if any( player_x < obstacle['x'] + obstacle_size and player_x + player_size > obstacle['x'] and player_y < obstacle['y'] + obstacle_size and player_y + player_size > obstacle['y'] for obstacle in obstacles ): end_game() # Update display screen.fill(black) # Calculate remaining time and check if the game is over time_passed = (pygame.time.get_ticks() - start_time) // 1000 remaining_time = max(timer - time_passed, 0) if remaining_time <= 0: end_game() else: draw_objects() pygame.display.flip() # Cap the frame rate pygame.time.Clock().tick(60)