Latest Awards
Complete 10 python programs which focus on loops.

morgan

Score over 100 points in total

vincebanter10

Complete any 5 python programs

vincebanter10

Complete 3 python list based tasks

vincebanter10

Complete 5 python list based tasks

vincebanter10

Complete 10 python list based tasks

dman12

Score over 1000 points in total

april-logan

Complete any pygame task

april-logan

Complete any 3 pygame tasks

april-logan

You have to complete 5 pygame tasks

april-logan

Score over 500 points in total

sam-edmund

Complete any pygame task

sam-edmund

Complete any 3 pygame tasks

sam-edmund

You have to complete 5 pygame tasks

sam-edmund

Complete any pygame task

12wrigleyf

Complete any 3 pygame tasks

12wrigleyf

You have to complete 5 pygame tasks

12wrigleyf

Score over 500 points in total

jhoughton12

Complete any 10 python prograns

jhoughton12

Complete 10 python programs which focus on loops.

jhoughton12

Python Score
tasks = 0
achivements = 0
freestyle = 0
Total = 0
Top 5 Scores
114gilo 3500
2joss-nolan-2 2530
3alexdawkins 2515
4byrnebrian 2080
512wattsl 1750
Click to view all scores
Who else completed this task?
No one has completed this task yet. Be the first!

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()

Leave a Reply

You must be logged in to post a comment.