Baixe CProgPy_Pygame.pdf e outras Notas de aula em PDF para Direito, somente na Docsity!
SUMÁRIO
- Introdução......................................................................................................................................
- Programa 1: Criando uma Janela...........................................................................................
- Programa 2: Figuras e Texto...................................................................................................
- Programa 3: Animação............................................................................................................
- Programa 4: Colisão.................................................................................................................
- Programa 5: Teclado e Mouse..............................................................................................
- Programa 6: Imagem e Som.................................................................................................
- Programa 7: Jogo......................................................................................................................
PyGame é um módulo usado na programação de jogos 2D. Ele pode ser executado em todas as principais plataformas e fornece ferramentas simples para gerenciar ambientes gráfi- cos complexos, com movimentos e sons.
O módulo Pygame inclui vários outros módulos com funcionalidades para a parte
gráfica, som, mouse e muitos outros. Neste tutorial abordaremos os módulos e funções bá-
sicas de Pygame. Para isto, faremos vários programas que nos mostrarão como utilizá-los.
Relacionando alguns módulos com suas atribuições.
cursors carrega imagens de cursores (N.T. mouse), inclui cursores padrão
display controla a exibição da janela ou tela
draw desenha formas simples sobre uma Surface
event controla eventos e fila de eventos
font disponibiliza fontes
image salva e carrega imagens
joystick controla dispositivos joystick
key controla o teclado
locals contém constantes de Pygame
mixer carrega e executa sons
mouse controla o mouse
movie executa filmes no formato mpeg
time controla a temporização
transform permite redimensionar e mudar a orientação de imagens
TURMA PILOTO 2017 LABTIME/UFG
Programa 1:
Criando uma Janela
Em nosso primeiro programa vamos criar uma janela. Esta janela ficará aberta até o
usuário clicar no “x” no canto superior da janela. O código está no arquivo p1_janela.py.
TURMA PILOTO 2017 LABTIME/UFG
Continuando...
janela = pygame.display.set_mode((400, 300)) janela = pygame.display.set_mode((400, 300))
...criamos a janela com a função set_mode() do módulo display. Este módulo é um
dos que está dentro do módulo pygame.
A função set_mode() cria um objeto pygame.Surface (ver quadro sobre objetos) e
tem como parâmetro uma tupla com dois inteiros - (400,300) neste exemplo - referentes à
largura e altura da janela, em pixels.
Tupla Largura Altura
A seguir damos um título à janela com a função pygame.display.set_caption().
pygame.display.set_caption(‘Olá, mundo!’) Título da Janela TURMA PILOTO 2017 LABTIME/UFG
Objetos, métodos e atributos Objetos, métodos e atributos serão palavras muito utilizadas a partir de agora neste tutorial. Já usamos métodos anteriormente, sem mencioná-los, como por exemplo no uso de listas. Vejamos o seguinte exemplo: lista_var = [1,2,3] lista_var.append(4) Podemos ver que lista_var contém uma lista como valor e nela adicionamos “.append” passando 4 como argumento.
Um método é como uma função que está acoplada a um valor, neste caso o
método append() está acoplado ao valor lista_var. O método append() é um dos
muitos métodos de listas e, como explicado quando vimos listas, adiciona um
elemento no final da lista.
Já um objeto nada mais é do que um valor que contém métodos (e atributos).
No exemplo dado o objeto é lista_var.
Assim como um método é uma função associada a um objeto, um atributo é
uma variável associada a um objeto. Veremos vários casos de atributos ao longo
deste texto.
TURMA PILOTO 2017 LABTIME/UFG
Talvez a melhor forma de lidar com esta situação seja não se preocupar muito se está sendo usado uma função de um módulo ou um método de um objeto, no próprio texto explicitaremos o que está sendo feito. O importante é entender que tanto funções como métodos podem receber dados e realizam al- guma tarefa.
Antes de entrar no loop, foi criado um booleano com o nome deve_continuar que nos
indicará se o loop que está a seguir deve ser repetido ou não. Inicialmente damos o valor True
para que o código dentro do loop seja executado.
deve_continuar = True
Após, temos um loop que será executado sempre que a variável deve_continuar for
True. No seu interior checamos por eventos. Eventos são gerados sempre que o usuário pres-
siona uma tecla ou dá um clique no mouse, por exemplo.
deve_continuar = True
Loop do jogo
while deve_continuar:
Checando eventos
for event in pygame.event.get():
Se for um evento QUIT
if event.type == pygame.QUIT: deve_continuar = False TURMA PILOTO 2017 LABTIME/UFG
Chamando pygame.event.get() será retornardo qualquer novo objeto do tipo pygame.
event.Event que tenha sido gerado desde a chamada anterior a essa função (a cada execu-
ção deste loop while ).
for event in pygame.event.get():
Se for um evento QUIT
if event.type == pygame.QUIT: deve_continuar = False
Os objetos pygame.event.Event têm um atributo chamado type (tipo, em inglês). No
código, checamos o tipo de cada evento. Pygame gera o evento pygame.QUIT (ou QUIT , para
simplificar) quando o usuário dá um clique no “x” da janela. Este evento também é gerado
se o computador é desligado e tenta terminar todos os programas que estão sendo execu-
tados. Se temos um evento deste tipo, segundo nosso código, mudamos o valor da variável
deve_continuar para False , fazendo com que o loop não volte a ser executado.
for event in pygame.event.get():
Se for um evento QUIT
if event.type == pygame.QUIT: deve_continuar = False Se clicar em “x”da janela Este valor evita que o loop se repita.
Para finalizar, chamamos a função pygame.quit() para fechar todos o módulos de
pygame.
Encerrando modulos de Pygame
pygame.quit() TURMA PILOTO 2017 LABTIME/UFG
No programa anterior vimos como criar uma janela. Agora veremos como adicionar
algumas figuras e textos. O código se encontra no arquivo p2_figuras.py.
import pygame
Definindo as cores
PRETO = (0, 0, 0) BRANCO = (255, 255, 255) VERMELHO = (255, 0, 0) VERDE = (0, 255, 0) AZUL = (0, 0, 255)
Definindo PI
PI = 3.
Inicializamos os módulos de Pygame
pygame.init()
Criamos a janela com título Figuras e texto
janela = pygame.display.set_mode((500, 400)) pygame.display.set_caption(‘Figuras e Texto’)
Preenchendo o fundo da janela com a cor branca
janela.fill(BRANCO)
Trabalhando com texto
fonte = pygame.font.Font(None, 48) texto = fonte.render(‘Olá, mundo!’, True, BRANCO, AZUL) janela.blit(texto, [30, 150])
Desenhando figuras
pygame.draw.line(janela, VERDE, (60, 260), (420, 260), 4) pygame.draw.polygon(janela, PRETO, ((191, 206), (236, 277), (156, 277)),0) pygame.draw.circle(janela, AZUL, (300, 50), 20, 0) pygame.draw.ellipse(janela, VERMELHO, (400, 250, 40, 80), 1) pygame.draw.rect(janela, VERDE, (20, 20, 60, 40), 0) pygame.draw.arc(janela, VERMELHO, [250, 75, 150, 125], PI/2, 3*PI/2, 2) pygame.draw.arc(janela, PRETO, [250, 75, 150, 125], - PI/2, PI/2, 2)
mostrando na tela tudo o que foi desenhado
pygame.display.update() deve_continuar = True while deve_continuar: #Loop para checar eventos for event in pygame.event.get(): #Condicional para sair do loop if event.type == pygame.QUIT: deve_continuar = False pygame.quit() TURMA PILOTO 2017 LABTIME/UFG
Após importar pygame, definimos algumas cores e a variável PI. Usamos alguns no-
mes de variáveis em letras maiúsculas, pois queremos que estes valores sejam constantes,
ou seja, em nenhum momento alteraremos o valor destas variáveis. O uso de variáveis em
maiúsculas para constantes é apenas uma convenção na programação, ou seja, não é algo
que deva ser feito desse jeito, mas é costume em muitas linguagens.
import pygame
Definindo as cores
PRETO = (0, 0, 0) BRANCO = (255, 255, 255) VERMELHO = (255, 0, 0) VERDE = (0, 255, 0) AZUL = (0, 0, 255)
Definindo PI
PI = 3.
Em dispositivos eletrônicos, como no caso de seu monitor, qualquer cor é formada a
partir de três cores básicas:
- Vermelho ( R ed, em ingles)
- Verde ( G reen)
- Azul ( B lue)
Estas cores formam o que é conhecido como sistema de cores RGB. Em pygame re-
presentamos estes valores como uma tupla de três inteiros com valores entre 0 e 255 cada
um. Sendo que o primeiro valor da tupla corresponde à quantidade de vermelho, o segundo
à quantidade de verde e o último à quantidade de azul.
PRETO = (0, 0, 0)
Valor de vermelho Valor de verde Valor de azul TURMA PILOTO 2017 LABTIME/UFG
Este método (assim como outros de desenho) mudarão o objeto pygame.Surface
que o chamou, mas esta mudança não será, ainda, visivel na tela do computador. Esta mu-
dança será visível somente após a chamada da função pygame.display.update() , que será
usada mais adiante.
janela.fill(BRANCO) Só será visível se pygame.display.update()
A seguir criamos um objeto do tipo pygame.font.Font que chamamos de fonte. O pri-
meiro parâmetro é o nome da fonte a ser usada. Se passarmos None como argumento, será
usada a fonte padrão do sistema. O segundo parâmetro é o tamanho da fonte.
Trabalhando com texto
fonte = pygame.font.Font(None, 48) Nome da fonte Tamanho da Fonte
Após, é criado um outro objeto pygame.Surface , através do método render() cha-
mado por um objeto pygame.font.Font ( fonte , no caso), que conterá uma string. O primeiro
parâmetro de render() é a string a ser inserida. O segundo parâmetro é um booleano deter-
minando se será usado suavizado ou não. Suavizado (chamado anti-aliasing em ingles) é
uma técnica que nos dá a ilusão de que uma imagem é “lisa”, “embaçando” as bordas de uma
TURMA PILOTO 2017 LABTIME/UFG
linha. No código foi passado o valor True , pois queremos suavizado. O terceiro parâmetro é
a cor do texto e o quarto parâmetro a cor do fundo do texto. Com isto temos a imagem do
texto, porém, ainda precisamos dizer onde o texto será colocado. Para isto precisamos do
método blit().
Trabalhando com texto
fonte = pygame.font.Font(None, 48) texto = fonte.render(‘Olá, mundo!’, True, BRANCO, AZUL) Texto a ser inserido Cor do Texto Suavizado Cor de Fundo
O método blit() desenhará o conteúdo de um objeto pygame.Surface (no caso, texto )
no objeto pygame.Surface que chamou o método (no caso, janela ). O segundo parâmetro é a
posição, relativa ao objeto que chamou o método, onde o texto será colocado.
janela.blit(texto, [30, 150]) Posição em janela Desenha texto em janela TURMA PILOTO 2017 LABTIME/UFG
Depois desenhamos um polígono. Um polígono é qualquer figura plana limitada por
segmentos de retas. A função pygame.draw.polygon() , que é usada para criar polígonos, tem
como parâmetros o objeto pygame.Surface onde será desenhado, a cor, uma tupla (ou lista)
contendo as coordenadas dos pontos que serão os vértices do polígono, no caso um triângu-
lo; e a largura da linha.
pygame.draw.polygon(janela, PRETO, ((191, 206), (236, 277), (156, 277)),0) Onde será desenhado Cor Coordenadas dos vértices
Desenhamos um círculo, a seguir, com a função pygame.draw.circle(). O primeiro pa-
râmetro desta função é um objeto pygame.Surface onde o círculo será desenhado ( janela ). O
segundo parâmetro é a cor. O terceiro sâo as coordenadas do centro do círculo em uma tupla
ou lista. O quarto parâmetro é o raio do círculo em pixels. O último parâmetro indica a largura
da linha. Se for passado 0 ou nada, será desenhado um círculo preenchido.
pygame.draw.circle(janela, AZUL, (300, 50), 20, 0) Objeto pygame.Surface (^) Cor Raio Largura da linha Se 0 ou nada, a figura é preenchida Coordenadas do centro TURMA PILOTO 2017 LABTIME/UFG
A seguinte figura é uma elipse, criada com a função pygame.draw.ellipse(). Esta fun-
ção é similar à pygame.draw.circle() , com uma diferença: em vez de passar as coordenadas
do centro do círculo e o raio, uma tupla de quatro inteiros indicando a posição da esquerda
(em relação ao eixo x - horizontal), do topo (en relação ao eixo y - vertical), a largura e a altura
da elipse é passada.
pygame.draw.ellipse(janela, VERMELHO, (400, 250, 40, 80), 1) Esquerda Topo Largura Altura
Após, desenhamos um retângulo, usando pygame.draw.rect(). O terceiro parâmetro
desta função é uma tupla de quatro inteiros correspondentes à posição do lado da esquerda
e do topo, largura e altura do retângulo. Os outros parâmetros são semelhantes aos das figu-
ras recentemente analisadas.
pygame.draw.rect(janela, VERDE, (20, 20, 60, 40), 0) Esquerda Topo Largura Altura Largura da linha Se 0 ou nada, figura é preenchida TURMA PILOTO 2017 LABTIME/UFG