Minicurso pygame

6,506 views
6,251 views

Published on

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

4 Comments
6 Likes
Statistics
Notes
No Downloads
Views
Total views
6,506
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
322
Comments
4
Likes
6
Embeds 0
No embeds

No notes for slide

Minicurso pygame

  1. 1. Apoio Grupo PET Computação UFCG Tales Pimentel
  2. 2. AgendaIntrodução a PygameComo funciona um jogo em Pygame?Eventos: mouse e tecladoPrincipais módulos
  3. 3. 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.
  4. 4. Introdução http://www.pygame.org
  5. 5. 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
  6. 6. 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 >>>
  7. 7. Introdução Instalando Num SO Linux, é possível instalar com o seguinte comando sudo apt-get install python-pygame
  8. 8. Como funciona um jogo em Pygame ? Um “Hello World” exibindo uma imagem (p1_HelloWorld.py) exibindo um texto (p2_HelloWorld2.py)
  9. 9. 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
  10. 10. Como funciona um jogo em Pygame ? Capturando events (p4_bouncer.py) pygame.event.get() Retorna uma lista de eventos QUIT KEYDOWN KEYUP MOUSEBUTTONUP MOUSEBUTTONDOWN
  11. 11. Como funciona um jogo em Pygame ? Utilizando events event.type event.key Utilizando key, mouse key.get_pressed() mouse.get_pressed) mouse.get_pos()
  12. 12. 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
  13. 13. 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: ...
  14. 14. 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
  15. 15. Algumas teclasConstante Nome da teclaK_ESCAPE “Esc”K_RETURN EnterK_BACKSPACE BackspaceK_SPACE Barra de espaçoK_a, K_b, ..., K_z Teclas de A a ZK_LEFT Seta para esquerdaK_RIGHT Seta para direitaK_UP Seta para cimaK_DOWN Seta para baixoK_0, K_1, ..., K_9 Teclas de 1 a 9K_LSHIFT, K_RSHIFT Shift esquerdo e direitoK_LCTRL, K_RCTRL “ctrl” esquerdo e direitoK_LALT, K_RALT “Alt” esquerdo e direito
  16. 16. Onde encontrar? Documentação do Pygame Mouse: http://www.pygame.org/docs/ref/mouse.html Teclado: http://www.pygame.org/docs/ref/key.html
  17. 17. 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
  18. 18. 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()
  19. 19. Image Para que os códigos anteriores funcionem corretamente, veja a organização dos arquivos:programa.pyimages/ pedra.gif objetos/ garrafa.png
  20. 20. 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_desenhopygame.image.save(img_desenho, “images”+os.sep+”desenhos” +os.sep+”desenho1.jpg”)
  21. 21. 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, ycolidiu = rect1.colliderect(rect2)
  22. 22. Image Dica 1: tornando o background transparentedef 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
  23. 23. 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
  24. 24. Image Dica 2: carregando “subimagens”n = 10 #numero de subsurfacessize = 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)])
  25. 25. MixerÉ possível manter vários sons tocando ao mesmotempoÉ possível parar um ou todos os sons de uma vezpygame.mixer.stop() Para a execução de todos os sonsPygame.mixer.unpause() Recomeça a execução dos sons parados
  26. 26. 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çõessom_colisao.set_volume(0.7) # 0 <= volume <= 1.0
  27. 27. 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 infinitamentepygame.mixer.music.set_volume(0.9) # 0 <= volume <= 1.0pygame.mixer.music.fadeout(3000) # Diminui o volume deacordo com o tempo em milisegundos
  28. 28. SpriteMódulo próprio para osobjetos, personagens, ecenário do jogoUm Sprite é a forma usada rect = (x, y)para representar um item dojogo. Possui uma posição(na tela) e uma imagem image = pygame.surfaceAs fuções do módulo spritelidam com objetos Sprite()Pygame.sprite.Sprite() Sprite bola Sprite.rect Sprite.image
  29. 29. 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
  30. 30. Spritepygame.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 circularesOutras funções do módulo sprite permitemoutros tipos de verificação (por grupos desprites, por camada)
  31. 31. TimeMódulo responsável pela informação sobre otempo no jogo.Muito útil em jogos que possuem muitosmovimentos e objetos acelerados Regula a movimentação dos objetos na tela Evita diferença de execução entre máquinas diferentes
  32. 32. Time# Cria um relógio pygame.time.Clock()clock = pygame.time.Clock()… Cria um relógio que serve para obter ax , y = (10, 5) variação de tempo aovel_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
  33. 33. 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_fontsfonte_jogo =pygame.font.Font(“game_fonts”+os.sep+”showgothic_card.ttf”)
  34. 34. 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_fontsfonte_jogo =pygame.font.Font(“game_fonts”+os.sep+”showgothic_card.ttf”)tela.blit(fonte_jogo.render(“Que bom!”, True, (255, 0, 0)), (200,150))
  35. 35. Referências http://www.pygame.org/ Beginning Game Development with Python and Pygame, Will McGugan – Apress 2007.

×