Our Full Code
Here's the full script for the Pong game.
from spawnbox import *
import random
sbox = SpawnBox("Pong", 800, 600, (0, 0, 0, 255))
class Paddle(Entity):
def __init__(self, x, y): # we can leave most of the parameters as their default values.
super().__init__(sbox, 10, 100, x, y)
self.ball = None # this will be used for the enemy
def player_movement(self, delta):
if sbox.input.pressed[sbox.input.keys["W"]]:
self.y -= 235 * delta
if sbox.input.pressed[sbox.input.keys["S"]]:
self.y += 235 * delta
# If we use elif there, you can't stay still when you hold both keys.
# Collision with the floor.
if self.y < 0:
self.y = 0
elif self.y > sbox.height - self.height:
self.y = sbox.height - self.height
def ai_movement(self, delta):
if self.ball.y > self.y:
self.y += 235 * delta
if self.ball.y < self.y:
self.y -= 235 * delta
if self.y < 0:
self.y = 0
elif self.y > sbox.height - self.height:
self.y = sbox.height - self.height
class Ball(Entity):
def __init__(self, x, y):
super().__init__(sbox, 20, 20, x, y)
self.reset() # will create function later
def reset(self):
self.center()
self.h_dir = random.choice((-1, 1)) # backwards or forwards
self.v_dir = random.choice((-1, 1)) # up or down
def ball_movement(self, delta):
self.x += 250 * self.h_dir * delta
self.y += 250 * self.v_dir * delta
if self.y <= 2 or self.y >= sbox.height - 20:
self.v_dir *= -1
if self.x <= 0:
self.reset()
elif self.x >= sbox.width:
self.reset()
player = Paddle(50, 0)
player.center_y() # center the y axis. built-in function.
ball = Ball(0, 0)
enemy = Paddle(sbox.width - 50, 0)
enemy.center_y()
@sbox.addUpdater
def update(delta):
if ball.collide(player) or ball.collide(enemy):
ball.h_dir *= -1
player.player_movement(delta)
ball.ball_movement(delta)
enemy.ai_movement(delta)
@sbox.addDrawer
def draw():
player.draw()
ball.draw()
enemy.draw()
@sbox.init
def init():
enemy.ball = ball
sbox.mainloop()Last updated