import pygame import random # Initialize pygame pygame.init() # Game settings width, height = 800, 600 ball_radius = 10 paddle_width, paddle_height = 15, 90 speed = 5 # Colors WHITE = (255, 255, 255) BLACK = (0, 0, 0) BLUE = (255, 0, 0) # Create the game window screen = pygame.display.set_mode((width, height)) pygame.display.set_caption("Ping Pong Game") # Paddle and Ball classes class Paddle: def __init__(self, x, y): self.rect = pygame.Rect(x, y, paddle_width, paddle_height) self.speed = speed def move(self, speed_y): if 0 <= self.rect.top + speed_y <= height - paddle_height: self.rect.y += speed_y def draw(self): pygame.draw.rect(screen, WHITE, self.rect) class Ball: def __init__(self): self.rect = pygame.Rect(width // 2 - ball_radius, height // 2 - ball_radius, ball_radius * 2, ball_radius * 2) self.x_speed = random.choice([speed, -speed]) self.y_speed = random.choice([speed, -speed]) def move(self): self.rect.x += self.x_speed self.rect.y += self.y_speed def draw(self): pygame.draw.ellipse(screen, BLUE, self.rect) # Main game loop def game_loop(): clock = pygame.time.Clock() paddle_left = Paddle(30, height // 2 - paddle_height // 2) paddle_right = Paddle(width - 45, height // 2 - paddle_height // 2) ball = Ball() left_score = 0 right_score = 0 font = pygame.font.SysFont('Arial', 30) while True: screen.fill(BLACK) # Event handling for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() return # Paddle movement keys = pygame.key.get_pressed() if keys[pygame.K_w]: # Move left paddle up paddle_left.move(-paddle_left.speed) if keys[pygame.K_s]: # Move left paddle down paddle_left.move(paddle_left.speed) if keys[pygame.K_UP]: # Move right paddle up paddle_right.move(-paddle_right.speed) if keys[pygame.K_DOWN]: # Move right paddle down paddle_right.move(paddle_right.speed) # Ball movement ball.move() # Collision with top/bottom if ball.rect.top <= 0 or ball.rect.bottom >= height: ball.y_speed *= -1 # Collision with paddles if ball.rect.colliderect(paddle_left.rect) or ball.rect.colliderect(paddle_right.rect): ball.x_speed *= -1 # Scoring if ball.rect.left <= 0: right_score += 1 ball = Ball() # Reset ball if ball.rect.right >= width: left_score += 1 ball = Ball() # Reset ball # Draw paddles, ball, and scores paddle_left.draw() paddle_right.draw() ball.draw() # Display the scores score_text = font.render(f"{left_score} - {right_score}", True, WHITE) screen.blit(score_text, (width // 2 - score_text.get_width() // 2, 20)) # Update the screen pygame.display.flip() # Frame rate clock.tick(60) # Run the game game_loop()