Tutorial para o Desenvolvimento de Jogos 2D usando a Linguagem Java



Documentos relacionados
EVIL ANGEL CHIBI - SCAPE OF DEATH

Desvendando Jogos 2D. Por Marcos Romero Setembro / Cyborg Arena - RHGames

Programando Jogos com Delphi (LÓGICA, ANIMAÇÃO, CONTROLE) Autor: Antônio Sérgio de Sousa Vieira

JAVA APLICAÇÕES GRÁFICAS Propriedade Utilizada: FontSizeAnimation

Aula 2. Objetivos Conceitos; Instalação do Text Pad; Entendendo o código java do AloMundo1 Codificação do AloMundo2,AloMundo3 e AloMundo4.

Introdução ao Aplicativo de Programação LEGO MINDSTORMS Education EV3

Programando Jogos em Delphi Animação, Lógica e Controle versão orientada à objetos

Técnicas para Animação de Imagens em Jogos 2D Utilizando Java

Trabalho GA - Editor de Cenário Parallax

Treinamento T2Ti Jogos - Java Básico

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Desenvolvimento de um aplicativo básico usando o Google Android

Ambiente Visual para o Desenvolvimento de Jogos Eletrônicos

PROJETO INFORMÁTICA NA ESCOLA

Microsoft Office PowerPoint 2007

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

AULA 2. Aspectos Técnicos. Luciano Roberto Rocha. MBA em Marketing Digital SOCIAL GAMES

CURSO DE PROGRAMAÇÃO EM JAVA

Curso de Aprendizado Industrial Desenvolvedor WEB

UNIVERSIDADE ESTADUAL DA PARAÍBA CENTRO DE CIÊNCIAS E TECNOLOGIA DEPARTAMENTO DE QUÍMICA CURSO DE LICENCIATURA EM QUÍMICA LINDOMÁRIO LIMA ROCHA

Curso: Desenvolvendo Jogos 2d Com C# E Microsoft XNA. Mostrar como funciona a programação orientada a objetos

ALBUM DE FOTOGRAFIAS NO POWER POINT

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Tecnologia da Informação Aplicada a Gerenciamento de Acervo Documental Histórico

Manual do Contribuidor. Portal de Internet. Projeto: Novo Portal de internet

ATENÇÃO: * Arquivos com tamanho superior a 500 KB NÃO SERÃO ACEITOS * SOMENTE serão aceitos documentos do formato: PDF

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

Procedimentos para Reinstalação do Sisloc

Prototype, um Design Patterns de Criação

Softwares educativos com tecnologias Multimídia: uma ferramenta para apoio ao ensino da Matemática

DESENVOVIMENTO DE GAMES APRESENTAÇÃO. MARCELO HENRIQUE DOS SANTOS

Como Gerar documento em PDF com várias Imagens

Objectivos:. Construir programas com interfaces gráficas Graphical User Interface (GUI) application programs

Área de Trabalho. Encontramos: Ìcones Botão Iniciar Barra de Tarefas

O ESTUDO E A IMPLEMENTAÇÃO DE UMA INTERFACE INTERATIVA PARA ENTRETENIMENTO DIGITAL

PASSO A PASSO MOVIE MAKER

Brincando com as Letras: Um serious game para o ensino do Alfabeto

APOSTILA DE EXEMPLO. (Esta é só uma reprodução parcial do conteúdo)

Informática Aplicada. Aula 2 Windows Vista. Professora: Cintia Caetano

Objetivos: Entender o funcionamento dos programas Java via linha de comando

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

Informática Aplicada

Natureza do Software e dos Sistemas

Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT. Power Point. Básico

Utilizando o correio eletrônico da UFJF com Thunderbird e IMAP

OneDrive: saiba como usar a nuvem da Microsoft

Na tela dele, clique no sinal de + ao lado do nome do seu computador, para expandi-lo. A seguir, expanda também o item "Sites da web".

Guião de Introdução ao Eclipse IDE Índice

Manual do usuário. Softcall Java. versão 1.0.5

Trabalhando com arquivos de som. Prof. César Bastos Fevereiro 2008

Relatório final de INF Animação por Computador e Jogos

O Gerenciamento de Documentos Analógico/Digital

Backup dos Trabalhos e Configurações

Manual do Usuário Android Neocontrol

RESTAURAÇÃO NO WINDOWS 8

Workshop Construct 2. Gutenberg Neto

Apostila para o 7º ano Profª Yandra

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Clique no menu Iniciar > Todos os Programas> Microsoft Office > Publisher 2010.

JDBC Java Database Connectivity

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Cartilha para utilização do software GRAPHMATICA no ensino de Funções Polinomiais do 1º grau no 9º ano do Ensino Fundamental.

15. OLHA QUEM ESTÁ NA WEB!

TUTORIAL COMO CRIAR E EDITAR UM VÍDEO NO WINDOWS MOVIE MAKER*

Orientação a Objetos

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: imagecomposite FACULDADE DE TECNOLOGIA SENAC PELOTAS

Follow-Up Acompanhamento Eletrônico de Processos (versão 3.0) Manual do Sistema. 1. Como acessar o sistema Requisitos mínimos e compatibilidade

Fancy Battles Game Design Document

WEBSITE. Como utilizar um site Assistente de Criação para criar seu próprio site

Introdução. Servidor de Tempo (SNTP) com opção de horário de verão automático; 1 Cadastro do novo modelo de equipamento Urano Topmax SS

Introdução à Engenharia ENG1000

( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO DISPOSITIVOS MOVEIS ANDROID STUDIO

Tutorial Gerar arquivo PDF. Gerando um documento pdf com várias imagens 1- Inserir imagem no Word

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

GRÁFICOS Exemplos de jogos 2D (com simulação do 3D)

Fechamento de arquivos em CorelDraw

APOSTILA LINUX EDUCACIONAL

BR DOT COM SISPON: MANUAL DO USUÁRIO

Tópicos de Ambiente Web. Modulo 2 Processo de desenvolvimento de um site Professora: Sheila Cáceres

NetBeans. Conhecendo um pouco da IDE

Sumário. Computação Gráfica Illustrator

Programação Concorrente em java - Exercícios Práticos Abril 2004

O programa abaixo exemplifica o uso da classe Image para carregar e mostrar uma imagem localizada em um arquivo.

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

O 1º Ciclo do Ensino Básico é um espaço privilegiado onde se proporcionam aos alunos aprendizagens mais ativas e significativas,

OFICINA DE POWER POINT

3.º e 4.º Anos de Escolaridade Competências Conteúdos Sugestões metodológicas Articulações

UTILIZANDO PROGRAMAS EDUCACIONAIS

ANDROID APPLICATION PROJECT

Scriptlets e Formulários

Universidade Anhanguera Uniderp Centro de Educação a Distância

Ferramenta de Apoio ao Jogo 2 (Ensino da Leitura) incluído nos Jogos da Mimocas

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Eclipse IDE Dá-se importância aos antepassados quando já não temos nenhum. Francois Chateaubriand

Reuso com Herança a e Composiçã

Aula 14: Sons e imagens

SUMÁRIO TUTORIAL DO HQ. 2 DICAS PEDAGÓGICAS:. 2 DOWNLOAD DA INSTALAÇÃO. 2 PASSO 1 FORMULÁRIO PARA DOWNLOAD. 2 PASSO 2 ESCOLHENDO A VERSÃO.

Procedimentos para Instalação do SISLOC

Transcrição:

Tutorial para o Desenvolvimento de Jogos 2D usando a Linguagem Java Soraia Teixeira Barbosa 1, Carlos Vitor de Alencar Carvalho 2 1 Universidade Severino Sombra, Centro de Ciências Exatas e Tecnológicas e da Natureza, Curso de Sistemas de Informação, soraia_tb@yahoo.com.br 2 Universidade Severino Sombra, Centro de Ciências Exatas e Tecnológicas e da Natureza, Curso de Sistemas de Informação e Programa de Mestrado Profissional em Educação Matemática e UniFOA Centro Universitário de Volta Redonda Departamento das Ciências de Tecnologia e Engenharias, cvitorc@gmail.com Resumo. Atualmente é grande o estudo e desenvolvimento de jogos eletrônicos tanto no meio acadêmico como fora dele. Entretanto o desenvolvimento do mesmo não é uma tarefa trivial. Este artigo mostra o desenvolvimento de um jogo computacional através de uma versão do conhecido jogo de arcade Space Invaders. O artigo proposto tem como objetivo mostrar os passos básicos para a construção de um jogo computacional em duas dimensões utilizando a linguagem de programação Java. 1 Introdução A área de jogos eletrônicos está se tornando cada vez mais popular, sendo uma área de grande interesse financeiro principalmente no segmento de entretenimento digital podendo ser encontrado em diversos dispositivos, como computadores pessoais, console domésticos e dispositivos móveis [Barboza 2008]. Uma das aplicações interessantes dos jogos computacionais é sua utilização no processo educacional. Muitos jogos possibilitam o desenvolvimento de habilidades como cooperação, competição, perseverança, envolvimento, organização e autonomia. Através de softwares educacionais, temos a oportunidade de criar novos jogos e reinventar jogos utilizados em madeira, papel, etc. A possibilidade de divertidas animações, a integração de várias mídias como a escrita, a imagem, o vídeo e o som que o computador oferece enriquecem os jogos [Porto et al. 2008]. Casos de sucesso de jogos computacionais na educação podem ser vistos em Mendes (2007), Santos (2008) e Porto (2008) através do software CONSTRUFIG3D. Este artigo visa mostrar os passos básicos do desenvolvimento de um jogo 2D inspirado no clássico de arcade, Space Invaders. A linguagem de programação escolhida foi Java, devido á sua portabilidade e facilidade de utilização dos seus recursos de computação gráfica através do pacote Java2D. O objetivo é que este texto seja mais uma referência para alunos de cursos de computação interessados em iniciar os estudos e desenvolvimento de jogos computacionais. O restante deste artigo está organizado da seguinte forma: na seção 2 são descritas as fases de desenvolvimento de um jogo computacional. Na seção 3 é mostrada a classe principal do sistema. Na seção 4 é descrita a classe Stage. A seção 5 descreve como é feito o gerenciamento dos recursos (sons e imagens, por exemplo). Na seção 6 são mostradas as informações os atores e finalmente na seção 7 os resultados e considerações finais do trabalho. 54

2 Planejamento de um jogo computacional A fase inicial do ciclo de desenvolvimento de um jogo é o planejamento. Assim que se tem a idéia inicial do jogo, deve-se fazer uma reunião com membros da equipe onde à mesma deve ser exposta e discutida [PERUCIA et al. 2007]. Cabe lembrar que uma equipe para o desenvolvimento de jogos deve possuir profissionais de várias áreas (artística, produtores de textos, animadores, programadores etc.). Terminada a fase de planejamento inicia-se a fase de game design. Na fase de game design são definidas as principais características do jogo, como sua interface, jogabilidade, personagens, fases, inimigos, itens e outras características gerais, que geram o design document, um documento onde os membros da equipe podem ter noção de como irão trabalhar para realizar o que foi planejado [PERUCIA et al. 2007]. É importante também a criação de um level design, que é como um mapa geral com as missões e desafios das fases em geral. Em projetos maiores é necessário que cada fase tenha seu planejamento específico, para que cada membro da equipe possa planejar como fazer a sua parte. Depois de tudo planejado, inicia-se a fase de criação ou desenvolvimento do jogo. A Figura 1 mostra esquematicamente as etapas descritas acima. Figura 1. Esquema das etapas de desenvolvimento de um jogo computacional. Este artigo irá visar justamente esta parte: criação e programação, utilizando a linguagem Java. Nesta etapa, é aconselhável a criação de versões intermediárias, pois estas permitem o acompanhamento da evolução do projeto, além de facilitar na detecção de bugs e na implementação de melhorias. 3 Criando a Classe Principal Primeiro será criada a classe principal do jogo, a qual se chamará de Game. Esta classe irá conter a inicialização do jogo, que deve ser feita como mostra a Tabela 1. Tabela 1. Game.java public static void main (String args[]){ Game inv = new Game(); 55

3.1 A Janela Dentro da classe Game também será feito o desenho da janela. A classe Game deve ser uma extensão de Canvas. Um componente Canvas possibilita criar uma área na tela, na qual a aplicação poderá desenhar através da sobrescrição do seu método paint(), como mostra a Tabela 2. public class Game extends Canvas Tabela 2. Game.java No construtor da classe, deve ser feito o desenho da janela e suas configurações. Para definir a largura (WIDTH) e altura (HEIGHT) da janela, são usadas constantes da classe Stage, que será criada em seguida, pois quando for preciso mudar o tamanho da janela, basta mudar os valores destas constantes no código-fonte (Tabela 3). public Game(){ Tabela 3. Game.java JFrame window = new JFrame("Invasores do Espaço"); JPanel panel = (JPanel)window.getContentPane(); setbounds(0, 0, Stage.WIDTH, Stage.HEIGHT); panel.setpreferredsize(new Stage.HEIGHT)); panel.setlayout(null); panel.add(this); window.setbounds(0, 0, Stage.WIDTH, Stage.HEIGHT); window.setresizable(false); Dimension(Stage.WIDTH, window.setdefaultcloseoperation(jframe.exit_on_close); Depois de criada, a janela deve se tornar visível e ser prioridade para os comandos de entrada (Tabela 4). window.setvisible(true); requestfocus(); 4 A Classe Stage Tabela 4. Game.java A classe Stage contém alguns dados sobre a fase. Inicialmente seu código será como mostrado na Tabela 5. Tabela 5. Stage.java public interface Stage { public static final int WIDTH = 800; public static final int HEIGHT = 600; 56

public static final int PLAY_HEIGHT = 520; public static final int SPEED = 10; As variáveis WIDTH e HEIGHT vão conter os valores de largura e altura da fase e das janelas, a variável PLAY_HEIGHT terá o valor da área em que acontecerá a ação do jogo e SPEED será usada para definir a velocidade do jogo. 5 Gerenciamentos dos recursos do jogo Na tela serão desenhados todos os sprites (imagens que irão representar os gráficos dos personagens, armas etc.) e serão exibidas as informações do jogo. Para isso, será preciso criar classes para carregar e controlar esses sprites. O mesmo método pode ser usado para carregar efeitos sonoros e músicas, que também são muito importantes em um jogo, por isso pode ser criada uma classe abstrata com os métodos comuns no carregamento de ambos os recursos. O controle desses recursos é feito através das classes ResourceCache, como mostra a Tabela 6. Será usado um HashMap para armazenar o nome do sprite e a imagem carregada. Tabela 6. ResourceCache.java public abstract class ResourceCache { protected HashMap resources; public ResourceCache(){ resources = new HashMap(); Para indicar o caminho dos recursos, será utilizado getclass().getclassloader().getresource(), pois desta forma poderá ser usada uma URL indicando o caminho direto (diretórios onde estão os recursos) de onde as classes estão sendo carregadas, o que facilita na hora de passar o jogo para um applet, por exemplo, sem precisar fazer mudanças em relação ao carregamento de imagens (Tabela 7). Tabela 7. ResourceCache.java protected Object loadresource(string name){ URL url = null; url = getclass().getclassloader().getresource(name); return loadresource(url); Todos os recursos estarão na mesma pasta das classes, em um diretório chamado resources, então, toda vez que uma imagem for carregada, o aplicativo deve buscar nesta pasta. Depois disso, o recurso será armazenado no HashMap criado anteriormente (Tabela 8). Tabela 8. ResourceCache.java protected Object getresource(string name){ 57

Object res = resources.get(name); if(res == null){ res = loadresource("resources/"+name); resources.put(name, res); return res; protected abstract Object loadresource(url url); 5.1 Imagens A classe usada para carregar e gerenciar as imagens será a SpriteManager, que será uma extensão de ResourceCache (Tabela 9). Tabela 9. SpriteManager.java public class SpriteManager extends ResourceCache{ O método loadresource(url url) tenta ler as imagens, se não conseguir, cria um JOptionPane com uma mensagem de erro e fecha o aplicativo (Tabela 10). Tabela 10. SpriteManager.java protected Object loadresource (URL url){ try{ return ImageIO.read(url); catch(exception e){ o jogo." + JOptionPane.showMessageDialog(null, "Erro ao carregar "Por favor, verifique a instalação.", "Erro!", JOptionPane.ERROR_MESSAGE); 6 Atores System.exit(0); return null; Os atores são todos os objetos que criam a interação no jogo. Neste caso existem o herói, os inimigos e o tiro. A classe Actor irá conter os métodos comuns a estes atores (Tabela 11). public class Actor { protected int x,y; protected int width, height; Tabela 11. Actor.java protected String[] spritenames; protected Stage stage; 58

protected SpriteManager spritemanager; protected int currentframe; protected int framespeed, t; protected boolean remove; public Actor (Stage stage){ this.stage = stage; spritemanager = stage.getspritemanager(); currentframe = 0; framespeed = 1; t=0; public void paint(graphics2d g){ g.drawimage(spritemanager.getsprite(spritenames[currentframe]), x, y, stage); Se um sprite for removido da tela durante a execução do loop principal do jogo, falhas podem ser geradas na execução do aplicativo. O método setremove serve para contornar este problema, pois ele marca o sprite para ser removido durante a próxima execução do loop, evitando problemas na leitura dos sprites (Tabela 12). Tabela 12. Actor.java public void setremove(){ remove = true; public boolean issettoremove(){ return remove; O método getbounds() cria um retângulo em torno do sprite (Tabela 13). public Rectangle getbounds(){ Tabela 13. Actor.java return new Rectangle(x,y,width,height); Estes retângulos são usados nos cálculos de detecção de colisão dos personagens. A Figura 2 exemplifica como esses retângulos são visualizados pelo aplicativo. 59

Figura 2. Como funciona a detecção de colisão. O método act() faz a troca de sprites para realizar a animação dos atores conforme pode ser visto na Tabela 14. public void act(){ t++; if(t % framespeed == 0){ t=0; 6.1 O Personagem Tabela 14. Actor.java currentframe = (currentframe + 1) % spritenames.length; A classe Player irá representar o personagem que o jogador irá controlar que nesse caso é uma nave. Esta classe possui diversas variáveis e métodos exclusivos do jogador (Tabela 15). Tabela 15. Player.java public class Player extends Actor { protected int vx; protected static final int PLAYER_SPEED = 4; private boolean left, right; 16). O método act() desta classe evita que a nave ultrapasse os limites da tela (Tabela Tabela 16. Player.java public void act(){ super.act(); 60

x+=vx; if (x < 0 ) x = 0; if (x > Stage.WIDTH - getwidth()) x = Stage.WIDTH - getwidth(); O método updatespeed() faz com que a nave possa se mover para os lados, de acordo com a tecla pressionada (Tabela 17). protected void updatespeed(){ vx = 0; if(left) vx = -PLAYER_SPEED; if(right) vx = PLAYER_SPEED; Tabela 17. Player.java O método fire() faz com que a nave possa atirar. Primeiro é feito o posicionamento do tiro e depois criado um objeto para representá-lo na tela (Tabela 18). public void fire(){ Tabela 18. Player.java Shot shot = new Shot(stage); shot.setx(x+25); shot.sety(y - shot.getheight()); stage.addactor(shot); stage.getsoundmanager().playsong("sound/shot.wav"); 7 Resultados e Considerações Finais Ao término deste artigo, no qual foram abordados métodos para a criação de um jogo computacional 2D, espera-se que os estudantes da área de computação possam ter uma idéia inicial de como esses jogos são feitos, servindo como base para pesquisas ou estudos. A Figura 3 mostra a tela do software em execução. Através deste tutorial foram explicados conceitos importantes no desenvolvimento de um jogo, como por exemplo, o tratamento de imagens, a detecção de colisão entre os personagens e a movimentação do jogador na tela. Em uma próxima etapa será desenvolvido e pesquisa uma estratégia para o enfoco educativo do sistema possivelmente com alteração para a temática na área de matemática. 61

Agradecimentos Figura 3. Tela do jogo. Os autores agradecem à FAPERJ (Fundação de Amparo à Pesquisa do Estado do Rio de Janeiro) pelo auxílio financeiro recebido. O segundo autor agradece à FUNDADESP (Fundação Nacional de Desenvolvimento do Ensino Superior Particular) pela bolsa de produtividade de pesquisa de doutorado. Referências Bibliográficas Barboza, D. C. (2008) Ambiente Visual para desenvolvimento de jogos eletrônicos, Monografia Curso de Bacharelado em Ciência da Computação do Centro Universitário Serra dos Órgãos. Deitel H. M., Deitel P. J. (2002) Java Como Programar: 4ª edição. Bookman 2002. Harbour, J. S. (2007). Beginning Java Game Programming, 2 th edition. Mendes, J. L. de S., Carvalho, C. V. A., Carvalho, J. V. (2007) CONSTRUFIG3D: Uma Ferramenta Computacional para apoio ao ensino da Geometria Plana e Espacial. RENOTE. Revista Novas Tecnologias na Educação, v. 5, n 1, p. 1/10-10, 2007. Perucia A., Berthêm A.., Bertschinger G., Castro R. R. (2005) Desenvolvimento de Jogos Eletrônicos Teoria e Prática: 2ª edição. Novatec, 2005. Porto, I. da P. G. Carvalho, C. V. A., Oliveira, R. (2008) O jogo Computacional TANGRAM: um objeto de Aprendizagem sobre Geometria. IV Colóquio de História e Tecnologia no ensino da Matemática - HTEM, UFRJ, 2008. Santos, S. C., Carvalho, Janaina Veiga, Carvalho, C. V. A. (2008) Utilização e Avaliação do sistema computacional CONSTRUFIG3D para apoio ao ensino da geometria. RENOTE. Revista Novas Tecnologias na Educação, v. 6, número 1, p 1-9, 2008. 62