Upload
washington-rocha
View
194
Download
7
Embed Size (px)
DESCRIPTION
minicurso pygame
Citation preview
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)
Mais de 1000 projetos disponveis no site
Documentao
disponvel 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:
As constantes (K_ESCAPE, K_f, etc) representam o
ndice referente cada tecla dessas listas
# Capturando eventos do teclado
# a partir do pygame.key.get_pressed()
pressed_keys = pygame.key.get_pressed()
if pressed_keys[K_ESCAPE]:
...
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
Algumas teclas
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
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
Sprite bola
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
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
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
# 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
# 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.