import pygame
from math import sin, cos, pi
from random import choice, uniform
 
OKNO_SZER = 800
OKNO_WYS = 600
FPS = 60
 
PALETKA_WYS = 80
PALETKA_SZER = 20
PIŁKA_R = 10
SPEED = 5
 
PALETKA = (255, 255, 255)
PIŁKA = (255, 255, 255)
TŁO = (0, 0, 0)
 
pygame.init()
okienko = pygame.display.set_mode((OKNO_SZER, OKNO_WYS), 0, 32)
pygame.display.set_caption("Przykład Ponga")
zegarek = pygame.time.Clock()
 
gracz1 = pygame.Rect(0, OKNO_WYS//2-PALETKA_WYS//2, PALETKA_SZER, PALETKA_WYS)
gracz1_speed = 0
gracz2 = pygame.Rect(OKNO_SZER-PALETKA_SZER, OKNO_WYS//2-PALETKA_WYS//2, PALETKA_SZER, PALETKA_WYS)
gracz2_speed = 0
 
piłka_x = OKNO_SZER//2
piłka_y = OKNO_WYS//2
piłka_dx = 0
piłka_dy = 0
 
def nowa_piłka():
    global piłka_x, piłka_y, piłka_dx, piłka_dy
    phi = uniform(-pi/3, pi/3)
    piłka_x = OKNO_SZER//2
    piłka_y = OKNO_WYS//2
    piłka_dx = SPEED * choice([-1, 1]) * cos(phi)
    piłka_dy = SPEED * sin(phi)
 
nowa_piłka()
 
graj = True
while graj:
    for zdarzenie in pygame.event.get():
        if zdarzenie.type == pygame.QUIT:
            graj = False
        elif zdarzenie.type == pygame.KEYDOWN:
            if zdarzenie.key == pygame.K_w:
                gracz1_speed -= SPEED
            elif zdarzenie.key == pygame.K_s:
                gracz1_speed += SPEED
            elif zdarzenie.key == pygame.K_UP:
                gracz2_speed -= SPEED
            elif zdarzenie.key == pygame.K_DOWN:
                gracz2_speed += SPEED
        elif zdarzenie.type == pygame.KEYUP:
            if zdarzenie.key == pygame.K_w:
                gracz1_speed += SPEED
            elif zdarzenie.key == pygame.K_s:
                gracz1_speed -= SPEED
            elif zdarzenie.key == pygame.K_UP:
                gracz2_speed += SPEED
            elif zdarzenie.key == pygame.K_DOWN:
                gracz2_speed -= SPEED
 
    gracz1.y += gracz1_speed
    if gracz1.y < 0:
        gracz1.y = 0
    elif gracz1.y > OKNO_WYS-PALETKA_WYS:
        gracz1.y = OKNO_WYS-PALETKA_WYS
    gracz2.y += gracz2_speed
    if gracz2.y < 0:
        gracz2.y = 0
    elif gracz2.y > OKNO_WYS-PALETKA_WYS:
        gracz2.y = OKNO_WYS-PALETKA_WYS
 
    piłka_x += piłka_dx
    piłka_y += piłka_dy
 
    if piłka_y < PIŁKA_R:
        wystaje = PIŁKA_R-piłka_y
        piłka_y = PIŁKA_R+wystaje
        piłka_dy *= -1
    elif piłka_y > OKNO_WYS-PIŁKA_R:
        wystaje = piłka_y - (OKNO_WYS-PIŁKA_R)
        piłka_y = OKNO_WYS-PIŁKA_R-wystaje
        piłka_dy *= -1
    if piłka_x < PIŁKA_R+PALETKA_SZER:
        if gracz1.y <= piłka_y <= gracz1.y+PALETKA_WYS:
            wystaje = PIŁKA_R+PALETKA_SZER - piłka_x
            piłka_x = PIŁKA_R+PALETKA_SZER+wystaje
            piłka_dx *= -1
        else:
            nowa_piłka()
    elif piłka_x > OKNO_SZER-PALETKA_SZER-PIŁKA_R:
        if gracz2.y <= piłka_y <= gracz2.y+PALETKA_WYS:
            wystaje = piłka_x - (OKNO_SZER-PALETKA_SZER-PIŁKA_R)
            piłka_x = OKNO_SZER-PALETKA_SZER-PIŁKA_R - wystaje
            piłka_dx *= -1
        else:
            nowa_piłka()
 
    okienko.fill(TŁO)
 
    pygame.draw.rect(okienko, PALETKA, gracz1)
    pygame.draw.rect(okienko, PALETKA, gracz2)
    pygame.draw.circle(okienko, PIŁKA, (piłka_x, piłka_y), PIŁKA_R)
 
    pygame.display.update()
    zegarek.tick(FPS)
 
pygame.quit()