This is the pygame code repository, a place to store, display and share community-submitted python game code. Our goal here is to help the members of the pygame community learn from one another, and to reduce the amount of duplication that occurs in pygame projects.
- Screen = pygame.display.setmode((720, 480)) # Notice the tuple! It's not 2 arguments. Clock = pygame.time.Clock FPS = 60 # This variable will define how many frames we update per second. For a bit of readability later in our code we'll create two color constants, which represent a tuple of Red, Green and Blue (RGB).
- In this video, we'll get started with Pygame and build a basic game template to use in the rest of our projects. Before watching this video please make sure.
- The game is an arcade game and it has very simple logic, which is why it is an ideal example to demonstrate how to build games with Pygame. The player is represented as snake, which grows if it eats an apple. The goal of the game is to eat as many apples as possible without colliding into yourself.
- Bub Brothers is a network-based game with up to 10 players. Similar to the classic Bubble Bobble games, players compete to collect the most points. Tons of powerups and bonuses, frantic arcade action.
- Popular Snake game with Python-Pygame module. You need to put links to the data from the files in order for others to be able to use this code. Plus the images are png's that you have saved. You need to add attachments to all the external files in order for the code to be executed.
#PONG pygame |
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 |
defball_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 |
definit(): |
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 |
defdraw(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_HEIGHTand paddle1_pos[1] <HEIGHT-HALF_PAD_HEIGHT: |
paddle1_pos[1] += paddle1_vel |
elif paddle1_pos[1] HALF_PAD_HEIGHTand paddle1_vel >0: |
paddle1_pos[1] += paddle1_vel |
elif paddle1_pos[1] HEIGHT-HALF_PAD_HEIGHTand paddle1_vel <0: |
paddle1_pos[1] += paddle1_vel |
if paddle2_pos[1] >HALF_PAD_HEIGHTand paddle2_pos[1] <HEIGHT-HALF_PAD_HEIGHT: |
paddle2_pos[1] += paddle2_vel |
elif paddle2_pos[1] HALF_PAD_HEIGHTand paddle2_vel >0: |
paddle2_pos[1] += paddle2_vel |
elif paddle2_pos[1] HEIGHT-HALF_PAD_HEIGHTand 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 |
ifint(ball_pos[1]) <=BALL_RADIUS: |
ball_vel[1] =- ball_vel[1] |
ifint(ball_pos[1]) >=HEIGHT+1-BALL_RADIUS: |
ball_vel[1] =-ball_vel[1] |
#ball collison check on gutters or paddles |
ifint(ball_pos[0]) <=BALL_RADIUS+PAD_WIDTHandint(ball_pos[1]) inrange(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 |
elifint(ball_pos[0]) <=BALL_RADIUS+PAD_WIDTH: |
r_score +=1 |
ball_init(True) |
ifint(ball_pos[0]) >=WIDTH+1-BALL_RADIUS-PAD_WIDTHandint(ball_pos[1]) inrange(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 |
elifint(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 |
defkeydown(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 |
defkeyup(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 |
whileTrue: |
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) |
commented Mar 7, 2017 • edited
edited
Nice and Simple code. Just one feedback. Please update all the lines having / to // as python 3 does not give back Integer with normal division symbol if the variables being used are not integer. hence creating a Type Error. for example: ball_pos = [WIDTH/2,HEIGHT/2] to ball_pos = [WIDTH//2,HEIGHT//2] Otherwise users will get TypeError: integer argument expected, got float |
commented Aug 12, 2017
yeah can someone please help I have the same issue as above and idk how to fix this of.. |
commented Sep 1, 2017
@Actonwarrior, @BrandedAlok, see the first comment about replacing '/' lines with '//' throughout the code. I had to change those on about about 6 or 8 lines to make the game run. |
commented Dec 3, 2017
I forked a version and modify it to Python 3 |
commented Dec 22, 2017
mine is fine but how do you control the other person's one |
commented Jan 25, 2018
how do you make the ball go faster? |
commented Mar 10, 2018
How to make pong such that the 2nd player can control it from another network. |
Game Code Pc
commented Mar 24, 2018
Pygame Simple Game Code
KhushThePatel you use z and s |