Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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
KEYDOWN
KEYUP
MOUSEBUTTONUP
MOUSEBUTTONDOWN
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]
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]:
...
Algumas teclas
Constante
Nome da tecla
K_ESCAPE
Esc
K_RETURN
Enter
K_BACKSPACE
Backspace
K_SPACE
Barra de espao
Teclas de A a Z
K_LEFT
K_RIGHT
K_UP
K_DOWN
Teclas de 1 a 9
K_LSHIFT, K_RSHIFT
K_LCTRL, K_RCTRL
K_LALT, K_RALT
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
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
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)
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
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)
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
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.
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
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)
Referncias
http://www.pygame.org/
Beginning Game Development with Python and
Pygame, Will McGugan Apress 2007.