Python → Processing → Pong Level 3
Pong Level 3 — Fizika odbijanja i 2 igrača
U prethodnoj lekciji Pong Level 2 dodali smo score i game over logiku. Sada pravimo ozbiljniju verziju igre:
- Realističnije odbijanje lopte
- Dva igrača (W/S i strelice)
- Povećavanje brzine
1. Nove promenljive
# Lopta
ball_x = 300
ball_y = 200
dx = 5
dy = 4
ball_size = 20
# Palice
paddle_width = 15
paddle_height = 80
left_y = 160
right_y = 160
left_speed = 0
right_speed = 0
score_left = 0
score_right = 0
2. Setup
def setup():
size(700, 400)
textSize(24)
3. Glavna logika igre
def draw():
global ball_x, ball_y, dx, dy
global left_y, right_y
global score_left, score_right
background(20)
# Lopta
ellipse(ball_x, ball_y, ball_size, ball_size)
# Palice
rect(30, left_y, paddle_width, paddle_height)
rect(width-45, right_y, paddle_width, paddle_height)
# Pomeranje lopte
ball_x += dx
ball_y += dy
# Zid gore/dole
if ball_y < ball_size/2 or ball_y > height-ball_size/2:
dy = -dy
# Sudar sa levom palicom
if (ball_x < 45 and
left_y < ball_y < left_y + paddle_height):
dx = -dx
dx *= 1.05 # ubrzavanje
# Sudar sa desnom palicom
if (ball_x > width-45 and
right_y < ball_y < right_y + paddle_height):
dx = -dx
dx *= 1.05 # ubrzavanje
# Poeni
if ball_x < 0:
score_right += 1
resetBall()
if ball_x > width:
score_left += 1
resetBall()
# Pomeranje palica
left_y += left_speed
right_y += right_speed
# Ograničenje palica
left_y = constrain(left_y, 0, height-paddle_height)
right_y = constrain(right_y, 0, height-paddle_height)
# Prikaz score
text(score_left, width/4, 40)
text(score_right, width*3/4, 40)
4. Reset lopte
def resetBall():
global ball_x, ball_y, dx, dy
ball_x = width/2
ball_y = height/2
dx = random([-5, 5])
dy = random(-4, 4)
5. Kontrole tastature
def keyPressed():
global left_speed, right_speed
if key == 'w':
left_speed = -6
if key == 's':
left_speed = 6
if keyCode == UP:
right_speed = -6
if keyCode == DOWN:
right_speed = 6
def keyReleased():
global left_speed, right_speed
if key in ['w','s']:
left_speed = 0
if keyCode in [UP, DOWN]:
right_speed = 0
Šta smo naučili?
- Više igrača
- Fiziku ubrzavanja
- Reset funkciju
- Ograničenje objekata (constrain)
- Game mehaniku