import pygame import sys import random import math pygame.init() WIDTH, HEIGHT = 1000, 1000 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("2 Player Game with Bomb") WHITE = (255, 255, 255) RED = (255, 0, 0) BLUE = (0, 0, 255) BLACK = (0, 0, 0) player_size = 50 player1_pos = [100, HEIGHT // 2] player2_pos = [WIDTH - 150, HEIGHT // 2] player_speed = 5 bomb_radius = 20 bomb_pos = [WIDTH // 2, HEIGHT // 2] # Start with a random direction vector with speed 4 speed_magnitude = 4 angle = random.uniform(0, 2 * math.pi) bomb_speed = [speed_magnitude * math.cos(angle), speed_magnitude * math.sin(angle)] bomb_speed_increment = 0.005 # small acceleration per frame max_speed = 12 # max speed cap clock = pygame.time.Clock() font = pygame.font.SysFont(None, 48) game_over = False def circle_rect_collision(cx, cy, radius, rect): closest_x = max(rect.left, min(cx, rect.right)) closest_y = max(rect.top, min(cy, rect.bottom)) dist_x = cx - closest_x dist_y = cy - closest_y return (dist_x ** 2 + dist_y ** 2) < (radius ** 2) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if not game_over: keys = pygame.key.get_pressed() # Player 1 controls (WASD) if keys[pygame.K_w] and player1_pos[1] > 0: player1_pos[1] -= player_speed if keys[pygame.K_s] and player1_pos[1] < HEIGHT - player_size: player1_pos[1] += player_speed if keys[pygame.K_a] and player1_pos[0] > 0: player1_pos[0] -= player_speed if keys[pygame.K_d] and player1_pos[0] < WIDTH - player_size: player1_pos[0] += player_speed # Player 2 controls (Arrow keys) if keys[pygame.K_UP] and player2_pos[1] > 0: player2_pos[1] -= player_speed if keys[pygame.K_DOWN] and player2_pos[1] < HEIGHT - player_size: player2_pos[1] += player_speed if keys[pygame.K_LEFT] and player2_pos[0] > 0: player2_pos[0] -= player_speed if keys[pygame.K_RIGHT] and player2_pos[0] < WIDTH - player_size: player2_pos[0] += player_speed # Update bomb position bomb_pos[0] += bomb_speed[0] bomb_pos[1] += bomb_speed[1] # Bounce bomb off walls if bomb_pos[0] - bomb_radius <= 0: bomb_pos[0] = bomb_radius bomb_speed[0] = -bomb_speed[0] elif bomb_pos[0] + bomb_radius >= WIDTH: bomb_pos[0] = WIDTH - bomb_radius bomb_speed[0] = -bomb_speed[0] if bomb_pos[1] - bomb_radius <= 0: bomb_pos[1] = bomb_radius bomb_speed[1] = -bomb_speed[1] elif bomb_pos[1] + bomb_radius >= HEIGHT: bomb_pos[1] = HEIGHT - bomb_radius bomb_speed[1] = -bomb_speed[1] # Increase speed gradually but cap max speed speed = math.hypot(bomb_speed[0], bomb_speed[1]) if speed < max_speed: speed += bomb_speed_increment # Keep direction same but increase magnitude angle = math.atan2(bomb_speed[1], bomb_speed[0]) bomb_speed[0] = speed * math.cos(angle) bomb_speed[1] = speed * math.sin(angle) player1_rect = pygame.Rect(player1_pos[0], player1_pos[1], player_size, player_size) player2_rect = pygame.Rect(player2_pos[0], player2_pos[1], player_size, player_size) # Check collision between players (optional) if player1_rect.colliderect(player2_rect): game_over = True # Check collision bomb-player if circle_rect_collision(bomb_pos[0], bomb_pos[1], bomb_radius, player1_rect) or \ circle_rect_collision(bomb_pos[0], bomb_pos[1], bomb_radius, player2_rect): game_over = True screen.fill(WHITE) pygame.draw.rect(screen, RED, player1_rect) pygame.draw.rect(screen, BLUE, player2_rect) pygame.draw.circle(screen, BLACK, (int(bomb_pos[0]), int(bomb_pos[1])), bomb_radius) if game_over: text = font.render("Game Over!", True, (0, 0, 0)) screen.blit(text, (WIDTH // 2 - text.get_width() // 2, HEIGHT // 2 - text.get_height() // 2)) pygame.display.flip() clock.tick(60)