Você está na página 1de 37

Apoio

Grupo PET Computao UFCG


Tales Pimentel

Agenda
Introduo a Pygame
Como funciona um jogo em Pygame?
Eventos: mouse e teclado
Principais mdulos

Introduo
O que Pygame ?
Pygame uma biblioteca grfica, ou seja, um
conjunto de mdulos, a partir do qual possvel
criar aplicaes visuais prprias para jogos.
Disponibiliza funes para interao com o mouse,
teclado, joystick e webcam.

Disponibiliza funes para tratar da tela, sons,


personagens e eventos do jogo.

Introduo

http://www.pygame.org

Introduo
Vantagens
Portvel
(Windows, Linux, Mac OS, SymbianOS, Nokia)
Documentao
disponvel no site

Mais de 1000
projetos
disponveis
no site

Introduo
Instalando
No site voc pode baixar o cdigo fonte ou o
instalador
Verses compatveis com Python 2.7 e 3.2
Testar se o Pygame est instalado corretamente
>>> import pygame
>>>

Introduo
Instalando
Num SO Linux, possvel instalar com o seguinte
comando
sudo apt-get install python-pygame

Como funciona um jogo em Pygame ?


Um Hello World
exibindo uma imagem (p1_HelloWorld.py)
exibindo um texto (p2_HelloWorld2.py)

Como funciona um jogo em Pygame ?


Posicionamento da imagem
Movimentando a imagem (p3_animacao.py)
Eventos (events )
Qual a principal caracterstica de um jogo?
Interao com o jogador

Interao com os events

Como funciona um jogo em Pygame ?


Capturando events (p4_bouncer.py)
pygame.event.get()
Retorna uma lista de eventos
QUIT

KEYDOWN
KEYUP
MOUSEBUTTONUP
MOUSEBUTTONDOWN

Como funciona um jogo em Pygame ?


Utilizando events
event.type
event.key

Utilizando key, mouse


key.get_pressed()
mouse.get_pressed)
mouse.get_pos()

Eventos do mouse
pygame.mouse.get_pos() (menu.py)
Retorna uma tupla (x, y) referente posio

pygame.mouse.get_pressed()
Retorna uma tupla (button1, button2, button3)
Cada posicao da tupla um boolean
Ex.: pygame.mouse.get_pressed()[0]

Indica se o boto esquerdo foi pressionado

Eventos do teclado
Podemos capturar as teclas pressionadas de duas
formas:
Usando o pygame.event.get():
# Capturando eventos do taclado a partir
#do pygame.event.get()
for event in pygame.event.get():
if event.type == KEYDOWN: # Ou KEYUP
if event.key == K_ESCAPE:
...

Eventos do teclado
Ou usando o pygame.key.get_pressed(), que retorna
uma lista com booleans:
# Capturando eventos do teclado
# a partir do pygame.key.get_pressed()
pressed_keys = pygame.key.get_pressed()
if pressed_keys[K_ESCAPE]:
...

As constantes (K_ESCAPE, K_f, etc) representam o


ndice referente cada tecla dessas listas

Algumas teclas
Constante

Nome da tecla

K_ESCAPE

Esc

K_RETURN

Enter

K_BACKSPACE

Backspace

K_SPACE

Barra de espao

K_a, K_b, ..., K_z

Teclas de A a Z

K_LEFT

Seta para esquerda

K_RIGHT

Seta para direita

K_UP

Seta para cima

K_DOWN

Seta para baixo

K_0, K_1, ..., K_9

Teclas de 1 a 9

K_LSHIFT, K_RSHIFT

Shift esquerdo e direito

K_LCTRL, K_RCTRL

ctrl esquerdo e direito

K_LALT, K_RALT

Alt esquerdo e direito

Onde encontrar?
Documentao do Pygame
Mouse: http://www.pygame.org/docs/ref/mouse.html

Teclado: http://www.pygame.org/docs/ref/key.html

Principais Mdulos
Image Manipulao de imagens do sistema
Mixer.Sound Sons simples, efeitos sonoros
Mixer.Music Player de msicas
Sprite Objetos de coliso, ex: personagens

Time Manipulao do tempo no jogo


Font Criar textos e renderizar em imagens

Image
Funes para lidar com as imagens externas ao Pygame.
Pygame.image.load(filename)
(p5_convert_e_convert_alpha.py)
Carrega uma imagem do sistema para o jogo

Formatos suportados: BMP, TGA, GIF (no


animado), JPEG, PNG, TGA, dentre outras
# Carrega uma imagem para o Pygame.
# OBS: Carrega, NO blita ela na tela!
img_pedra = pygame.image.load(images+os.sep
\\+pedra.gif).convert()
img_garrafa = pygame.image.load(images+os.sep+objetos
\\+os.sep+garrafa.png).convert_alpha()

Image
Para que os cdigos anteriores funcionem
corretamente, veja a organizao dos arquivos:

programa.py
images/
pedra.gif
objetos/
garrafa.png

Image
Pygame.image.save(Surface, filename)
Salva uma imagem carregada no Pygame
(Surface) como um arquivo de imagem no
sistema.

Formatos suportados:
BMP, TGA, PNG, JPEG
# Salvando uma imagem no sistema
# Neste pontos existe uma imagem na varivel img_desenho
pygame.image.save(img_desenho, images+os.sep+desenhos
\\+os.sep+desenho1.jpg)

Image
possvel, a partir de uma imagem, obter um rect
(retngulo)

til para detectar colises


colliderect(other_rect)
collidepoint(point)
img = pygame.image.load(img.png).convert()
img2 = pygame.image.load(img2.png).convert()
rect1 = img.get_rect() #podemos mudar o centro com:
rect2 = img2.get_rect() #rect1.center = x, y

colidiu = rect1.colliderect(rect2)

Image
Dica 1: tornando o background transparente
def remove_background(image):
try:
img = pygame.image.load('images' + os.sep + image)
except:
print 'Error: image %s not found' % image
# Torna a cor do pixel na posicao (0,0) transparente
loaded_image = img.convert()
color = loaded_image.get_at((0,0))
loaded_image.set_colorkey(color, RLEACCEL)
return loaded_image

Image
Dica 2: carregando subimagens
def load_subsurfaces(image, subsurfaces):
try:
img = pygame.image.load('images' + os.sep + image)
except:
print 'Error: image %s not found' % image
images = []
for rect in subsurfaces:
sub = img.subsurface(rect).convert()
images.append(sub)
return images

Image
Dica 2: carregando subimagens
n = 10 #numero de subsurfaces
size = pygame.image.load('img.png').convert().get_size()
images = load_subsurfaces('img.png',
[((x,0),(size[0]/n,size[1])) for x in xrange(0, size[0],
size[0]/n)])

Mixer
possvel manter vrios sons tocando ao mesmo
tempo

possvel parar um ou todos os sons de uma vez


pygame.mixer.stop()
Para a execuo de todos os sons
Pygame.mixer.unpause()
Recomea a execuo dos sons parados

Sound
pygame.mixer.Sound(filename) (p6_bouncer_com_som.py)
Retorna um objeto Sound, que pode ser executado e
parado quando voc quiser
Formatos suportados: OGG e WAV (descomprimido)

# Carrega uma som de coliso para o jogo.


som_colisao = pygame.mixer.Sound(sounds+os.sep+toc1.wav)

if acontece a colisao:
som_colisao.play(1) # inteiro o numero de repeties
som_colisao.set_volume(0.7) # 0 <= volume

<= 1.0

Music
Interno ao mdulo Mixer
Executa msicas durante o jogo.
(p7_bouncer_som_e_musica.py)
Pode executar apenas uma msica por vez.
Formatos suportados:
MP3 e OGG
# Carrega uma msica ambiente para o jogo.
pygame.mixer.music.load(musics+os.sep+jazz_and_blues1.mp3
)
pygame.mixer.music.play(-1) # Toca a msica infinitamente
pygame.mixer.music.set_volume(0.9) # 0 <= volume <= 1.0
pygame.mixer.music.fadeout(3000) # Diminui o volume de
acordo com o tempo em milisegundos

Sprite
Mdulo prprio para os
objetos, personagens, e
cenrio do jogo

Um Sprite a forma usada


para representar um item do
jogo. Possui uma posio
(na tela) e uma imagem
As fues do mdulo sprite
lidam com objetos Sprite()
Pygame.sprite.Sprite()
Sprite.rect
Sprite.image

rect = (x, y)

image = pygame.surface

Sprite bola

Sprite
Vrias funces do mdulo sprite so para deteco
de coliso.

Pygame.sprite.collide_mask(sprite_a, sprite_b)
Retorna um bool indicando se as imagens dos
dois sprites esto se sobrepondo (colidindo)
# Verifica se dois Sprites esto colidindo.
# Neste ponto devem existir dois sprites, bola e parede.
if pygame.sprite.collide_mask(bola, parede):
som_colisao.play(1)
# mude a direo da bola ou
# faa o jogador perder uma vida e recomece o jogo

Sprite
pygame.sprite.collide_rect(sprite_a, sprite_b)
Deteco de coliso entre dois sprites,
usando rect (posicionamento e dimenses)

Pygame.sprite.collide_circle(sprite_a, sprite_b)
Deteco de coliso usando reas circulares
Outras funes do mdulo sprite permitem
outros tipos de verificao (por grupos de
sprites, por camada)

Time
Mdulo responsvel pela informao sobre o
tempo no jogo.

Muito til em jogos que possuem muitos


movimentos e objetos acelerados
Regula a movimentao dos objetos na tela
Evita diferena de execuo entre mquinas
diferentes

Time
# Cria um relgio
clock = pygame.time.Clock()

x , y = (10, 5)
vel_x, vel_y = 7, 3

While True:
delta_tempo =
clock.tick()

x += vel_x * delta_tempo
y += vel_y * delta_tempo

pygame.time.Clock()
Cria um relgio que
serve para obter a
variao de tempo ao
longo do programa
Clock.tick()

Retorna o tempo, em
milisegundos, desde
a ltima chamada
deste mtodo
Uma vez por loop

# S = S0 + v * t

Font
Permite renderizar TrueType Fonts (*.TTF) em
imagens para o jogo

Permite a utilizao de fontes extras, especiais


pygame.font.Font(filename)
Carrega uma fonte do sistema
Formato suportado: TTF
# Carrega uma fonte colocada na pasta pessoal game_fonts
fonte_jogo =
pygame.font.Font(game_fonts+os.sep+showgothic_card.ttf)

Font
Font.render(texto, antialias, cor)
Renderiza (Interpreta a fonte e converte em uma
imagem) o texto na cor desejada
O retorno uma imagem do Pygame (Surface)

tela = pygame.display.set_mode((800, 600), 0, 32)


# Carrega uma fonte colocada na pasta pessoal game_fonts
fonte_jogo =
pygame.font.Font(game_fonts+os.sep+showgothic_card.ttf)

tela.blit(fonte_jogo.render(Que bom!, True, (255, 0, 0)),


\\ (200,
150))

Referncias
http://www.pygame.org/
Beginning Game Development with Python and
Pygame, Will McGugan Apress 2007.