UNIVERSIDADE ESTADUAL DO NORTE DO PARANÁ CAMPUS LUIZ MENEGHEL CENTRO DE CIÊNCIAS TECNOLÓGICAS CURSO DE SISTEMAS DE INFORMAÇÃO VITOR DO PRADO FERREIRA PYGAME: DANDO OS PRIMEIROS PASSOS BANDEIRANTES/PR 2017
SUMÁRIO 1.PRIMEIROS PASSOS COM O PYGAME... 3 1.1 IMPORTANDO O PYGAME PARA O PROJETO... 3 1.2 INICIANDO O PYGAME... 3 2.DISPLAY... 3 2.1 CRIANDO O DISPLAY... 3 2.2 ALTERANDO O TÍTULO DO DISPLAY... 4 2.3 ALTERANDO O ÍCONE DO DISPLAY... 4 2.4 ATUALIZANDO O DISPLAY... 4 3.DESENHANDO OBJETOS NO DISPLAY... 4 3.1 CORES... 5 3.1.1 COLORINDO O DISPLAY... 5 3.1.2 COLORINDO OBJETOS... 5 3.2 DESENHANDO UMA SUPERFÍCIE... 5 3.3 DESENHANDO OBJETOS POR COORDENADAS RETANGULARES... 6 3.4 DESENHANDO LINHAS... 6 3.5 DESENHANDO CÍRCULOS... 6 3.6 DESENHANDO IMAGENS... 7 3.7 DESENHANDO TEXTOS... 7 3.7.1 INICIANDO A FONTE... 7 3.7.2 ESCOLHENDO UMA FONTE... 7 3.7.3 ESCREVENDO O TEXTO... 7 3.8 INSERINDO ÁUDIO... 7 4.EVENTOS... 8 4.1 RECONHECENDO AS TECLAS... 8 4.2 RECONHECENDO O CLICK DO MOUSE... 9 4.3 FAZENDO O BOTÃO FECHAR FUNCIONAR... 9 5.PRIMEIRAS APLICAÇÕES... 9 5.1 ESCOLHA A COR... 9 5.2 SE BATER EXPLODE... 11
1. PRIMEIROS PASSOS COM O PYGAME Antes de começarmos a criar as telas, e assim colocar os vários componentes para a criação do nosso jogo, é necessário, primeiro, incluir a biblioteca e todas as suas funcionalidades ao projeto, para que assim nós consigamos usufruir de tudo o que ela pode nos oferecer. 1.1 IMPORTANDO O PYGAME PARA O PROJETO Existe no python duas maneiras de se importar o pygame para o projeto: podemos tanto usar a palavra import quanto a palavra from. Devemos utilizar o import quando quisermos importar o pacote todo (import pygame), e o from quando quisermos importar funções específicas do pacote (from pygame.locals import *). Vale destacar que, neste caso, o asterisco representa que está sendo importando todas as funções disponíveis do pacote locals, do pygame. 1.2 INICIANDO O PYGAME Você deve estar pensando que só porque a biblioteca está importada nós já conseguimos trabalhar com ela. Mas não é bem o que acontece. Ainda temos que inicializar a biblioteca, e podemos fazer isso com o simples comando pygame.init(). 2. DISPLAY Depois de importado e inicializado, nós já podemos fazer uso do pygame, e a primeira coisa que nós devemos fazer é criar a nossa tela, área de trabalho ou display, pois nós não vamos conseguir exibir uma imagem sem o display. Ainda podemos editar o título da janela, bem como o seu ícone. 2.1 CRIANDO O DISPLAY Para criar a nossa tela nós precisamos chamar a função pygame.display.set_mode() e passar os parâmetros do tamanho da tela (altura, largura). Escreveremos então: pygame.display.set_mode([altura, largura]). 3
2.2 ALTERANDO O TÍTULO DO DISPLAY Para alterar o título nós precisamos chamar a função pygame.display.set_caption() e passar o novo título que queremos que a nossa janela tenha. Escreveremos então: pygame.display.set_caption( título_janela ). 2.3 ALTERANDO O ÍCONE DO DISPLAY Para alterar o ícone nós precisamos chamar a função pygame.display.set_icon() e passar o novo ícone que queremos que a nossa janela tenha. Escreveremos então: pygame.display.set_icon(pygame.image.load( imagem )). Vale destacar que o ícone pode ter a extensão.png, contanto que tenha o tamanho máximo de 32 pixels de altura por 32 pixels de largura. 2.4 ATUALIZANDO O DISPLAY Com o pygame, o nosso jogo não é igual a um sistema, que tem várias telas, aqui nós trabalhamos somente com uma. E para atualizar, nós utilizaremos a função pygame.display.update(). 3. DESENHANDO OBJETOS NO DISPLAY Com o nosso display criado, nós podemos começar a jogar os objetos na tela. Podemos colocar muitas coisas, desde retângulos até imagens, áudios, textos e superfícies. Mas não é porque nós criamos um objeto que ele já vai aparecer na tela. Dito isso, existem duas funções que nos permitem fixar objetos na tela. São elas: variaveltela.blit() e pygame.draw.rect(). Na primeira, nós precisaremos passar dois parâmetros para que ela funcione: o objeto e a posição que ele será inserido (X e Y). Escreveremos então: tela = pygame.display.set_mode([300, 300]) tela.blit(objeto, (posição X, posição Y)) Já a segunda nós precisaremos passar três parâmetros. São eles: o display, a cor e o objeto. Escreveremos, então: pygame.draw.rect(tela, cor_azul, objeto). Vale ressaltar que nós só utilizaremos o draw.rect 4
quando quisermos desenhar os objetos criados por coordenadas retangulares. No mais, utilizaremos a blit. 3.1 CORES Antes de conseguir colorir alguma coisa nós precisamos entender como funcionam os valores de cores em RGB (red, green e blue ou vermelho, verde e azul). Cada parâmetro (vermelho, verde e azul) define a intensidade da cor como um número inteiro entre 0 e 255. Por exemplo, rgb (0, 0, 255) é renderizado como azul, porque o parâmetro azul é definido como seu valor mais alto (255) e os outros são definidos como 0. Seguindo o exemplo da cor azul, para conseguirmos a cor vermelha nós precisamos escrever: cor_vermelha = (255,0,0). A partir daí, sempre que nós precisarmos colorir alguma coisa com vermelho nós podemos tanto chamar a variável criada quanto colocar diretamente os valores RGB. 3.1.1 COLORINDO O DISPLAY Para colorir o display nós teremos de usar a função variaveltela.fill() e passar a cor que queremos pintar a tela como parâmetro. Escreveremos, então: tela = pygame.display.set_mode([300, 300]) corazul = (0, 0, 255) tela.fill(corazul) 3.1.2 COLORINDO OBJETOS Geralmente, quando nós vamos colocar os objetos na tela, as funções que nós utilizamos trazem consigo um parâmetro para cor. Podemos observar isso ao inserir textos (com a função render), desenho de objetos (função draw), pintar superfícies (função fill), entre outras. 3.2 DESENHANDO UMA SUPERFÍCIE Para inserir uma superfície nós precisamos chamar a função pygame.surface e passar, ao menos, a altura e a largura que a superfície vai ter. Escreveremos então: pygame.surface([altura, largura]). 5
3.3 DESENHANDO OBJETOS POR COORDENADAS RETANGULARES Parece ser complicado, mas nós só precisamos entender como ela realmente funciona. Quando eu quiser criar um objeto por coordenada retangular eu terei de passar quatro parâmetros para a sua criação: a posição horizontal e vertical e a sua altura e largura. E a função responsável por inserir um objeto por coordenadas retangulares é a Rect. Precisaremos escrever: retangulo = pygame.rect(posicaohorizontal, posicaovertical, altura, largura) A diferença deste objeto para uma superfície é que estes possuem a função que nos permitem saber se os objetos estão se sobrepondo (colidindo). Para transformar uma superfície em um objeto de dimensões retangulares nós utilizaremos a função get_rect(). Escreveremos então: superficie = pygame.surface([10, 10]) retangulo = superficie.get_rect() 3.4 DESENHANDO LINHAS Para desenhar uma linha nós vamos usar a função draw.line. Ela precisa de alguns parâmetros. São eles: a tela em que o objeto vai ser colocado, a cor, a posição inicial (X e Y), a posição final (X e Y), e a largura da linha. Escreveremos então: pygame.draw.line(tela, cor, [pos_x_inicial, pos_y_inicial], [pos_x_final, pos_y_final], largura_da_linha) 3.5 DESENHANDO CÍRCULOS Para desenhar um círculo nós precisaremos usar a função draw.circle. Essa função precisa de parâmetros para funcionar. São eles: a tela em que o círculo será desenhado, a cor, a posição (X e Y), o raio e a largura. Se deixarmos a largura em 0 o círculo vem completamente preenchido. Escreveremos então: pygame.draw.circle(tela, cor, [poshorizontal, posvertical], raio, largura) 6
3.6 DESENHANDO IMAGENS Existe diversas formas de se inserir uma imagem com pygame. A função mais conhecida é a image.load, e o único parâmetro que ela precisa é o nome da imagem que você quer colocar no jogo. Escreveremos então: pygame.image.load( nome_imagem ). 3.7 DESENHANDO TEXTOS Antes de inserir um texto na tela, nós precisamos primeiramente importar a fonte que nós usaremos para escrevê-lo. 3.7.1 INICIANDO A FONTE Assim como o pygame, nós precisamos iniciar o pacote de fontes. E para isso acontecer, escreveremos: pygame.font.init(). 3.7.2 ESCOLHENDO UMA FONTE Após iniciar o pacote de fontes, nós precisamos escolher uma fonte, bem como o tamanho que ela terá. Escreveremos, então: pygame.font.sysfont( fonte, tamanho). 3.7.3 ESCREVENDO O TEXTO Após escolher a fonte, está na hora de criarmos o texto. Para isso, usaremos a função render e passaremos os seguintes parâmetros: o texto a ser exibido, se ele ficará visível ou não e a sua cor. Escreveremos, então: fonte_arial = pygame.font.sysfont( Arial, 12) texto = fonte_arial.render( Olá mundo!, 1, (255,255,255)) É importante lembrar que ainda precisamos usar o blit para que o texto seja exibido na tela, porque por enquanto nós só criamos ele e ainda não estamos exibindo-o. 3.8 INSERINDO ÁUDIO Para inserir um áudio nós precisamos chamar a função mixer.sound, passando como parâmetro o nome do áudio. Vale destacar que o áudio também 7
tem que estar na mesma pasta do arquivo.py. Escreveremos, então: pygame.mixer.sound( audio ) 4. EVENTOS Agora que você já sabe como criar e colorir os objetos, vamos deixar o jogo mais interativo. Podemos conseguir essa interação quando nós trabalhamos com o teclado ou o mouse, permitindo que o usuário interaja com a aplicação. Quando nós criamos a janela nós pudemos perceber que ela trouxe consigo o ícone, título e os botões de maximizar, minimizar e fechar. Além disso, a nossa janela também veio com um ícone de uma cobrinha e o título de pygame window. Podemos perceber também que o botão fechar não funciona. Por que o botão não funciona? Os jogos (pelo menos os desenvolvidos com o Pygame) funcionam com base em uma estrutura de repetição principal, que quando terminada fazem com que o jogo termine. Normalmente, essa estrutura de repetição principal é um while, e enquanto ela não for falsa ou verdadeira, o programa ainda fica executando. Para implementar os eventos, nós precisamos criar outra estrutura de repetição. Normalmente, utilizamos um for. Para capturar o evento, nós utilizamos a função pygame.event.get(). Pronto, agora é só escolher como você vai aceitar a interação do usuário e programar o que deve acontecer. 4.1 RECONHECENDO AS TECLAS Para reconhecer se alguma tecla foi pressionada, nós criaremos uma estrutura de repetição que ficará prestando atenção se algum evento é acionado (com a função pygame.event.get()). Depois, precisamos criar uma estrutura de decisão com a função KEYDOWN, que vai ver se alguma tecla foi pressionada. E por fim, criaremos outra estrutura de decisão, que irá englobar todas as teclas necessárias para o funcionamento da aplicação. Segue abaixo um exemplo com as setas do teclado: for evento in pygame.event.get(): if evento.type == pygame.keydown: 8
if evento.key == pygame.k_up: #acao if evento.key == pygame.k_down: #acao if evento.key == pygame.k_left: #acao if evento.key == pygame.k_right: #acao 4.2 RECONHECENDO O CLICK DO MOUSE Para reconhecer o clique, nós utilizaremos, junto com a estrutura de repetição e decisão, a função MOUSEBUTTONDOWN. Escreveremos então: for evento in pygame.event.get(): if evento.type == pygame.mousebuttondown: #acao 4.3 FAZENDO O BOTÃO FECHAR FUNCIONAR Para que o botão fechar funcione, precisamos utilizar, junto com a estrutura de repetição e de decisão, a função QUIT. Escreveremos, então: for evento in pygame.event.get(): if evento.type == pygame.quit: pygame.quit() 5. PRIMEIRAS APLICAÇÕES E ai, está pronto para começar a desenvolver? Vamos lá então! Nos próximos tópicos eu estarei colocando alguns programas e explicando como eles funcionam. 5.1 ESCOLHA A COR Neste programa, nós o usuário pode mudar a cor da tela em três cores diferentes: vermelho, verde e azul. Conforme ele clica no quadrado que representa a cor, a tela muda automaticamente. Segue o código abaixo: 9
Primeiro eu importei e iniciei a biblioteca pygame (linhas 1 e 2); Depois defini o tamanho da tela e também mudei o título da janela (linhas 3 e 4); A linha 5 contém a variável que vai controlar o while; Da linha 6 a 13 eu criei variáveis que possuem as cores e os retângulos (que na verdade eu deixei como quadrados), além de já pintar a tela na cor branca; Da linha 15 a 31 eu criei uma função que sempre desenhará os quadrados (e sempre que eu precisar desenhar os quadrados nas telas, eu chamo essa função ao invés de repetir o código). Podemos ver que ela já possui vários ifs, e eles estão aí para garantir que nenhum quadrado fique suma quando a tela for pintada da cor que ele representa. 10
A partir da linha 33 o código começa a rodar. Portanto, eu chamei a função que desenha os quadrados; Na linha 34 nós temos a estrutura de repetição principal, que vai garantir que o programa execute até que alguém feche a janela ou encerre o jogo; Na linha 35 temos outra estrutura de repetição. Esta é responsável por ver se algum evento é acionado, e quando acionado, o que deve acontecer. Se eu clicar no botão fechar da janela, o programa será encerrado (linhas 36 e 37, pulando para a linha 49); Se o botão do mouse for pressionado em cima de algum quadrado, a tela será, automaticamente, pintada de outra cor, e o quadrado clicado será mudado da sua cor original para a cor branca, para que ele não suma. 5.2 SE BATER EXPLODE Nesta aplicação, nós temos 2 quadrados, e quando um se choca com o outro, nós temos a liberação de um áudio. Segue o código abaixo: Tudo começa quando a gente importa e inicia o pygame (linhas 1 e 2); Nas linhas 3 a 5 temos algumas variáveis responsáveis por guardarem as cores que vão ser usadas no decorrer do programa; Na linha 6 nós temos uma variável de controle que será utilizada no while; 11
Nas linhas 7, 8 e 9 temos declaradas três variáveis responsáveis por guardarem 2 objetos retangulares e o áudio da explosão; Na linha 10 nós temos o while que vai controlar a execução do programa. Lembrando que quando ele for encerrado o programa se encerra com ele; Nas linhas 11, 12 e 13 foram declaradas o tamanho, o título e a cor da janela, respectivamente; Em sequência, vai ser desenhado na tela dois objetos por coordenadas retangulares (linhas 14 e 15); As linhas 16, 17 e 18 servem para fazer com que o objeto siga o mouse, neste caso, que o rec mude de posição assim que o mouse é mexido. E a partir daí nós temos o for responsável pelos eventos. Na linha 20 nós estamos fazendo com que o programa pare de executar quando o usuário clicar no botão fechar da janela. E na linha 22, caso os objetos se choquem, o áudio é executado. 12