Skip to main content

pong

play some pong


pong
(nishiwashere)
import random import pygame, sys from pygame.locals import * pygame.init() fps = pygame.time.Clock() #colors WHITE = (255,255,255) RED = (255,0,0) GREEN = (0,255,0) BLACK = (0,0,0) #globals WIDTH = 600 HEIGHT = 400 BALL_RADIUS = 20 PAD_WIDTH = 8 PAD_HEIGHT = 80 HALF_PAD_WIDTH = PAD_WIDTH / 2 HALF_PAD_HEIGHT = PAD_HEIGHT / 2 ball_pos = [0,0] ball_vel = [0,0] paddle1_vel = 0 paddle2_vel = 0 l_score = 0 r_score = 0 #canvas declaration window = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32) pygame.display.set_caption('Hello World') # helper function that spawns a ball, returns a position vector and a velocity vector # if right is True, spawn to the right, else spawn to the left def ball_init(right): global ball_pos, ball_vel # these are vectors stored as lists ball_pos = [WIDTH/2,HEIGHT/2] horz = random.randrange(2,4) vert = random.randrange(1,3) if right == False: horz = - horz ball_vel = [horz,-vert] # define event handlers def init(): global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel,l_score,r_score # these are floats global score1, score2 # these are ints paddle1_pos = [HALF_PAD_WIDTH - 1,HEIGHT/2] paddle2_pos = [WIDTH +1 - HALF_PAD_WIDTH,HEIGHT/2] l_score = 0 r_score = 0 if random.randrange(0,2) == 0: ball_init(True) else: ball_init(False) #draw function of canvas def draw(canvas): global paddle1_pos, paddle2_pos, ball_pos, ball_vel, l_score, r_score canvas.fill(BLACK) pygame.draw.line(canvas, WHITE, [WIDTH / 2, 0],[WIDTH / 2, HEIGHT], 1) pygame.draw.line(canvas, WHITE, [PAD_WIDTH, 0],[PAD_WIDTH, HEIGHT], 1) pygame.draw.line(canvas, WHITE, [WIDTH - PAD_WIDTH, 0],[WIDTH - PAD_WIDTH, HEIGHT], 1) pygame.draw.circle(canvas, WHITE, [WIDTH//2, HEIGHT//2], 70, 1) # update paddle's vertical position, keep paddle on the screen if paddle1_pos[1] > HALF_PAD_HEIGHT and paddle1_pos[1] < HEIGHT - HALF_PAD_HEIGHT: paddle1_pos[1] += paddle1_vel elif paddle1_pos[1] == HALF_PAD_HEIGHT and paddle1_vel > 0: paddle1_pos[1] += paddle1_vel elif paddle1_pos[1] == HEIGHT - HALF_PAD_HEIGHT and paddle1_vel < 0: paddle1_pos[1] += paddle1_vel if paddle2_pos[1] > HALF_PAD_HEIGHT and paddle2_pos[1] < HEIGHT - HALF_PAD_HEIGHT: paddle2_pos[1] += paddle2_vel elif paddle2_pos[1] == HALF_PAD_HEIGHT and paddle2_vel > 0: paddle2_pos[1] += paddle2_vel elif paddle2_pos[1] == HEIGHT - HALF_PAD_HEIGHT and paddle2_vel < 0: paddle2_pos[1] += paddle2_vel #update ball ball_pos[0] += int(ball_vel[0]) ball_pos[1] += int(ball_vel[1]) #draw paddles and ball pygame.draw.circle(canvas, RED, ball_pos, 20, 0) pygame.draw.polygon(canvas, GREEN, [[paddle1_pos[0] - HALF_PAD_WIDTH, paddle1_pos[1] - HALF_PAD_HEIGHT], [paddle1_pos[0] - HALF_PAD_WIDTH, paddle1_pos[1] + HALF_PAD_HEIGHT], [paddle1_pos[0] + HALF_PAD_WIDTH, paddle1_pos[1] + HALF_PAD_HEIGHT], [paddle1_pos[0] + HALF_PAD_WIDTH, paddle1_pos[1] - HALF_PAD_HEIGHT]], 0) pygame.draw.polygon(canvas, GREEN, [[paddle2_pos[0] - HALF_PAD_WIDTH, paddle2_pos[1] - HALF_PAD_HEIGHT], [paddle2_pos[0] - HALF_PAD_WIDTH, paddle2_pos[1] + HALF_PAD_HEIGHT], [paddle2_pos[0] + HALF_PAD_WIDTH, paddle2_pos[1] + HALF_PAD_HEIGHT], [paddle2_pos[0] + HALF_PAD_WIDTH, paddle2_pos[1] - HALF_PAD_HEIGHT]], 0) #ball collision check on top and bottom walls if int(ball_pos[1]) <= BALL_RADIUS: ball_vel[1] = - ball_vel[1] if int(ball_pos[1]) >= HEIGHT + 1 - BALL_RADIUS: ball_vel[1] = -ball_vel[1] #ball collison check on gutters or paddles if int(ball_pos[0]) <= BALL_RADIUS + PAD_WIDTH and int(ball_pos[1]) in range(paddle1_pos[1] - HALF_PAD_HEIGHT,paddle1_pos[1] + HALF_PAD_HEIGHT,1): ball_vel[0] = -ball_vel[0] ball_vel[0] *= 1.1 ball_vel[1] *= 1.1 elif int(ball_pos[0]) <= BALL_RADIUS + PAD_WIDTH: r_score += 1 ball_init(True) if int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH and int(ball_pos[1]) in range(paddle2_pos[1] - HALF_PAD_HEIGHT,paddle2_pos[1] + HALF_PAD_HEIGHT,1): ball_vel[0] = -ball_vel[0] ball_vel[0] *= 1.1 ball_vel[1] *= 1.1 elif int(ball_pos[0]) >= WIDTH + 1 - BALL_RADIUS - PAD_WIDTH: l_score += 1 ball_init(False) #update scores myfont1 = pygame.font.SysFont("Comic Sans MS", 20) label1 = myfont1.render("Score "+str(l_score), 1, (255,255,0)) canvas.blit(label1, (50,20)) myfont2 = pygame.font.SysFont("Comic Sans MS", 20) label2 = myfont2.render("Score "+str(r_score), 1, (255,255,0)) canvas.blit(label2, (470, 20)) #keydown handler def keydown(event): global paddle1_vel, paddle2_vel if event.key == K_UP: paddle2_vel = -8 elif event.key == K_DOWN: paddle2_vel = 8 elif event.key == K_w: paddle1_vel = -8 elif event.key == K_s: paddle1_vel = 8 #keyup handler def keyup(event): global paddle1_vel, paddle2_vel if event.key in (K_w, K_s): paddle1_vel = 0 elif event.key in (K_UP, K_DOWN): paddle2_vel = 0 init() #game loop while True: draw(window) for event in pygame.event.get(): if event.type == KEYDOWN: keydown(event) elif event.type == KEYUP: keyup(event) elif event.type == QUIT: pygame.quit() sys.exit() pygame.display.update() fps.tick(60)

Changes

Links

Home Page
http://example.com/

Releases

pong 0.1.1 — 28 Jul, 2020

Pygame.org account Comments