Python → Processing → Pong OOP
Pong u Pythonu — OOP verzija i modularna igra (Processing)
Ovaj tutorijal prikazuje kako napraviti OOP verziju Pong igre u Python Processing okruženju. Svaki objekat (lopta, palica) je klasa sa svojom logikom, što olakšava proširenje igre, dodavanje novih funkcija i kontrolu za dva igrača. Ova lekcija je idealna za učenike, takmičare i sve koji žele da unaprede svoje veštine programiranja igara.
1. Definisanje klase Palica
class Paddle:
def __init__(self, x, y):
self.x = x
self.y = y
self.width = 15
self.height = 80
self.speed = 0
def move(self):
self.y += self.speed
self.y = constrain(self.y, 0, height - self.height)
def show(self):
rect(self.x, self.y, self.width, self.height)
2. Definisanje klase Lopta
class Ball:
def __init__(self):
self.x = width/2
self.y = height/2
self.size = 20
self.dx = 5
self.dy = 4
def move(self):
self.x += self.dx
self.y += self.dy
if self.y < self.size/2 or self.y > height - self.size/2:
self.dy = -self.dy
def check_collision(self, paddle):
if (self.x - self.size/2 < paddle.x + paddle.width and
self.x + self.size/2 > paddle.x and
self.y > paddle.y and self.y < paddle.y + paddle.height):
self.dx = -self.dx
self.dx *= 1.05
def show(self):
ellipse(self.x, self.y, self.size, self.size)
def reset(self):
self.x = width/2
self.y = height/2
self.dx = random([-5,5])
self.dy = random(-4,4)
3. Setup i draw
# Kreiranje objekata
left_paddle = None
right_paddle = None
ball = None
score_left = 0
score_right = 0
def setup():
global left_paddle, right_paddle, ball
size(700, 400)
textSize(24)
left_paddle = Paddle(30, height/2 - 40)
right_paddle = Paddle(width-45, height/2 - 40)
ball = Ball()
def draw():
global score_left, score_right
background(20)
# Lopta
ball.move()
ball.check_collision(left_paddle)
ball.check_collision(right_paddle)
ball.show()
# Palice
left_paddle.move()
right_paddle.move()
left_paddle.show()
right_paddle.show()
# Provera poena
if ball.x < 0:
score_right += 1
ball.reset()
if ball.x > width:
score_left += 1
ball.reset()
# Prikaz score-a
text(score_left, width/4, 40)
text(score_right, width*3/4, 40)
4. Kontrole tastature
def keyPressed():
if key == 'w':
left_paddle.speed = -6
if key == 's':
left_paddle.speed = 6
if keyCode == UP:
right_paddle.speed = -6
if keyCode == DOWN:
right_paddle.speed = 6
def keyReleased():
if key in ['w','s']:
left_paddle.speed = 0
if keyCode in [UP, DOWN]:
right_paddle.speed = 0
5. Šta smo naučili?
- Objektno orijentisano programiranje (klase, metode, objekti)
- Modularni kod i čitljivija logika
- Odbijanje lopte od palica i zidova
- Score sistem i reset lopte
- Kontrole za dva igrača