Trieda pre 2D vektory používaná pri pohybe lopty a pálek.
x,y– súradnice alebo komponenty vektora.
-
__add__,__sub__,__mul__,__truediv__– základné operácie s vektormi. -
dot(other)– skalárny súčin, používaný pri výpočte odrazov: V_new = V - 2 * (V · N) * N -
magnitude()– veľkosť vektora: |V| = sqrt(x^2 + y^2) -
normalize()– jednotkový vektor(x/|V|, y/|V|) -
set_magnitude(new_mag)– zmena veľkosti vektora pri zachovaní smeru -
reflect(normal)– odraz vektora od povrchu (normála N)
Použitie: Lopta a pálky využívajú Vector2D pre pohyb, kolízie a odrazy.
position– horný ľavý roh pálky (Vector2D)width,height– rozmeryspeed– základná rýchlosť pohybu (px/s)
move(direction, dt, speed_multiplier)– pohyb hore/dole podľa klávesovdirection= -1 (hore), 1 (dole)dt= delta timespeed_multiplier= úprava rýchlosti (napr. slider)get_rect()– vrátipygame.Rectna kreslenie a kolíziu
Matematika: Rýchlosť sa násobí dt, aby pohyb nebol závislý na FPS.
position,velocity– Vector2Dradius– veľkosť loptybase_speed– základná rýchlosťacceleration_enabled– prepínač zrýchleniaacceleration_factor– faktor zrýchlenia pri odraze
-
reset(x, y)– reset lopty do stredu, náhodný uhol (-45° až 45°) v_x = cos(theta) * base_speed v_y = sin(theta) * base_speed -
update(dt, speed_multiplier)– pohyb lopty position += velocity * dt * speed_multiplier -
reflect_from_paddle(paddle)– odraz lopty podľa miesta zásahu pálky -
Offset od stredu pálky normalizovaný do [-1, 1]
-
Bounce angle:
bounce_angle = normalized_offset * MAX_BOUNCE_ANGLE -
Nová rýchlosť:
v_x = cos(bounce_angle) * speed * direction v_y = sin(bounce_angle) * speed -
check_paddle_collision(paddle)– kolízia lopty a pálky -
Najbližší bod pálky k stredu lopty
-
Ak
distance <= radius, nastane odraz -
check_wall_collision()– odraz od hornej/dolnej steny -
check_score()– kontrola, či lopta prešla ľavú alebo pravú hranicu
Matematika: Odrazy sú založené na analytickej geometrii a trigonometrických výpočtoch.
Jednoduchý UI prvok s hover efektom.
check_hover(mouse_pos)– kontrola, či myš je nad tlačidlomis_clicked(mouse_pos, mouse_pressed)– kontrola kliknutiadraw(screen)– vykreslenie tlačidla s obrysom a textom
Používa sa pre rýchlosti lopty/pálky, celkovú rýchlosť hry.
-
Lineárna interpolácia: handle_x = x0 + (value - min) / (max - min) * width
-
Hodnotu je možné meniť ťahaním myšou.
- Boolean prepínač (napr. zrýchlenie lopty)
- Kliknutím sa mení stav a vizuálne sa posúva gombík
- Farby:
- Zelená = zapnuté
- Tmavošedá = vypnuté
Riadi celý priebeh hry.
screen,clock,runningstate– menu, playing, paused, postgame- Pálky, lopta, skóre
- UI prvky: tlačidlá, slidery, toggle
reset_round()– reset lopty a pálokreset_game()– reset skóre a kolahandle_input(dt)– spracovanie klávesov W/S, UP/DOWNupdate(dt)– aktualizácia lopty, kolízií, skórovaniadraw()– vykreslenie hry, pálek, lopty, skóre, pauzyrun()– hlavný loop:
- Spracovanie vstupu
- Aktualizácia logiky
- Vykreslenie (DRAW)
- Flip obrazovky
Matematika / fyzika:
- Pohyb lopty a pálok je založený na vektoroch a delta time
- Odrazy od pálky sú trigonometrické podľa miesta zásahu
- Rýchlosti sa môžu meniť cez slidery a toggle (multiplier / zrýchlenie)
- Hráči ovládajú pálky:
- Ľavá: W / S
- Pravá: UP / DOWN
- Lopta sa odráža od pálek a stien.
- Po prekročení hranice sa skóre pripočíta a lopta sa resetuje.
- Pauza: ESC alebo SPACE
- Slider a toggle umožňujú meniť:
- Celkovú rýchlosť hry
- Rýchlosť pálok
- Rýchlosť lopty
- Zapnutie zrýchlenia lopty pri odrazoch
💡 Hlavná myšlienka:
Kód kombinuje analytickú geometriu, vektorovú fyziku a trigonometriu pre realistické odrazy lopty. UI prvky umožňujú interaktívnu úpravu parametrov počas hry. Hra je nezávislá na FPS a umožňuje hladký pohyb.