0% found this document useful (0 votes)
2 views

Minicurso Pygame

Pygame presentation

Uploaded by

demontiejunior
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

Minicurso Pygame

Pygame presentation

Uploaded by

demontiejunior
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 36

Créditos

Grupo PET Computação UFCG


Caio Paes

Fabio Leite
Agenda
Introdução a Pygame

Como funciona um jogo em Pygame?

Eventos: mouse e teclado

Principais módulos
Introdução
O que é Pygame ?
Pygame é uma biblioteca gráfica, ou seja, um
conjunto de módulos, a partir do qual é possível
criar aplicações visuais próprias para jogos.
Disponibiliza funções para interação com o mouse,
teclado, joystick e webcam.
Disponibiliza funções para tratar da tela, sons,
personagens e eventos do jogo.
Introdução

http://www.pygame.org
Introdução
Vantagens
Portável
(Windows, Linux, Mac OS, SymbianOS, Nokia)

Mais de 1000
Documentação projetos
disponível no site disponíveis
no site
Introdução
Instalando
No site você pode baixar o código fonte ou o
instalador
Versões compatíveis com Python 2.7 e 3.2
Testar se o Pygame está instalado corretamente

>>> import pygame


>>>
Introdução
Instalando
Num SO Linux, é possível 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 característica de um jogo?
Interação com o jogador
Interação 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 à posição
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 botão 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 espaço
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?
Documentação do Pygame
Mouse: http://www.pygame.org/docs/ref/mouse.html
Teclado: http://www.pygame.org/docs/ref/key.html
Principais Módulos
Image – Manipulação de imagens do sistema
Mixer.Sound – Sons simples, efeitos sonoros
Mixer.Music – Player de músicas
Sprite – Objetos de colisão, ex: personagens
Time – Manipulação do tempo no jogo
Font – Criar textos e renderizar em imagens
Image
Funções 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 (não
animado), JPEG, PNG, TGA, dentre outras
# Carrega uma imagem para o Pygame.
# OBS: Carrega, NÃO 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 códigos anteriores funcionem
corretamente, veja a organização 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 variável img_desenho
pygame.image.save(img_desenho, “images”+os.sep+”desenhos”
\\+os.sep+”desenho1.jpg”)
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
É possível manter vários sons tocando ao mesmo
tempo

É possível parar um ou todos os sons de uma vez

pygame.mixer.stop()

Para a execução de todos os sons

Pygame.mixer.unpause()

Recomeça a execução 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 colisão 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 repetições

som_colisao.set_volume(0.7) # 0 <= volume <= 1.0


Music
Interno ao módulo Mixer
Executa músicas durante o jogo.
(p7_bouncer_som_e_musica.py)
Pode executar apenas uma música por vez.
Formatos suportados:
MP3 e OGG

# Carrega uma música ambiente para o jogo.


pygame.mixer.music.load(“musics”+os.sep+”jazz_and_blues1.mp3
”)
pygame.mixer.music.play(-1) # Toca a música 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
Módulo próprio para os
objetos, personagens, e
cenário do jogo

Um Sprite é a forma usada rect = (x, y)


para representar um item do
jogo. Possui uma posição
(na tela) e uma imagem
image = pygame.surface
As fuções do módulo sprite
lidam com objetos Sprite()

Pygame.sprite.Sprite() Sprite bola


Sprite.rect

Sprite.image
Sprite
Várias funcões do módulo sprite são para detecção
de colisão.
Pygame.sprite.collide_mask(sprite_a, sprite_b)
Retorna um bool indicando se as imagens dos
dois sprites estão se sobrepondo (colidindo)
# Verifica se dois Sprites estão colidindo.
# Neste ponto devem existir dois sprites, bola e parede.
if pygame.sprite.collide_mask(bola, parede):
som_colisao.play(1)
# mude a direção da bola ou
# faça o jogador perder uma vida e recomece o jogo
Sprite
pygame.sprite.collide_rect(sprite_a, sprite_b)

Detecção de colisão entre dois sprites,


usando rect (posicionamento e dimensões)

Pygame.sprite.collide_circle(sprite_a, sprite_b)

Detecção de colisão usando áreas circulares

Outras funções do módulo sprite permitem


outros tipos de verificação (por grupos de
sprites, por camada)
Time
Módulo responsável pela informação sobre o
tempo no jogo.

Muito útil em jogos que possuem muitos


movimentos e objetos acelerados

Regula a movimentação dos objetos na tela

Evita diferença de execução entre máquinas


diferentes
Time
# Cria um relógio pygame.time.Clock()
clock = pygame.time.Clock()
… Cria um relógio que
serve para obter a
x , y = (10, 5) variação de tempo ao
vel_x, vel_y = 7, 3 longo do programa

While True: Clock.tick()
delta_tempo =
clock.tick() Retorna o tempo, em
… milisegundos, desde
a última chamada
x += vel_x * delta_tempo deste método
y += vel_y * delta_tempo
Uma vez por loop
# S = S0 + v * t
Font
Permite renderizar TrueType Fonts (*.TTF) em
imagens para o jogo
Permite a utilização 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))
Referências

http://www.pygame.org/

Beginning Game Development with Python and


Pygame, Will McGugan – Apress 2007.

You might also like