Here in part 2, you’ll find intermediate level snippet comparisons between Pygame and Pyglet

If you missed it, check out Part 1.

Display an image and text on the screen

Pygame

import pygame, sys, os

running = True
pygame.init()
screen = pygame.display.set_mode((800,600))
clock = pygame.time.Clock()

# calculate current path + location of player image. Image must be on same level as this file
mypath = os.path.dirname( os.path.realpath( __file__) )
p_path = os.path.join(mypath, 'player.png')

# create player image, move to 400,300
player_image = pygame.sprite.Sprite()
player_image.image = pygame.image.load(p_path).convert()
player_image.rect = player_image.image.get_rect().move(400,300)

# create text label
font = pygame.font.Font(None, 24)
font_color = (255,255,255)
font_background = (0,0,0)
t = font.render("Hello World", True, font_color, font_background)
t_rect = t.get_rect()
t_rect.centerx, t_rect.centery = 100, 100

def update():
    #draw player to screen
    screen.blit(player_image.image, player_image.rect)
    #draw text to screen
    screen.blit(t, t_rect)

if __name__ == "__main__":
    while running:
        update()
        pygame.display.flip()
        clock.tick(30)
    pygame.quit()
    sys.exit()

View Source

Pyglet

import pyglet

#index all resources. Resources folder must be on same level as this file.
pyglet.resource.path = ['resources']
pyglet.resource.reindex()

#create window object
screen = pyglet.window.Window(800, 600)

#create player object. Player image must be in resource folder.
player_image = pyglet.resource.image("player.png")
player_sprite = pyglet.sprite.Sprite(img=player_image,x=400,y=300)

#create text label
score_label = pyglet.text.Label(text="Hello World", x=100, y=500)

@screen.event
def on_draw():
    screen.clear()
    score_label.draw()
    player_sprite.draw()

if __name__ == "__main__":
    pyglet.app.run()

View Source

Display a group of items to the screen with one draw command

Pygame

import pygame, sys, os

running = True
pygame.init()
screen = pygame.display.set_mode((800,600))
clock = pygame.time.Clock()

# calculate current path + location of player image
mypath = os.path.dirname( os.path.realpath( __file__) )
p_path = os.path.join(mypath, 'player.png')

# create player image, move to 400,300
player_image = pygame.sprite.Sprite()
player_image.image = pygame.image.load(p_path).convert()
player_image.rect = player_image.image.get_rect().move(400,300)

player_group = pygame.sprite.Group()
player_group.add(player_image)

def update():
    #draw player group to screen
    player_group.draw(screen)

if __name__ == "__main__":
    while running:
        update()
        pygame.display.flip()
        clock.tick(30)
    pygame.quit()
    sys.exit()

View Source

Pyglet

import pyglet

# index all resources
pyglet.resource.path = ['resources']
pyglet.resource.reindex()

# create window object
screen = pyglet.window.Window(800, 600)

# create batch group to put all objects in
main_batch = pyglet.graphics.Batch()

# create player object
player_image = pyglet.resource.image("player.png")
player_sprite = pyglet.sprite.Sprite(img=player_image,x=400,y=300, batch=main_batch)

# create text label
score_label = pyglet.text.Label(text="Hello World", x=100, y=500, batch=main_batch)

@screen.event
def on_draw():
    screen.clear()

    #draw batch group (player and text)
    main_batch.draw()

if __name__ == "__main__":
    pyglet.app.run()

View Source

Execute code when mouse buttons are pressed

Pygame

import pygame, sys

running = True
pygame.init()
screen = pygame.display.set_mode((800,600))
clock = pygame.time.Clock()

def handleEvents():
  for event in pygame.event.get():
        #print current mouse position
        if event.type == pygame.MOUSEMOTION:
            print pygame.mouse.get_pos()

        #when a user presses a mouse button, print which one and where the mouse is
        if event.type == pygame.MOUSEBUTTONDOWN:
            print "{0} pressed at: {1},{2}.".format(pygame.mouse.get_pressed(), pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1])

if __name__ == "__main__":
    while running:
        handleEvents()
        pygame.display.flip()
        clock.tick(30)
    pygame.quit()
    sys.exit()

View Source

Pyglet

import pyglet

screen = pyglet.window.Window(800, 600)

@screen.event
def on_mouse_motion(x, y, dx, dy):
    #print current mouse position
    print x,y

@screen.event
def on_mouse_press(x, y, button, modifiers):
    #when a user presses a mouse button, print which one and where the mouse is
    print "{0} pressed at: {1},{2}.".format(button, x, y)

if __name__ == "__main__":
    pyglet.app.run()

View Source

Play a sound file when a key is pressed

Pygame

import pygame, sys, os
from pygame.locals import *

running = True
pygame.init()
screen = pygame.display.set_mode((800,600))
clock = pygame.time.Clock()

#Create path to sound file
mypath = os.path.dirname( os.path.realpath( __file__) )
laser = os.path.join(mypath, 'resources/laser.wav')

#Create sound object for laser
pygame.mixer.init()
sound = pygame.mixer.Sound(laser)

def handleEvents():
    global running
        for event in pygame.event.get():
            if (event.type == QUIT) or (event.type == KEYDOWN and event.key == K_ESCAPE):
                running = False
            if event.type == KEYDOWN:
                if event.key == K_SPACE:
                    sound.play()

if __name__ == "__main__":
    while running:
        handleEvents()
        pygame.display.flip()
        clock.tick(30)
    pygame.quit()
    sys.exit()

View Source

Pyglet

import pyglet
from pyglet.window import key

# Put sound files in a folder called "resources"
pyglet.resource.path = ['resources']
pyglet.resource.reindex()

# Create sound object for laser
screen = pyglet.window.Window(800,600)
laser = pyglet.resource.media('laser.wav')

@screen.event
def on_key_press(symbol, modifiers):
    if symbol == key.SPACE:
        laser.play()

def update(dt):
    #update objects here
    pass

if __name__ == "__main__":
    pyglet.clock.schedule_interval(update, 1/120.0)
	pyglet.app.run()

View Source