import pygame import sys import random # Inizializzazione pygame.init() W, H = 900, 500 screen = pygame.display.set_mode((W, H)) pygame.display.set_caption("Windjammers Arcade") clock = pygame.time.Clock() font = pygame.font.Font(None, 36) big_font = pygame.font.Font(None, 72) # Colori SKY = (135, 206, 235) GRASS = (125, 206, 160) WHITE = (255, 255, 255) RED = (231, 76, 60) BLUE = (52, 152, 219) ORANGE = (243, 156, 18) BLACK = (0, 0, 0) # Giocatori p1 = pygame.Rect(100, 200, 30, 80) p2 = pygame.Rect(770, 200, 30, 80) p1_score = 0 p2_score = 0 # Disco disc = pygame.Rect(440, 240, 20, 20) disc_vx = 0 disc_vy = 0 disc_owner = None # 'p1', 'p2', or None disc_in_play = False # Rete net = pygame.Rect(445, 80, 10, 340) def reset_disc(): global disc_owner, disc_in_play, disc_vx, disc_vy disc.center = (450, 250) disc_vx = 0 disc_vy = 0 disc_owner = 'p1' if random.random() < 0.5 else 'p2' disc_in_play = False reset_disc() def throw_disc(player): global disc_owner, disc_in_play, disc_vx, disc_vy disc_owner = None disc_in_play = True target_x = 850 if player == 'p1' else 50 target_y = 100 + random.randint(0, 300) dx = target_x - disc.centerx dy = target_y - disc.centery dist = max(1, (dx**2 + dy**2)**0.5) disc_vx = dx / dist * 8 disc_vy = dy / dist * 8 # Game loop running = True mode = 'menu' while running: # Eventi for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE and mode == 'menu': mode = 'playing' reset_disc() if event.key == pygame.K_ESCAPE and mode == 'playing': mode = 'menu' if mode == 'menu': # Menu screen.fill((26, 26, 46)) title = big_font.render("WINDJAMMERS", True, RED) subtitle = font.render("FLYING DISC ARCADE", True, ORANGE) hint = font.render("Premi SPAZIO per iniziare", True, WHITE) screen.blit(title, (W//2 - title.get_width()//2, 120)) screen.blit(subtitle, (W//2 - subtitle.get_width()//2, 200)) screen.blit(hint, (W//2 - hint.get_width()//2, 320)) elif mode == 'playing': # Input P1 keys = pygame.key.get_pressed() p1_speed = 5 if keys[pygame.K_w] and p1.top > 80: p1.y -= p1_speed if keys[pygame.K_s] and p1.bottom < 420: p1.y += p1_speed if keys[pygame.K_a] and p1.left > 50: p1.x -= p1_speed if keys[pygame.K_d] and p1.right < 430: p1.x += p1_speed if keys[pygame.K_f] and disc_owner == 'p1': throw_disc('p1') # AI P2 if disc_owner == 'p2' and random.random() < 0.02: throw_disc('p2') elif disc_in_play and disc_owner is None: # Move toward disc if disc.centerx < p2.centerx: p2.x -= 3 if disc.centerx > p2.centerx: p2.x += 3 if disc.centery < p2.centery: p2.y -= 3 if disc.centery > p2.centery: p2.y += 3 # Keep P2 in bounds p2.clamp_ip(pygame.Rect(470, 80, 380, 340)) p1.clamp_ip(pygame.Rect(50, 80, 380, 340)) # Disco fisso al possessore if disc_owner == 'p1': disc.centerx = p1.right + 10 disc.centery = p1.centery elif disc_owner == 'p2': disc.centerx = p2.left - 10 disc.centery = p2.centery elif disc_in_play: disc.x += disc_vx disc.y += disc_vy # Rimbalzi if disc.top < 80 or disc.bottom > 420: disc_vy *= -0.8 if disc.left < 50 or disc.right > 850: disc_vx *= -0.8 if net.colliderect(disc): disc_vx *= -0.7 # Cattura if p1.colliderect(disc) and disc_owner is None: disc_owner = 'p1' disc_in_play = False elif p2.colliderect(disc) and disc_owner is None: disc_owner = 'p2' disc_in_play = False # Gol if disc.left < 50: p2_score += 3 reset_disc() elif disc.right > 850: p1_score += 3 reset_disc() # Disegno screen.fill(SKY) # Campo pygame.draw.rect(screen, GRASS, (50, 80, 800, 340)) pygame.draw.rect(screen, WHITE, (50, 80, 800, 340), 3) # Rete pygame.draw.rect(screen, WHITE, net) # Porte pygame.draw.rect(screen, RED, (20, 180, 30, 140)) pygame.draw.rect(screen, BLUE, (850, 180, 30, 140)) # Giocatori pygame.draw.rect(screen, RED, p1) pygame.draw.rect(screen, BLUE, p2) pygame.draw.ellipse(screen, ORANGE, disc) # Punteggi s1 = font.render(f"P1: {p1_score}", True, WHITE) s2 = font.render(f"CPU: {p2_score}", True, WHITE) screen.blit(s1, (200, 20)) screen.blit(s2, (650, 20)) # Istruzioni hint = font.render("WASD=muovi F=tiro ESC=menu", True, (150,150,150)) screen.blit(hint, (W//2 - hint.get_width()//2, 460)) pygame.display.flip() clock.tick(60) pygame.quit()