minicurso pygame

37

Upload: demontie-junior

Post on 25-May-2015

4.517 views

Category:

Documents


4 download

DESCRIPTION

Minicurso sobre Pygame, biblioteca gráfica para desenvolvimento de jogos em Python.

TRANSCRIPT

Page 1: Minicurso pygame
Page 2: Minicurso pygame

Apoio

Grupo PET Computação UFCG

Tales Pimentel

Page 3: Minicurso pygame

Agenda

Introdução a Pygame

Como funciona um jogo em Pygame?

Eventos: mouse e teclado

Principais módulos

Page 4: Minicurso pygame

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.

Page 5: Minicurso pygame

Introdução

http://www.pygame.org

Page 6: Minicurso pygame

Introdução

Vantagens

Portável

(Windows, Linux, Mac OS, SymbianOS, Nokia)

Mais de 1000 projetos disponíveis no site

Documentação

disponível no site

Page 7: Minicurso pygame

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

>>>

Page 8: Minicurso pygame

Introdução

Instalando

Num SO Linux, é possível instalar com o seguinte

comando

sudo apt-get install python-pygame

Page 9: Minicurso pygame

Como funciona um jogo em Pygame ?

Um “Hello World”

exibindo uma imagem (p1_HelloWorld.py)

exibindo um texto (p2_HelloWorld2.py)

Page 10: Minicurso pygame

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

Page 11: Minicurso pygame

Como funciona um jogo em Pygame ?

Capturando events (p4_bouncer.py)

pygame.event.get()

Retorna uma lista de eventos

QUIT

KEYDOWN

KEYUP

MOUSEBUTTONUP

MOUSEBUTTONDOWN

Page 12: Minicurso pygame

Como funciona um jogo em Pygame ?

Utilizando events

event.type

event.key

Utilizando key, mouse

key.get_pressed()

mouse.get_pressed)

mouse.get_pos()

Page 13: Minicurso pygame

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

Page 14: Minicurso pygame

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:

...

Page 15: Minicurso pygame

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]:

...

Page 16: Minicurso pygame

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

Algumas teclas

Page 17: Minicurso pygame

Onde encontrar?

Documentação do Pygame

Mouse: http://www.pygame.org/docs/ref/mouse.html

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

Page 18: Minicurso pygame

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

Page 19: Minicurso pygame

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()

Page 20: Minicurso pygame

Image

Para que os códigos anteriores funcionem

corretamente, veja a organização dos arquivos:

programa.py

images/

pedra.gif

objetos/

garrafa.png

Page 21: Minicurso pygame

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”)

Page 22: Minicurso pygame

Image

É possível, a partir de uma imagem, obter um rect (retângulo)

Útil para detectar colisões

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)

Page 23: Minicurso pygame

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

Page 24: Minicurso pygame

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

Page 25: Minicurso pygame

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)])

Page 26: Minicurso pygame

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

Page 27: Minicurso pygame

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

Page 28: Minicurso pygame

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

Page 29: Minicurso pygame

Sprite bola

Sprite

Módulo próprio para os objetos, personagens, e cenário do jogo

Um Sprite é a forma usada para representar um item do jogo. Possui uma posição (na tela) e uma imagem

As fuções do módulo sprite lidam com objetos Sprite()

Pygame.sprite.Sprite()

Sprite.rect

Sprite.image

rect = (x, y)

image = pygame.surface

Page 30: Minicurso pygame

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

Page 31: Minicurso pygame

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)

Page 32: Minicurso pygame

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

Page 33: Minicurso pygame

Time

pygame.time.Clock()

Cria um relógio que serve para obter a variação de tempo ao longo do programa

Clock.tick()

Retorna o tempo, em milisegundos, desde a última chamada deste método

Uma vez por loop

# Cria um relógio

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

Page 34: Minicurso pygame

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”)

Page 35: Minicurso pygame

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))

Page 37: Minicurso pygame

Referências

http://www.pygame.org/

Beginning Game Development with Python and

Pygame, Will McGugan – Apress 2007.