In this game, you avoid obstacles and try to get an incredibly high score. Use arrow keys to move,.
To play the game, copy the code below into your python file and run the game.
Copy the code for FREE!:
import pygame import sys import random import time # Initialize Pygame pygame.init() # Set up the game window width, height = 800, 600 win = pygame.display.set_mode((width, height)) pygame.display.set_caption("Obstacle Rush") # Define colors white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) # Define the player player_size = 50 player_x = width // 2 - player_size // 2 player_y = height - 2 * player_size player_speed = 5 # Define obstacles obstacle_size = 50 obstacle_speed = 5 obstacle_frequency = 25 obstacles = [] # Scoring score = 0 score_font = pygame.font.Font(None, 36) # Clocks for controlling frame rate and scoring clock = pygame.time.Clock() score_clock = pygame.time.Clock() score_timer = 0 def display_score(): score_text = score_font.render(f"Score: {score}", True, black) win.blit(score_text, (10, 10)) def display_game_over(): game_over_font = pygame.font.Font(None, 72) game_over_text = game_over_font.render("You died!", True, black) score_text = score_font.render(f"Score: {score}", True, black) win.blit(game_over_text, (width // 2 - game_over_text.get_width() // 2, height // 2 - 50)) win.blit(score_text, (width // 2 - score_text.get_width() // 2, height // 2 + 50)) # Draw Play Again button play_again_rect = pygame.Rect(width // 2 - 100, height // 2 + 150, 200, 50) pygame.draw.rect(win, red, play_again_rect) play_again_font = pygame.font.Font(None, 36) play_again_text = play_again_font.render("Play Again?", True, white) win.blit(play_again_text, (width // 2 - play_again_text.get_width() // 2, height // 2 + 165)) pygame.display.update() # Wait for a key press before restarting the game wait_for_play_again() def wait_for_play_again(): waiting = True while waiting: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.MOUSEBUTTONDOWN: x, y = event.pos play_again_rect = pygame.Rect(width // 2 - 100, height // 2 + 150, 200, 50) if play_again_rect.collidepoint(x, y): restart_game() waiting = False def restart_game(): global player_x, player_y, obstacles, score player_x = width // 2 - player_size // 2 player_y = height - 2 * player_size obstacles = [] score = 0 # Main game loop while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() keys = pygame.key.get_pressed() player_x += (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * player_speed # Update obstacles if random.randrange(obstacle_frequency) == 0: obstacle_x = random.randint(0, width - obstacle_size) obstacle_y = -obstacle_size obstacles.append([obstacle_x, obstacle_y]) for obstacle in obstacles: obstacle[1] += obstacle_speed if obstacle[1] > height: obstacles.remove(obstacle) score += 1 # Increase score when an obstacle is avoided # Check for collisions with obstacles for obstacle in obstacles: if ( player_x < obstacle[0] + obstacle_size and player_x + player_size > obstacle[0] and player_y < obstacle[1] + obstacle_size and player_y + player_size > obstacle[1] ): display_game_over() # Draw everything win.fill(white) pygame.draw.rect(win, black, (player_x, player_y, player_size, player_size)) for obstacle in obstacles: pygame.draw.rect(win, black, (obstacle[0], obstacle[1], obstacle_size, obstacle_size)) display_score() # Display the current score pygame.display.update() clock.tick(30) # Set the frame rate # Scoring: Increase score every 2 seconds elapsed_time = score_clock.tick(1000) # Clock in milliseconds score_timer += elapsed_time if score_timer >= 2000: # 2000 milliseconds = 2 seconds score += 1 score_timer = 0 # Check for collisions again after drawing to avoid immediate game over screen for obstacle in obstacles: if ( player_x < obstacle[0] + obstacle_size and player_x + player_size > obstacle[0] and player_y < obstacle[1] + obstacle_size and player_y + player_size > obstacle[1] ): display_game_over() pygame.display.update()