37

pygame

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.