Making a pong game
Watch the above tutorial videos to get an idea of how to write your own pong game. The final code is shown below.
from pygame import *
from random import randint
# set up pygame
init()
mixer.init()
bouncefx = mixer.Sound("bounce.wav")
pointfx = mixer.Sound("point.wav")
music = mixer.music.load("hero quest.ogg")
mixer.music.set_volume(0.4)
mixer.music.play()
width = 640
height = 480
screen = display.set_mode((width, height)) # tuple
display.set_caption('Graphics')
myfont = font.SysFont("arial", 50)
animationTimer = time.Clock()
ball = Rect(100,200,40,40)
dx = 2 # how fast/direction in x
dy = 1 # how fast/direction in y
p1_paddle = Rect(30,50,15,80)
p1_paddleDY = 0
p1score = 0
p1ScoreGraphic = myfont.render(str(p1score), 1, (255,0,0))
p2_paddle = Rect(610,50,15,80)
p2_paddleDY = 0
p2score = 0
p2ScoreGraphic = myfont.render(str(p2score), 1, (255,0,0))
endProgram = False
while not endProgram:
# Check input
for e in event.get():
if e.type == QUIT:
endProgram = True
if e.type == KEYDOWN:
if e.key == K_a:
p1_paddleDY = -4
if e.key == K_z:
p1_paddleDY = 4
if e.key == K_UP:
p2_paddleDY = -4
if e.key == K_DOWN:
p2_paddleDY = 4
if e.type == KEYUP:
if e.key == K_a or e.key == K_z:
p1_paddleDY = 0
if e.key == K_UP or e.key == K_DOWN:
p2_paddleDY = 0
# update position
ball.move_ip(dx,dy)
p1_paddle.move_ip(0,p1_paddleDY)
p2_paddle.move_ip(0,p2_paddleDY)
# border check
if ball.y < 0 or ball.y > height - 40 :
dy *= -1
bouncefx.play()
if ball.x > width - 40:
p1score += 1
p1ScoreGraphic = myfont.render(str(p1score), 1, (255,0,0))
# reset ball
ball.x = 420
ball.y = 240
dx = randint(-4,4)
dy = randint(-4,4)
pointfx.play()
if ball.x <0:
p2score += 1
p2ScoreGraphic = myfont.render(str(p2score), 1, (255,0,0))
# reset ball
ball.x = 420
ball.y = 240
dx = randint(-4,4)
dy = randint(-4,4)
pointfx.play()
if dx == 0:
dx = 2
# check for win
if p1score == 5:
print "player 1 wins"
endProgram = True
if p2score == 5:
print "player 2 wins"
endProgram = True
# check collision with paddle 1
if ball.colliderect(p1_paddle):
if ball.centerx <= p1_paddle.x or ball.centerx>=p1_paddle.right:
dx = dx * - 1
bouncefx.play()
if ball.centery <= p1_paddle.y or ball.centery>=p1_paddle.bottom:
dy = dy * - 1
bouncefx.play()
# check collision with paddle 2
if ball.colliderect(p2_paddle):
if ball.centerx <= p2_paddle.x or ball.centerx>=p2_paddle.right:
dx = dx * - 1
bouncefx.play()
if ball.centery <= p2_paddle.y or ball.centery>=p2_paddle.bottom:
dy = dy * - 1
bouncefx.play()
# draw stuff
screen.fill((100,100,200))
# circle
draw.ellipse(screen, (0,255,0), ball)
# draw paddles
draw.rect(screen, (200,200,200), p1_paddle)
draw.rect(screen, (200,200,200), p2_paddle)
# draw score
screen.blit(p1ScoreGraphic, (50, 0))
screen.blit(p2ScoreGraphic, (520, 0))
# limit to 30 frames per second
animationTimer.tick(100)
# update the screen!
display.update()











