• Nenhum resultado encontrado

Gustavo Sverzut Barbieri. 28 de abril de 2005

N/A
N/A
Protected

Academic year: 2021

Share "Gustavo Sverzut Barbieri. 28 de abril de 2005"

Copied!
46
0
0

Texto

(1)

Programa¸c˜

ao de Jogos em Python

Gustavo Sverzut Barbieri GPSL - UNICAMP 28 de abril de 2005

(2)

1 Introdu¸c˜ao

2 Elementos Essenciais do PyGame

3 Sprite e Grupos

(3)

Introdu¸c˜ao Por que Python?

Python ´

e f´

acil!

Linguagem de alto n´ıvel bem parecida com o modo que pensamos, ideal para fazer a inteligˆencia de um jogo

for e l e m e n t o in e l e m e n t o s:

if e l e m e n t o.t i p o in t i p o s _ i n i m i g o s: a t i r e _ n o _ e l e m e n t o( e l e m e n t o )

(4)

Introdu¸c˜ao Por que Python?

Outras vantagens do Python

Multi-plataforma

Orientada a Objetos: encapsulamento Dinˆamica

Vasta biblioteca padr˜ao e bibliotecas de terceiros Grande comunidade de desenvolvedores

F´acil de interagir com outras linguagens, em especial C Geral o bastante para ajudar em ´areas diversas, como:

Automatiza¸c˜ao de processos de desenvolvimento

Ajudar que roteiristas e artistas experimentem com diversos efeitos, sem que necessitem de um vasto conhecimento de programa¸c˜ao

(5)

Introdu¸c˜ao Por que Python?

Problemas e Solu¸c˜

oes

Nem tudo s˜ao maravilhas, o principal problema ´e:

Python ´e lento: Python n˜ao ´e ideal para fazer processamento de imagens, itera¸c˜oes sobre grandes matrizes etc. Solu¸c˜ao: Quando a velocidade come¸car a ser um problema, analise o seu c´odigo em um profiler e otimze tal regi˜ao, talvez implemente-a em C/Assembly.

Na verdade grande parte disso j´a est´a feito, o PyGame utiliza a biblioteca SDL, que ´e feita em C. Existem tamb´em implementa¸c˜oes de engines bem otimzados que s˜ao utiliz´aveis no Python.

(6)

Introdu¸c˜ao Por que PyGame?

PyGame

Como o Python, ´e multiplataforma F´acil de utilizar

Possui bastante recursos R´apida o suficiente i m p o r t p y g a m e p y g a m e.i n i t() s c r e e n = p y g a m e.d i s p l a y.s e t _ m o d e( ( 8 0 0 , 6 0 0 ) ) i m a g e = p y g a m e.i m a g e.l o a d( " m i n h a _ i m a g e m . png " ) w h i l e T r u e: for e v e n t in p y g a m e.e v e n t.get(): if e v e n t.t y p e = = p y g a m e.Q U I T: b r e a k s c r e e n.f i l l( ( 0 , 0 , 0 ) ) s c r e e n.b l i t( image, i m a g e.g e t _ r e c t( ) ) p y g a m e.d i s p l a y.f l i p()

(7)

Elementos Essenciais do PyGame Surface

Surface — o que ´

e?

Surfaces˜ao superf´ıcies nas quais se desenha. Podem ser 2D ou 3D, residir em mem´oria do sistema ou da placa de v´ıdeo e tamb´em ter v´arias profundidades de cores.

t a m a n h o = ( 6 4 0 , 4 8 0 ) cor = ( 2 5 5 , 0 , 0 ) # v e r m e l h o s u p e r f i c i e = S u r f a c e( t a m a n h o ) s u p e r f i c i e.s e t _ a t( ( 1 0 , 2 0 ) , cor ) s u p e r f i c i e.f i l l( cor, ( 1 1 , 2 1 , 5 0 , 5 0 ) ) t e l a = p y g a m e.d i s p l a y.s e t _ m o d e( t a m a n h o )

(8)

Elementos Essenciais do PyGame Surface

Surface — opera¸c˜

oes essenciais

fill( cor, area ) Preenche uma ´area com a cor

get at( posicao ) Pega a cor que est´a na posi¸c˜ao

set at( posicao, cor ) Muda a cor da superf´ıcie na posi¸c˜ao

blit( origem, posicao, area origem ) Copia a parte limitada por

area_origemda superf´ıcie origempara a posi¸c˜ao

(9)

Elementos Essenciais do PyGame Surface

Surface — profundidade de cor

Em computa¸c˜ao representamos uma superf´ıcie de desenho como uma matriz de pontos de cor. Dependendo do n´umero de cores poss´ıveis temos uma profundidade de cor e representamos de maneiras diferentes, algumas delas:

256 cores Este modo representa 256 cores poss´ıveis e ´e indexado, isto ´e, temos uma palheta de cores com ´ındices de 0 a 255, cada um com uma cor.

24bpp RGB Tamb´em conhecido com 16 milh˜oes de cores. Este modo representa cada cor com 3 bytes (da´ı o nome 24 bits per pixel) e no formato RGB utiliza-se o primeiro byte para 256 tons de vermelho, o segundo para verde e o terceiro para o azul.

(10)

Elementos Essenciais do PyGame Surface

Surface — transparˆ

encias

As superf´ıcies suportam 3 tipos de transparˆencia:

Colorkey neste modo uma cor ´e designada para representar a transparˆencia, isto ´e, ao fazer o blit os pontos com esta cor n˜ao ser˜ao copiados.

Image Alpha neste modo a superf´ıcie como um todo tem um valor de translucidez entre 0 (transparente) e 255 (opaco), ao fazer o blit desta superf´ıcie em outra cada ponto resultante ´e uma m´edia da origem com o destino proporcional a este valor. Este modo pode ser utilizado em conjunto com o colorkey

Per-Pixel Alpha neste modo cada ponto da superf´ıcie tem um componente de Alpha associado que ´e levado em conta na hora do blit. Estas superf´ıcies s˜ao chamadas de 32bpp RGBA. Este modo n˜ao pode ser utilizado com os dois primeiros.

(11)

Elementos Essenciais do PyGame Surface

Surface — convertendo profundidade de cor

Toda vez que se faz umblit()convertemos a profundidade de cor

da superf´ıcie de origem para ficar equivalente `a superf´ıcie de destino, isto ´e uma opera¸c˜ao muito custosa e nem sempre precisamos fazˆe-la, pois podemos deixar as superf´ıcies j´a convertidas.

Eliminando este passo podemos deixar o programa at´e 6 vezes mais r´apido!

sup = sup.c o n v e r t() # c o n v e r t e p a r a a t e l a

img = p y g a m e.i m a g e.l o a d(" img . png ").c o n v e r t(sup)

Quando n˜ao usar: quando se quer utilizar per-pixel alpha n˜ao converta para a profundidade de cor da tela, pois ele perder´a tal recurso, neste caso utilizeconvert_alpha().

(12)

Elementos Essenciais do PyGame Rect

Rect — o que ´

e?

Rectrepresenta retˆangulos, com posi¸c˜ao e dimens˜oes. Parece

irelevante, mas ´e uma das classes mais ´uteis de todo PyGame pois ela fornece opera¸c˜oes que s˜ao muito utilizadas, facilitando o desenvolvimento do jogo r = R e c t( ( 1 0 , 1 0 , 5 0 , 1 0 0 ) ) p r i n t r.top, r.b o t t o m # 1 0 1 1 0 p r i n t r.left, r.r i g h t # 1 0 6 0 p r i n t r.midtop, r.m i d l e f t # ( 3 5 , 1 0 ) ( 1 0 , 6 0 ) p r i n t r.c e n t e r # ( 3 5 , 6 0 ) c1 = r.c o l l i d e p o i n t( 3 0 , 4 0 ) c2 = r.c o l l i d e r e c t( ( 0 , 0 , 1 0 0 , 2 0 0 ) ) r2 = r.i n f l a t e( 1 0 , 1 0 ) r2.m o v e _ i p( 5 , 5 )

(13)

Elementos Essenciais do PyGame Rect

Rect — opera¸c˜

oes essenciais

clamp( area ) retorna um novo retˆangulo que foi movido para ficar dentro dearea. ´Util para limitar movimento dentro

de um espa¸co.

clip( area ) retorna um novo retˆangulo com a area cortada para caber no retˆangulo atual.

collidepoint( x, y ) verifica se o ponto est´a dentro do retˆangulo atual.

colliderect( area ) verifica se aarea intercepta o retˆangulo atual.

contains( area ) verifica se aarea est´a dentro do retˆangulo atual.

inflate( x, y ) retorna um novo retˆangulo com as dimens˜oes do retˆangulo atual aumentadas pelos valores passados.

move( x, y ) retorna um novo retˆangulo com as posi¸c˜oes do retˆangulo atual movida pelos valores passados.

(14)

Elementos Essenciais do PyGame Display

display — o que ´

e?

O m´odulo display ´e utilizado para manipular a tela.

m o d o s = p y g a m e.d i s p l a y.l i s t _ m o d e s() t e l a = p y g a m e.d i s p l a y.s e t _ m o d e( m o d o s[ 0 ] ) r e c t = p y g a m e.R e c t( 0 , 0 , 1 0 , 1 0 ) p y g a m e.d i s p l a y.s e t _ c a p t i o n( " T e s t e do P y G a m e " ) w h i l e t e l a.g e t _ r e c t().c o n t a i n s( r e c t ): t e l a.f i l l( ( 0 , 0 , 0 ) ) t e l a.f i l l( ( 2 5 5 , 0 , 0 ) , r e c t ) r e c t.m o v e _ i p( 1 0 , 1 0 ) p y g a m e.d i s p l a y.f l i p()

(15)

Elementos Essenciais do PyGame Display

display — opera¸c˜

oes essenciais

flip() atualiza o conte´udo da tela toda.

get surface() retorna a superf´ıcie que representa a tela.

list modes() lista poss´ıveis dimens˜oes.

set caption( titulo ) muda o t´ıtulo da janela.

set mode( tamanho ) configura a tela para o dado tamanho e retorna a superf´ıcie.

toggle fullscreen() coloca a janela em tela cheia.

update( lista retangulos ) atualiza as ´areas da tela determinadas porlista_retangulos.

(16)

Elementos Essenciais do PyGame Display

display — cuidados especiais

Toda vez que a janela de um aplicativo PyGame for

sobreposta por outra janela, a ´area ficar´a negra (suja) at´e que a tela seja atualizada. ´E comum ao fazer testes no prompt cobrir a janela e depois n˜ao se vˆe o resultado da opera¸c˜ao, neste caso descubra a janela e fa¸capygame.display.flip(). Atualize somente as ´areas necess´arias! Se quiser aumentar o desempenho do seu jogo, atualize a tela somente nas ´areas que vocˆe modificou. Por exemplo, se vocˆe tem um

componente em movimento, apague a imagem da posi¸c˜ao

antiga (provavelmente desenhando o peda¸co da imagem de fundo no local), desenha a imagem na posi¸c˜ao nova e atualize somente estas duas ´areas. Esta t´ecnica ´e chamada de Dirty Rectangles.

(17)

Elementos Essenciais do PyGame Draw

draw — o que ´

e?

O PyGame tem v´arios recursos para desenhar nas superf´ıcies.

f r o m p y g a m e.d r a w i m p o r t line, circle, p o l y g o n t e l a = p y g a m e.d i s p l a y.g e t _ s u r f a c e() l i n e( tela, ( 2 5 5 , 0 , 0 ) , ( 0 , 0 ) , ( 1 0 , 1 0 ) ) c i r c l e( tela, ( 0 , 2 5 5 , 0 ) , ( 2 0 , 2 0 ) , 2 0 , 2 ) r e c t( tela, ( 0 , 0 , 2 5 5 ) , ( 1 0 , 1 0 , 5 0 , 5 0 ) ) p o l y g o n( tela, ( 2 5 5 , 2 5 5 , 0 ) , [ ( 2 0 0 , 2 0 0 ) , ( 2 1 0 , 1 9 0 ) , ( 2 2 0 , 2 0 0 ) , ( 2 1 0 , 2 1 0 ) , ( 2 2 0 , 2 2 0 ) , ( 2 0 0 , 2 2 0 ) ] ) p y g a m e.d i s p l a y.f l i p()

(18)

Elementos Essenciais do PyGame Draw

draw — opera¸c˜

oes essenciais

line( superficie, cor, inicio, fim, espessura ) desenha uma linha.

circle( superficie, cor, posicao, raio, espessura ) desenha um c´ırculo.

rect( superficie, cor, retangulo, espessura ) desenha um retˆangulo.

polygon( superficie, cor, lista pontos, espessura ) desenha um pol´ıgono.

(19)

Elementos Essenciais do PyGame Image

image — o que ´

e?

O PyGame tem recursos para ler e salvar imagens. Por padr˜ao o formato Bitmap(BMP) ´e suportado, por´em se a biblioteca SDL Image estiver instalada v´arios outros formatos ser˜ao suportados, dentre eles PNG, GIF, JPEG.

if p y g a m e.i m a g e.g e t _ e x t e n d e d():

n a v e = p y g a m e.i m a g e.l o a d( " n a v e . png " ) e l s e:

n a v e = p y g a m e.i m a g e.l o a d( " n a v e . bmp " ) p y g a m e.i m a g e.s a v e( tela, " s c r e e n s h o t . bmp " )

(20)

Elementos Essenciais do PyGame Image

image — opera¸c˜

oes essenciais

load( arquivo ) lˆe a imagem do arquivo.

save( superficie, arquivo ) salva a superf´ıcie em um arquivo.

get extended() retorna verdadeiro se a biblioteca SDL Image estiver instalada.

(21)

Elementos Essenciais do PyGame Event

event — o que ´

e?

M´odulo que cuida dos eventos dentro do PyGame. Vocˆe pode utilizar duas t´ecnicas para trabalhar com eventos:

Usar a fila de eventos. Todo evento causado (movimento do mouse, tecla pressionada, ...) geram eventos que v˜ao para a fila de eventos a qual vocˆe pode consultar e tomar as a¸c˜oes necess´arias. A vantagem ´e que nunca se perde um evento, a desvantagem ´e que pode adicionar latˆencia na resposta e tamb´em precisa-se manter estados para combinar a¸c˜oes (i´e: duas teclas simultaneamente).

Consultar diretamente os dispositivos. A vantagem ´e que pode verificar v´arios estados ao mesmo tempo, por´em tem a desvantagem de perder eventos (i´e: o usu´ario solta o bot˜ao do mouse justamente quando vocˆe verifica o estado).

(22)

Elementos Essenciais do PyGame Event

event — usando fila de eventos

f r o m p y g a m e.l o c a l s i m p o r t * for e v e n t in p y g a m e.e v e n t.get(): if e v e n t.t y p e = = Q U I T: sys.e x i t() e l i f e v e n t.t y p e = = K E Y D O W N: p r i n t e v e n t.key

(23)

Elementos Essenciais do PyGame Event

event — consultando os dispositivos

Nesta t´ecnica vocˆe deve utilizar o m´odulo que trata de cada dispositivo e periodicamente chamar a fun¸c˜aopump()do sistema de eventos para que seu programa n˜ao trave.

f r o m p y g a m e.l o c a l s i m p o r t *

w h i l e not ( p y g a m e.m o u s e.g e t _ p r e s s e d( ) [ 0 ] or \ p y g a m e.key.g e t _ p r e s s e d( ) [ K _ S P A C E ] ) : p y g a m e.e v e n t.p u m p()

(24)

Elementos Essenciais do PyGame Event

event — opera¸c˜

oes essenciais

poll() retorna o pr´oximo evento na fila. Caso n˜ao exista um evento, ser´a criado um do tipoNOEVENT.

post( evento ) coloca um evento na fila.

pump() caso n˜ao utilize a a fila de eventos vocˆe deve chamar freq¨uentemente esta fun¸c˜ao para fazer a manuten¸c˜ao do programa, caso contr´ario ele pode travar.

get( tipos evento ) retorna todos os eventos de um certo tipo na fila.

clear() limpa a fila de eventos.

wait() retorna o pr´oximo evento na fila ou espera at´e que um novo evento entre, caso ela estiver vazia.

(25)

Elementos Essenciais do PyGame Font

font — o que ´

e?

M´odulo para trabalhar com fontes True Type. Ele s´o est´a habilitado caso vocˆe tenha a biblioteca SDL ttf instalada.

t e l a = p y g a m e.d i s p l a y.s e t _ m o d e( ( 6 4 0 , 4 8 0 ) ) if p y g a m e.f o n t:

f o n t = p y g a m e.f o n t.F o n t( " f o n t e . ttf ", 12 ) f o n t.s e t _ u n d e r l i n e( T r u e )

img = f o n t.r e n d e r( " Ol´a M u n d o ", True, ( 2 5 5 , 2 5 5 , 0 ) ) t e l a.b l i t( img, ( 0 , 0 ) )

(26)

Elementos Essenciais do PyGame Font

font — opera¸c˜

oes essenciais

Estas s˜ao as opera¸c˜oes do sub-m´odulo:

get fonts() retorna a lista de fontes dispon´ıveis no sistema.

match font( nome ) retorna o caminho para uma fonte que tenha o nome requerido.

get default font() retorna o nome do arquivo da fonte padr˜ao do sistema.

Font( arquivo, tamanho ) cria uma nova instˆancia de fonte a partir de um arquivo.

SysFont( nome, tamanho ) cria uma nova instˆancia de fonte a partir de uma fonte instalada no sistema.

(27)

Elementos Essenciais do PyGame Font

font.Font — opera¸c˜

oes essenciais

Estas s˜ao as opera¸c˜oes da classe Font:

render( texto, antialias, cor frente, cor fundo ) retorna uma superf´ıcie com o texto desenhado.

size( texto ) calcula qual ser´a o tamanho da superf´ıcie necess´aria para desenha o texto.

set italic( opcao ) habilita ou desabilita o texto em it´alico.

set bold( opcao ) habilita ou desabilita o texto em negrito.

(28)

Elementos Essenciais do PyGame Transform

transform — o que ´

e?

Transform ´e um m´odulo para auxiliar modificar superf´ıcies, ele tem opera¸c˜oes para rotacionar, espelhar, modificar o tamanho e cortar superf´ıcies. img = p y g a m e.i m a g e.l o a d( " m i n h a _ i m a g e m . png " ) f r o m p y g a m e.t r a n s f o r m i m p o r t flip, scale, r o t a t e p o n t a _ c a b e c a = f l i p( img, False, T r u e ) i n c l i n a d a = r o t a t e( img, 4 5 ) n o v o _ t a m = img.g e t _ r e c t().i n f l a t e( 5 , 5 ) a u m e n t a d a = s c a l e( img, n o v o _ t a m.s i z e )

(29)

Elementos Essenciais do PyGame Transform

transform — opera¸c˜

oes essenciais

flip( superficie, x, y ) espelha a imagem horizontal e verticalmente, dependendo se x e y forem verdadeiros ou falsos.

rotate( superficie, angulo ) rotaciona a imagem

(30)

Elementos Essenciais do PyGame Mixer

mixer — o que ´

e?

M´odulo para trabalhar com sons e canais de reprodu¸c˜ao. Por padr˜ao existem 8 canais para reprodu¸c˜ao simultˆanea.

f r o m p y g a m e.l o c a l s i m p o r t * m u s i c a = p y g a m e.m i x e r.S o u n d( " m u s i c a _ f u n d o . wav " ) e f e i t o = p y g a m e.m i x e r.S o u n d( " e f e i t o . wav " ) a v i s o = p y g a m e.m i x e r.S o u n d( " a v i s o . wav " ) m u s i c a.p l a y( -1 ) w h i l e T r u e: for e in p y g a m e.e v e n t.get( [ K E Y D O W N ] ) : if e.key = = K _ S P A C E: e f e i t o.p l a y() e l i f e.key = = K _ E S C A P E: m u s i c a.f a d e o u t( 1 5 0 0 ) a v i s o.p l a y()

(31)

Elementos Essenciais do PyGame Mixer

mixer — opera¸c˜

oes essenciais

Sound( arquivo ) cria uma nova instˆancia de objeto de som.

fadeout( tempo ) demora o tempo requerido para deixar todos os canais mudos, o volume vai abaixando gradualmente.

pause() p´ara temporariamente a reprodu¸c˜ao de todos os canais.

stop() p´ara a reprodu¸c˜ao de todos os canais.

(32)

Elementos Essenciais do PyGame Mixer

mixer.Sound — opera¸c˜

oes essenciais

Estas s˜ao as opera¸c˜oes essenciais da classe Sound:

fadeout( tempo ) demora o tempo requerido para deixar o canal que reproduz este som mudo, o volume vai abaixando gradualmente.

get length() retorna quantos segundos tem este som.

get volume() retorna o valor da altura do som.

play( repeticoes ) inicia a reprodu¸c˜ao do som.

set volume( valor ) configura a altura do som, de 0,0 a 1,0.

(33)

Elementos Essenciais do PyGame Clock

Clock — o que ´

e?

Classe para trabalhar com tempo, atrasar a execu¸c˜ao (e consequentemente limitar os quadros por segundo) e tamb´em obter tempo entre os quadros.

c l o c k = p y g a m e.t i m e.C l o c k()

FPS = 6 0

w h i l e T r u e:

c l o c k.t i c k( FPS )

p r i n t " Q u a d r o s por s e g u n d o : ", c l o c k.g e t _ f p s()

A opera¸c˜ao mais usada ´e tick( atraso )que serve para manter uma taxa de quadros por segundo.

(34)

Sprite e Grupos

sprite — O que ´

e?

Sprite ´e uma imagem bi-dimensional que faz parte de uma cena maior, isto ´e, os componentes que aparecem no jogo.

O PyGame traz um m´odulo com v´arios utilit´arios para trabalhar com Sprites e tornar o desenvolvimento muito mais f´acil. As classes b´asicas s˜ao:

Sprite deve ser herdada pelos componentes do seu jogo.

Group serve para agrupar Sprites, existem especializa¸c˜oes desta classe para ajudar com tarefas rotineiras.

(35)

Sprite e Grupos Sprite

sprite.Sprite — o que ´

e?

Sprite´e a classe b´asica que deve ser especializada pelos

componentes do seu jogo. Ela implementa m´etodos necess´arios pelas classes de grupo e mant´em a lista de grupos a qual pertence. UmSprite s´o ´e considerado “vivo” se est´a dentro de um grupo.

(36)

Sprite e Grupos Sprite

sprite.Sprite — opera¸c˜

oes essenciais

add( lista grupos ) adiciona o Sprite `a lista de grupos

alive() retorna verdadeiro se est´a vivo, isto ´e, dentro de algum grupo

groups() retorna a lista de grupos em que este Sprite est´a.

kill() remove o Sprite de todos os grupos

remove( lista grupos ) remove o Sprite da lista de grupos.

update() fun¸c˜ao que n˜ao faz nada, deve ser modificada pelas classes especializadas para atualizar o sprite

(37)

Sprite e Grupos Group

sprite.Group — o que ´

e?

Group´e a classe b´asica que cont´em sprites, existem v´arias especializa¸c˜oes:

GroupSingle mant´em apenas o ´ultimo sprite adicionado.

RenderUpdates implementa o m´etodo draw( superficie )que

desenha todos os sprites do grupo na superf´ıcie e retorna a lista de ´areas modificadas, ent˜ao podemos utilizar a t´ecnica de Dirty Rectangles apenas fazendo:

pygame.display.update( meugrupo.draw( tela ) ).

OrderedUpdates especializa¸c˜ao de RenderUpdates, mas faz as atualiza¸c˜oes na ordem em que os sprites foram adicionados.

(38)

Sprite e Grupos Group

sprite.Group — opera¸c˜

oes essenciais

add( lista sprites ) adiciona a lista de Sprites ao grupo.

clear( superfice, fundo ) limpa a superf´ıcie, para isto copia os peda¸cos que foram “sujos” anteriormente do fundo.

empty() remove todos os Sprites do grupo.

has( sprite ) verifica se o Sprite est´a no grupo.

remove( lista sprites ) remove a lista de Sprites do grupo.

sprites() retorna os Sprites contidos neste grupo.

update( *args ) chama update( *args )em todos os Sprites do grupo.

(39)

Sprite e Grupos Group

Exemplo: Movimentando uma Bola

#! / u s r / b i n / e n v p y t h o n

f r o m c o p y i m p o r t c o p y i m p o r t p y g a m e

f r o m p y g a m e.l o c a l s i m p o r t *

(40)

Sprite e Grupos Group

c l a s s B o l a( S p r i t e ):

def _ _ i n i t _ _( self, pos, *g r u p o s ): S p r i t e._ _ i n i t _ _( self, *g r u p o s ) s e l f.r e c t = R e c t( 0 , 0 , 1 0 0 , 1 0 0 ) s e l f.r e c t.c e n t e r = pos # C r i a imagem r = s e l f.r e c t s e l f.i m a g e = p y g a m e.S u r f a c e( r.s i z e ) s e l f.i m a g e.s e t _ c o l o r k e y( ( 0 , 0 , 0 ) ) s e l f.i m a g e.f i l l( ( 0 , 0 , 0 ) ) p y g a m e.d r a w.c i r c l e( s e l f.image, ( 2 5 5 , 2 5 5 , 2 5 5 ) , ( r.w i d t h / 2 , r.h e i g h t / 2 ) , r.w i d t h / 2 ) # i n i t ( ) def m o v e( self, x, y ): s e l f.r e c t.m o v e _ i p( x, y )

(41)

Sprite e Grupos Group # C o n f i g u r a ¸c ˜o e s i n i c i a i s p y g a m e.i n i t() t e l a = p y g a m e.d i s p l a y.s e t _ m o d e( ( 6 4 0 , 4 8 0 ) ) g r u p o = R e n d e r U p d a t e s() b o l a = B o l a( ( 0 , 0 ) , g r u p o ) c l o c k = p y g a m e.t i m e.C l o c k() f u n d o = p y g a m e.S u r f a c e( t e l a.g e t _ s i z e( ) ) f u n d o.f i l l( ( 0 , 0 , 2 5 5 ) ) t e l a.b l i t( fundo, ( 0 , 0 ) ) p y g a m e.d i s p l a y.f l i p()

key = { K _ U P: False, K _ D O W N: False, K _ L E F T: False, K _ R I G H T: F a l s e }

(42)

Sprite e Grupos Group # La¸co p r i n c i p a l w h i l e T r u e: c l o c k.t i c k( 2 4 ) # T r a t a e v e n t o s

for e in p y g a m e.e v e n t.get( [ KEYUP, K E Y D O W N ] ) : v a l o r = ( e.t y p e = = K E Y D O W N ) if e.key = = K _ E S C A P E: r a i s e S y s t e m E x i t, " Fim . " e l i f e.key in key.k e y s(): key[ e.key ] = v a l o r # Movimenta a b o l a d e a c o r d o com a s t e c l a s if key[ K _ U P ] : b o l a.m o v e( 0 , -10 ) if key[ K _ D O W N ] : b o l a.m o v e( 0 , 1 0 ) if key[ K _ L E F T ] : b o l a.m o v e( -10 , 0 ) if key[ K _ R I G H T ] : b o l a.m o v e( 10 , 0 ) g r u p o.c l e a r( tela, f u n d o ) p y g a m e.d i s p l a y.u p d a t e( g r u p o.d r a w( t e l a ) )

(43)

Sprite e Grupos Group

Detectando colis˜

oes

Um dos recursos mais utilizados no desenvolvimento de jogos ´e detectar colis˜oes e o PyGame torna esta tarefa f´acil com as fun¸c˜oes:

spritecollide( sprite, grupo, mate ) detecta a colis˜ao do Sprite com os elementos do grupo. Casomate for verdadeira executa o m´etodo kill()dos sprites que colidiram.

Esta fun¸c˜ao retorna uma lista com os elementos afetados.

groupcollide( grupo1, grupo2, mate1, mate2 ) detecta a colis˜ao dos Sprites dogrupo1contra os do grupo2e executa o m´etodo kill()nos elementos baseado nos valores dos parˆametrosmate1 e mate2. Esta fun¸c˜ao retorna um dicion´ario no qual as chaves s˜ao elementos do

grupo1e os valores s˜ao listas de elementos do grupo2

(44)

Referˆencias e Materiais de Apoio Tutorial e Exemplos

Tutorial e Exemplos

Em http://www.gustavobarbieri.com.br/jogos/

existem alguns c´odigos de jogos simples por´em funcionais que podem ser utilizados como base de novos projetos.

O tutorial passo a passo de como planejar e construir um jogo pode ser encontrado em:

http://www.gustavobarbieri.com.br/jogos/jogo/doc/. Ele aborda como separar os elementos do jogo e com isso conseguir uma plataforma f´acil de manter e extender.

(45)

Referˆencias e Materiais de Apoio Referˆencias

Referˆ

encias

Python: http://www.python.org/ PyGame: http://www.pygame.org/ A Newbie Guide to pygame:

http://www.pygame.org/docs/tut/newbieguide.html Introdu¸c˜ao ao Pygame:

http://www.pygame.org/docs/tut/intro/intro.html Dicas de Performance para Python: http:

//www.python.org/moin/PythonSpeed/PerformanceTips Introdu¸c˜ao ao M´odulo Sprite do PyGame:

(46)

Referˆencias e Materiais de Apoio Contato

Contato

Gustavo Sverzut Barbieri

Email: barbieri@gmail.com

Website: http://www.gustavobarbieri.com.br

ICQ: 17249123

MSN: barbieri@gmail.com

Jabber: gsbarbieri@jabber.org

Obtenha esta palestra em:

Referências

Documentos relacionados

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

O primeiro item, “Mercado de Call Center: histórico, seus desafios, tendências para futuro” traz um recorte sobre o segmento de Call Center e suas principais

Para disciplinar o processo de desenvolvimento, a Engenharia de Usabilidade, também conceituada e descrita neste capítulo, descreve os métodos estruturados, a

operacional e patrimonial da União e das entidades da administração direta e indireta, quanto à legalidade, legitimidade, economicidade, aplicação das subvenções

Em números absolutos, os resultados mostraram que as regiões médio-norte e nordeste apresentaram a maior amostragem de produtores rurais que expandiram a sua área agrícola através

A participação foi observada durante todas as fases do roadmap (Alinhamento, Prova de Conceito, Piloto e Expansão), promovendo a utilização do sistema implementado e a

Ainda segundo Gil (2002), como a revisão bibliográfica esclarece os pressupostos teóricos que dão fundamentação à pesquisa e às contribuições oferecidas por

A tabela 25 apresenta os resultados brutos desta avaliação em relação à característica busca e a tabela 26 exibe o resultado ponderado para esta característica.. A tabela 27