Desenvolvimento de Jogos Utilizando a Biblioteca Pygame Amaro C. M. Alexandre, Sérgio F. F. Filho, Marcílio S. Valois, Erick B. B. Silva, Brendo C. Bonfim, Paulyne Jucá [email protected], [email protected], [email protected], [email protected] Abstract. This article presents the Pygame Library, its components, techniques and ways to the game development, using the Python programming language. Also, it gives tips that will help developers to reduce the programming difficulties, decreasing or even avoiding the rework. Resumo. Este artigo visa apresentar a biblioteca Pygame junto com seus componentes aprofundando técnicas e passos para o desenvolvimento de jogos utilizando a linguagem Python. Além disso, serão citados atalhos que reduzirão as dificuldades na programação diminuindo ou até mesmo evitando retrabalho. 1. Introdução Desde criança somos expostos a diversos tipos de entretenimento, cada um com diferentes maneiras de interagir. Um famoso tipo de entretenimento são os jogos eletrônicos, que tem como conceito transformar objetos do mundo real em cenários interativos, simulados através de dispositivos, sejam computadores, consoles ou dispositivos móveis, gerando resultados emocionais para os usuários. Com essa proposta os jogos eletrônicos ganharam um grande público de várias faixas etárias e diversos perfis socioeconômicos que vem aumentando a cada geração. Devido ao crescimento no número de usuários e adeptos aos jogos, existe uma necessidade maior da criação de novos jogos, proporcionando assim, mais oportunidades para desenvolvedores, tanto em empresas como desenvolvedores independentes, se tornando um ciclo evolutivo e inovador que atinge diretamente a economia mundial. Pesquisas apontam que em 2011 as vendas de consoles, jogos e serviços de jogos online ultrapassaram os US$ 60,4 bilhões anuais e tende a aumentar 25% até o ano de 20151. Esse artigo apresenta a Pygame, uma biblioteca de desenvolvimento de jogos na linguagem Python2, utilizada na Oficina de Jogos, um grupo de estudos e práticas em desenvolvimento de jogos da UFC- Quixadá. 2. Pygame Python é uma linguagem dinâmica multiplataforma de código aberto. Possui a sintaxe simples e clara, e de tipos de dados dinâmicos. Além disso, a linguagem possui seu código fonte aberto e pode ser utilizada livremente até mesmo para uso comercial. Ela pode ser usada para a criação de jogos eletrônicos, aplicações desktop, servidores webs e etc. Atualmente está na versão 3. A linguagem de programação Python fornece uma base para o desenvolvimento de aplicações em geral, porém existe uma escassez quando se diz respeito ao suporte de 1 http://www.tecmundo.com.br/infografico/9708-o-tamanho-da-industria-dosvideo-games-infografico-.htm 2 http://www.python.org/ algumas necessidades específicas dos jogos, por exemplo, tratamento de colisões, tratamento de eventos, animação e sons. Para suprir essas necessidades existe a engine Pygame, uma biblioteca que concede suporte ao desenvolvimento de jogos. O termo “Game Engine” foi criado na década de 90, especialmente utilizado em jogos 3D, geralmente em jogos em tiro de primeira pessoa (FPS). Game Engine é um termo utilizado para designar um conjunto de bibliotecas (ferramentas) que podem ser utilizada para criação de jogos, normalmente são mais utilizadas visando a interface gráfica dos jogos, mas podem também ser utilizadas em diversos outros aspectos como por exemplo a física. Um dos primeiros jogos a utilizar Game Engine foi Doom, que rapidamente se tornou popular assim como também pode ser citado o Quake, jogos de tiro em primeira pessoa 3D. A biblioteca nos permite criar telas e definir algumas características de interface para a mesma, como por exemplo, estabelecer seu tamanho e nome. Ela possui também métodos de desenhos de polígonos, como retângulos, círculos, elipses ou qualquer forma geométrica. Uma de suas principais características é a permissão para carregar imagens facilitando assim o uso de animação do jogo, já que uma animação nada mais é do que imagens sendo carregadas e atualizadas em um tempo contínuo. Como também permite o carregamento de sons em formato wav e ogg e manipula-los, como por exemplo, executar, pausar, resumir, retroceder e definir o volume. 3. Passos para o Desenvolvimento de Jogos Inicialmente no ciclo do desenvolvimento de um jogo é necessário a criação do game design, um documento que define todos os eventos possíveis do jogo, personagens, premiações, história com inicio, meio e fim, entre outros. Sem este documento, desenvolver o jogo pode se tornar uma tarefa árdua, pois qualquer alteração no desenvolvimento, seja adicionar, remover ou editar elementos, equivale refazê-lo desde o inicio. Produzir jogos requer testes e ajustes constantes, seja no código, ou na parte visual. Por isso é importante separar a parte lógica da parte visual. Isso evita que alterações na lógica influenciem a animação e vice-versa, e assim seja necessário ter retrabalho constantemente. Para isso se pode usar a orientação a objetos que um dos paradigmas de programação atuais suportados pelo Python para encapsular as informações e evitar acoplamentos desnecessários. A pygame é formada por um conjunto de classes, como a Sprite, Rect e a Mixer. A Mixer é classe responsável pela manipulação de efeitos sonoros. Essa característica é muito importante, pois grande parte dos jogos tem efeitos sonoros. Esses feitos sonoros geralmente são no formato WAV, mas também podem ser OCG ou MP3. A codificação de um jogo com Python e Pygame começa com a criação da tela de jogo, para isso a biblioteca oferece um método onde este, cria uma janela com as dimensões fornecidas pelo programador como parâmetro. Também é oferecida uma infinidade de métodos que trabalham com a tela de jogo já criada que vão desde a personalização da janela até a alternância para o modo tela cheia. Para construir e definir as dimensões da tela em Pygame, use: janela = pygame.display.set_mode(largura, altura) Com a janela criada você pode, por exemplo, carregar uma imagem para representar um personagem, objetos ou até mesmo um background, para isso se utiliza um método que carrega um arquivo de imagem. A imagem deve ser passada como parâmetro juntamente com seu endereço do arquivo. Para definir o background em Pygame, use: fundo = pygame.image.load(“background.png”) Para mostrar a imagem que foi carregada na tela usa-se um método, que a atualiza na tela, passando a variável onde a imagem foi carregada e a posição que a imagem deve ser mostrada na tela. Essa posição na tela pode ser definida por coordenadas em um plano cartesiano (tela de jogo) onde cada pixel representa uma unidade do plano. Para imprimir a imagem na tela em Pygame, use: janela.blit(fundo(fundox,fundoy) É necessário adicionar valores as variáveis que guardam a posição da imagem. Usando essa função dentro de um loop teremos a ilusão de movimento. Para criar uma animação é necessária uma sequência de imagens, e para cada imagem dessa sequência, usar a função blit. Para utilizarmos um efeito sonoro é necessário carregar esse arquivo no código. musica = pygame.mixer.Sound(“MinhaMusica.wav”) Assim, carregamos o som desejado na variável “musica”. Além de carregar, podemos manipular como se fosse um reprodutor de música. Para executar: musica.play() Para-la: musica.stop() E pause: musica.pause() Existem diversos comandos que complementam os anteriores, como o de mudar volume e o de continuar a partir de onde pausou o som. Essa função em Pygame é: musica.unpause() Os eventos em Pygame podem ser o ato de apertar botões do teclado como a ação de soltá-los também, cliques do mouse, ações com botões de joystick, ou eventos criados pelo desenvolvedor. O processamento desses eventos em Pygame é baseado em uma lista de eventos, onde é possível realizar ações como, obter um determinado evento, bloqueálo, liberá-lo, esperar que um evento aconteça ou simplesmente limpar a lista de eventos. É possível utilizar a lista de eventos para configurar os controles, basta verificar se as teclas, mouse ou botões do joystick que correspondem a controles no seu jogo foram ativados na lista de eventos e a partir dessa informação tratar os comandos do jogador. Para fazer isso em Pygame, as funções e comandos a seguir servem como exemplo básico. for event in pygame.event.get(): if(event.key == K_LEFT): direita() elif(event.key == K_RIGHT): esquerda() Após a construção da tela, manipulação de imagens, sons e movimentos, devemos atualizar a tela toda a cada interação do loop principal, com a finalidade de tudo que alterar seu lugar na lógica do jogo, deve alterar também na tela que o jogador vê. Perceba que o método blit é referente somente á atualização de uma imagem especifica, e o método descrito abaixo é relacionado a todos os elementos da tela. pygame.display.update() 4. Conclusão O desenvolvimento de jogos envolve bastante esforço e recursos, principalmente tempo. Por isso, é preciso decidir ferramentas e linguagens previamente para que não seja necessário abandonar ou refazer o jogo. Apesar de suas limitações, Python e Pygame fornecem o suporte básico para o desenvolvimento de jogos, além de ser possível usá-las junto a outras ferramentas e linguagens. Referências SWEIGART, ALBERT. Making Games With Python & Pygame. SWEIGART, ALBERT. Invent Your Own Computer Games with Python. http://www.pygame.org/docs http://www.python.org