Escolar Documentos
Profissional Documentos
Cultura Documentos
Jogo Sobre Reciclagem
Jogo Sobre Reciclagem
CIÊNCIAS DA COMPUTAÇÃO
SÃO PAULO
2017
1
2
ÍNDICE
OBJETIVO .....................................................................................................................04
1.0 INTRODUÇÃO .........................................................................................................0
5
1.1 Definição .................................................................................................................05
1.2
Importância .............................................................................................................05
1.3 Materiais
recicláveis ...............................................................................................06
1.3.1
Plástico .................................................................................................................06
1.3.2
Papel .....................................................................................................................06
1.3.3 Vidro .....................................................................................................................07
1.3.4 Metal .....................................................................................................................07
1.4 Reciclagem no Mundo ...........................................................................................07
2.0 REGRAS DO JOGO ................................................................................................08
2.1 Mecanismos do
jogo ..............................................................................................09
2.1.1 Tela
inicial ............................................................................................................09
2.1.2 Tela do jogo .........................................................................................................09
2.1.3 Menu superior .....................................................................................................10
2.1.4 Tela final ..............................................................................................................12
3.0 PLANO DE DESENVOLVIMENTO DO
JOGO .........................................................13
3.1 Java .........................................................................................................................13
3.2
Swing .......................................................................................................................15
3.3 AWT .........................................................................................................................16
2
4.0 PROJETO DO
PROGRAMA ....................................................................................18
4.1 Classe
Objeto ..........................................................................................................18
4.2 Classe
Fase .............................................................................................................19
4.3 Classe
Aplicativo ....................................................................................................23
5.0 LINHAS DE
CÓDIGO ...............................................................................................25
5.1 Classe
Objeto ..........................................................................................................25
5.2 Classe
Fase .............................................................................................................28
5.3 Classe
Aplicativo ....................................................................................................37
6.0 PROGRAMA EM
FUNCIONAMENTO .....................................................................40
3
BIBLIOGRAFIA .............................................................................................................43
FICHAS
APS ..................................................................................................................45
3
OBJETIVO
Este trabalho tem como o objetivo conscientizar a pessoa que estiver jogando da
importância de se realizar a reciclagem, orientando o jogador a realizá-la de forma
consciente, colocando cada tipo de material em seu devido recipiente. Um jogo simples
e educativo, mas sem perder a diversão e a jogabilidade.
4
5
1.0 INTRODUÇÃO
1.1 Definição
1.2 Importância
A reciclagem não só é importante para preservar o meio ambiente,
contribuindo para a diminuição significativa da poluição do solo, da água e do ar,
como também pode proporcionar lucro para muitas empresas que podem utilizar o
material em novos produtos como acessórios e móveis, e assim, reduzir o custo de
produção, além de criar uma imagem boa de si mesma por ser amigável ao meio
ambiente. A reciclagem consiste na transformação de materiais usados em produtos
novos, que poderão ser inseridos na cadeia de consumo sem ter a necessidade de
extrair recursos naturais. Essa ação contribui para a redução de lixo gerado pelo ser
humano. Além disso, se compararmos o uso de recursos para fazer determinado
produto, com o processo de reciclagem e com o processo normal de conversão da
matéria prima vemos ganhos de até 97% em economia de uso de energia e água, e
diminuição da poluição do solo, água e ar com o processo de reciclagem.(Paulo,
Fridman.2007)
Outro benefício da reciclagem é a quantidade de empregos que ela gera em
todo o país. Existem muitos desempregados, que não conseguindo trabalho em
outros setores, estão buscando trabalho neste setor, e conseguindo salários bons o
suficiente para manterem suas famílias. Com isso, cooperativas de catadores de
papel e alumínio e outros materiais recicláveis já são uma boa realidade nos centros
urbanos de todo o Brasil.(Paulo, Fridman.2007)
6
Outro ponto importante na reciclagem, é que ela também pode ser usada para
a produção de energia elétrica, barateando assim o custo de produção de energia e,
assim, fazendo com que a conta de luz fique mais barata.(Paulo, Fridman.2007)
1.3 Materiais recicláveis
1.3.1 Plástico
Materiais como copos, garrafas, sacos, tampas, tigelas, entre outros são
recicláveis, e o processo pode ser feito de 3 maneiras diferentes.
A primeira se chama "Reciclagem Mecânica" e é a mais comum entre as três,
e consiste basicamente em transformar os produtos de plástico recolhidos,
separados e lavados, em pequenos grânulos, e, a partir desses grânulos, formar um
produto completamente diferente do anterior. Os produtos mais comuns produzidos
a partir dessa técnica são sacos de lixo, pisos, mangueiras, embalagens não
alimentícias e peças de automóveis.( FRAGA, Simone Carvalho Levorato. 2014)
A segunda se chama “Reciclagem Química” e é a mais elaborada das três, e
consiste em reprocessar os plásticos recolhidos, formando assim matéria prima, e
depois formar produtos de elevada qualidade á partir dessa matéria prima. Essa é a
forma mais cara de reciclagem de plástico, e requer uma quantidade enorme do
material para ser economicamente viável.( FRAGA, Simone Carvalho Levorato.
2014)
A terceira opção se chama “Reciclagem Energética” e é aquela que não
transforma o plástico em outro produto, mas sim em energia elétrica e até mesmo
combustível, e consiste na incineração do material, aproveitando o poder calorífico
armazenado neles. Essa opção já é utilizada em 35 países diferentes, e esses
geram cerca de 10.000MW de energia por mês só com plástico.( FRAGA, Simone
Carvalho Levorato. 2014)
1.3.2 Papel
7
Materiais como jornais, revistas, papéis, caixas de pizza, entre outros são
recicláveis, e são os materiais mais fáceis de se reciclar, podendo ser feito até
mesmo em casa facilmente, nas indústrias a reciclagem é feita rasgando o papel em
tiras uniformes, depois molhando-o com água para que vire apenas celulose, após
isso é drenada toda a água junto com a impureza e é prensado por cilindros a vapor,
e então está pronto para virar um novo papel. ( FRAGA, Simone Carvalho Levorato.
2014)
1.3.3 Vidro
1.3.4 Metal
Materiais como tampas de garrafa, latas, panelas, pregos, entre outros são
recicláveis, e para isso o material enviado para as empresas de reciclagem são
separados por tipo, como cobre, alumínio, ferro, entre outros e não vão para o setor
de prensagem, onde são compactados em cubos para facilitar a próxima etapa que
é a fundição, onde o metal é derretido, após isso ele é transformado em produtos
novos como latinhas. O alumínio é o produto reciclável mais aproveitável, tendo uma
porcentagem de quase 100% de aproveitamento, e o Brasil é o líder em reciclagem
do mesmo, com aproximadamente 100% das latinhas produzidas em território
nacional sendo feito de reciclagem.( FRAGA, Simone Carvalho Levorato. 2014)
8
1.4 Reciclagem no mundo
Em muitos países no mundo os governos já estão cientes do potencial da
reciclagem, e de como ela é importante para a desaceleração da degradação do
meio ambiente. A Europa lidera a lista de países com melhor taxa de lixo reciclado,
onde aproximadamente 35% de todo o lixo produzido já é reciclado, e essa
reciclagem já é responsável por gerar 1% de todo o PIB do continente, porém, a
meta é que todas as cidades reciclem ao menos 50% de todo o seu lixo até 2020,
porém mesmo faltando muito tempo, 4 países já conseguiram bater essa meta, são
eles Áustria, Alemanha, Bélgica e Holanda.(Paulo, Fridman.2007)
Sendo um exemplo de continente para reciclagem a Europa também
aproveita todo o lado econômico desta prática, sendo que já gerou mais de 2 milhão
de empregos por ano só nesse setor e fez 145 bilhões de euro só de rendimento
desse mercado.(Paulo, Fridman.2007)
A Áustria é o país mais á frente em termos de reciclagem, situada na Europa
Central o país tem uma taxa de lixo produzida por pessoa por ano de cerca de
591Kg, porém cerca de 62,8% de todo o seu lixo já é tratado e reciclado.(Paulo,
Fridman.2007)
Em contrastes com esses números, o Brasil em 2008 produziu 7,1 milhões de
toneladas de lixo, e apenas 13% desse total foi reciclado.(Paulo, Fridman.2007)
Em termos econômicos, a reciclagem já gerou 12 bilhões de reais para o
Brasil, porém as áreas sem reciclagem representam um mercado em potencial
perdido de cerca de 8 bilhões de reais por ano para o governo, o que representa
cerca de 0,02% do PIB nacional.(Paulo, Fridman.2007)
9
2.0 REGRAS DO JOGO
Como o nosso objetivo com esse jogo é incentivar as pessoas a reciclar, nós
criamos um jogo onde a pessoa deve aprender qual tipo de lixo deve ser jogado em
qual cor de lixeira.
Para isso, nós fizemos um jogo em que vários tipos diferentes de lixo vão caindo
na tela, pegamos um ícone para metal, um para papel, um para vidro e um para
plástico, para o jogador aprender quais tipos de matérias são recicláveis ou não.
Já que a nossa intenção é fazer com que o jogador aprenda qual é a cor da lata
que se deve jogar cada tipo de lixo, nós pegamos ícones de latas sem nenhuma
indicação, fazendo com que as chances de o jogador lembrar dessa informação
aumentem muito, já que, caso ele erre a relação o jogo irá acabar.
10
Fonte: print screen do jogo sendo rodado no sistema macOS Sierra.
Nós fizemos o jogo para ser bem simples e divertido, para isso criamos uma
mecânica de jogo bem simples.
Conforme os lixos vão caindo da parte de cima da tela, o jogador deve clicar
com o mouse e arrasta-las até a lixeira correspondente a cada tipo de lixo, realizando
assim a reciclagem do objeto, e fazendo com que o contador localizado no canto
superior esquerdo da tela encremente 1.
Caso o lixo ultrapasse o limite de tela antes do jogador conseguir efetuar a
reciclagem, ou o jogador tente jogar o lixo emu ma lixeira que não deve, o jogo se
encerrará.
Á seguir podemos ver a tela principal do jogo sendo executada.
11
Fonte: print screen do jogo sendo rodado no sistema macOS Sierra.
12
Fonte: print screen do jogo sendo rodado no sistema macOS Sierra
Como podemos ver na imagem acima, esse menu nos dá duas opções, a
primeira “sobre”, nos dá um pouco mais de informação sobre o nosso jogo em uma
nova janela, como podemos ver á seguir.
13
Fonte: print screen do jogo sendo rodado no sistema macOS Sierra
Caso o jogador não consiga realizar os objetivos do jogo, ele será redirecionado
para a tela de fim de jogo.
E, caso ele queira recomeçar o jogo, ele deve apertar enter, e o jogo começará
de novo, como podemos ver na imagem á seguir.
14
Fonte: print screen do jogo sendo rodado no sistema macOS Sierra
15
3.0 PLANO DE DESENVOLVIMENTO DO JOGO
3.1 Java
Nós escolhemos usar o Java para a realização de nosso projeto pois, apesar de
os jogos de auto orçamento normalmente usarem ferramentas escritas em C++, como
Call of Duty, GTA, entre outros, o Java é uma linguagem simples e fácil de usar e, para
o nosso objetivo com esse projeto, supre todas as nossas necessidades. (Dawson,
2014)
Java é uma linguagem de programação orientada a objetos e baseada em
classes, que nasceu em 1995 criada por uma empresa chamada “Sun Microsystems”,
que, posteriormente, foi comprada pela Oracle. A linguagem tem muita influencia vinda
de linguagens de programação como C, hoje me dia ela é uma das linguagens de
programação mais utilizadas no mundo, e é principalmente utilizada para
desenvolvimento web. (SCHILDT, 2014)
Abaixo podemos observar um vetor o qual contém uma visão simples de como
uma linguagem de programação orientada á objetos funciona e como uma linguagem
de programação estruturada funciona.
Imagem 1 – LPOO vs LE
16
Fonte: Apresentação feita pelo Instiuto Federal de Educação, Ciência e
Técnologia.
Como podemos ver no vetor acima, em uma linguagem estruturada todos os
seus procedimentos são realizados diretamente em seus dados globais. Já na
linguagem de programação orientada a objetos, nós dividimos todos os comandos de
nosso programa em métodos, e não utilizamos dados globais, mas sim objetos, esses
objetos servem como uma representação de objetos da vida real em nosso programa.
O Java possui uma biblioteca chamada “Util”, na qual encontramos diversas
classes que auxiliam no desenvolvimento de qualquer programa.
Entre essas classes estão a classe “ArrayList”, a qual permite você criar uma
lista com vários vetores que podem conter qualquer informação que você desejar, a
classe “List”, a qual te permite criar listas com diversos tipos de objetos diferentes, e as
classes “ThreadLocalRandom” e “Random“, as quais permitem que você gere um
número aleatório que esteja dentro de um determinado intervalo. (ORACLE)
3.2 Swing
Também escolhemos trabalhar com a interface gráfica Java Swing, já que é uma
interface bem simples de ser utilizada e contém muitas classes uteis para se fazer um
jogo.
Swing é uma interface de usuário gráfica sucessora á interface gráfica AWT, e
pode trabalhar junto com a mesma em um programa, porém, suas estruturas são muito
diferentes, enquanto a interface AWT passa muitas tarefas para o sistema operacional
realizar, a Swing tem um nível mais alto, fazendo com que o programa acabe utilizando
mais memória do computador, mas também faz com que o seu programa sofra poucas
mudanças se rodado em sistemas operacionais diferentes. (SCHILDT, 2014)
Para as imagens que queríamos usar para o jogo, nós usamos a classe
“ImagenIcon“, a qual serve para o tratamento de imagens externas.
Já para construir a janela na qual o nosso jogo iria ficar usamos a classe
“JPanel“, a qual serve como um painel que ira conter todos os elementos como botões,
textos, imagens, entre outros, a classe Timer, a qual permite usarmos um certo
17
intervalo de tempo para que uma nova ação seja feita, a classe “JFrame“, a qual serve
como a janela onde todo o jogo ira ocorrer, a classe “JMenuBar“, a qual serve para
criar um menu em cima da tela, o qual pode conter vários itens do tipo “JMenu“, o qual
é outra classe dentro do Swing, que também pode conter vários itens do tipo
“JMenuItem“, o qual também pertence a interface gráfica Swing. (ORACLE)
Além da Swing, também usamos a interface gráfica “AWT“(Abstract Window
Toolkit), decidimos utiliza-la pois ela contém diversas classes que auxiliam no
desenvolvimento de jogos.
3.3 AWT
18
Fonte: Página sobre “Swing” da Wikipédia.
Pelo vetor, podemos ver que ambas as interfaces gráficas têm sua origem no
mesmo pacote de classes “Java Lang”, também vemos que os componentes
pertencentes ao Swing fazem um papel parecido com o de um complemento, vemos
que os seus componentes sempre têm alguma relação com o AWT.
Para que o nosso jogo ficasse sempre em uma janela de tamanho ideal,
precisávamos de uma classe que nos desse as dimensões da tela do computador do
usuário, para isso usamos a classe Toolkit e a Dimension, as quais servem retornam o
tamanho da tela na qual o seu programa está sendo rodado. (ORACLE)
Além disso, essa interface contém várias classes úteis, como a classe “Image“, a
qual permite que você utilize imagens externas em seu programa, a classe “Rectangle“,
a qual trata suas imagens como um retângulo, podendo assim usar vários métodos
como a “colide”, a qual verifica se duas imagens se sobrepõem em algum momento, a
classe “ActionEvent“, a qual serve para que, sempre que determinado evento ocorra
durante o tempo em que o seu programa está rodando, ele irá realizar determinada
ação, e a classe “ActionListener”, a qual serve para perceber quando a ação criada
pela classe “ActionEvent” ocorre no programa. (ORACLE)
Para a parte gráfica usamos duas classes contidas na Interface AWT, sendo
elas e a classe “Graphics”, a qual permite que que você crie elementos gráficos para o
seu programa, a classe Graphics2d, a qual te dá mais controle sobre objetos
geométricos. (ORACLE)
No vetor abaixo podemos ver melhor como essas classes funcionam dentro de
um programa.
Imagem 3 – Graphics em Java
19
Fonte: Imagem na sessão sobre graficos no site Apache Harmony.
Pelo vetor acima, podemos ver que ambas as classes utilizadas são classes
abstratas derivadas da classe Object, e que a classe “BufferedImageGraphics2D”,
também utilizada em nosso programa, é uma classe que vem da de
“CommomGraphic2D”.
Além disso, para usarmos o teclado em nosso jogo nós utilizamos as seguintes
classes contidas na interface gráfica AWT, a classe “KeyAdapter”, a qual permite que o
nosso programa possa receber comandos vindo diretamente do teclado, a classe
“KeyEvent”, a qual serve para você construir um evento com as teclas, por exemplo,
caso o usuário entre com a tecla enter, o programa ira realizar uma certa ação.
(ORACLE)
Já para o mouse, usamos a classe “MouseAdapter”, a qual nos permite trabalhar
com o mouse em nosso programa, a classe “MouseEvent”, a qual nos permite detectar
certas ações do mouse, como cliques, cliques duplos, entre outros, e usamos a classe
“MouseMotionListener”, a qual nos permite detectar movimentos do mouse, como
quando o usuário arrasta o mouse pela tela, ou o faz com o mouse pressionado, entre
outros. (ORACLE)
Nós escolhemos dividir o nosso jogo em três classes diferentes, sendo elas uma
chamada “Objetos”, na qual será desenvolvido toda a parte que envolve os objetos, no
caso lixos, que irão ficar caindo na tela, outra chamada “Fase”, na qual controlamos
toda a lógica do jogo, como programar como o programa ira saber se o jogador perdeu
ou não, entre outras coisas, e, por fim, temos a classe “Aplicativo”, nela está contido o
nosso método “main”, e usamos ela para inicializar o nosso jogo, chamando os
diversos métodos contidos em nossas outras classes.
20
Nós queríamos criar uma classe na qual tudo sobre os objetos usados em nosso
jogo fosse programado, para isso criamos variáveis.
Para sabermos o tamanho da tela do computador em que o nosso jogo está
rodando, nós criamos as variáveis “screenSize” do tipo “Dimension”, a qual recebe as
exatas dimensões da tela, e a variável “height” do tipo “Double“, a qual contém
somente a altura da tela que está sendo usada. Nós não criamos uma variável para a
largura pois não houve a necessidade de utilizar essa informação dentro dessa classe.
Nós também criamos algumas variáveis para trabalhar com as imagens dos
objetos sendo elas a variável “id” do tipo “int”, a qual serve para identificarmos os
diferentes tipos de objetos, a variável “largura” do tipo “int”,, a qual representará a
largura das imagens, a variável “altura”, a qual representará a altura da imagem, as
variáveis “x” e “y” do tipo “int”, as quais representam em que posição da tela os nossos
objetos estarão, a variável “Imagem” do tipo “Image”, a qual servirá para carregar as
imagens de nossos objetos, e a variável “visible” do tipo “Boolean”, a qual servirá para
saber se as imagens devem ser visíveis ou não.
Além disso, também criamos a variável “velocidade” do tipo “int”, a qual é usada
para escolhermos a velocidade com a qual os nossos objetos cairão na tela, e a
variável “contador”, a qual servirá de auxilio para o nosso método “Switch”.
Nós encapsulamos fortemente todas as variáveis para uma maior segurança em
nosso programa e criamos métodos “get” e “set” para todos eles.
Nós construímos um construtor nessa classe, o qual tem o propósito de, sempre
que for chamado, criar um novo objeto, para isso ele deve receber duas variáveis “x” e
“y” do tipo “int”, as quais serão usadas para o programa guardar em qual local da tela
esse objeto deverá estar.
Logo após, o programa irá gerar um número aleatório dentro do intervalo de 0 e
3, e, dependendo do resultado, escolherá uma imagem diferente. Caso seja 0 o objeto
criado terá a imagem de i, papel e terá um id igual a 1, caso seja 1 o objeto criado terá
a imagem de um vidro e terá um id igual a 2, e assim por diante.
Depois disso, nós fazemos a nossa variável “imagem” receber a imagem do
objeto selecionado, as variáveis “largura” e “altura” receber a largura e a altura da
21
imagem respectivamente, e fazemos com que essa imagem fique visível em nosso
programa.
Além disso também criamos o método “mexer”, nós criamos esse método com a
intenção de programar qual será o movimento dos nossos objetos. Para isso, nós
criamos uma condição “if” que checa se essa imagem está dentro da tela, caso esteja,
o seu componente “y” aumentará de acordo com a velocidade desejada, caso o
contrário, essa imagem não aparecerá mais na tela.
Nessa classe, a qual estende a classe “JPanel”, já que vamos criar nossa tela
aqui, e implementa a interface “ActionListener”, para colocarmos ouvidores em nosso
programa, nós quisemos colocar tudo o que é pertinente ao funcionamento da nossa
fase, ou seja, colocar as imagens das latas de lixo que serão utilizadas no jogo, a
lógica de quando o jogo será terminado ou não, entre outras coisas.
Assim como na classe “Objeto”, também utilizamos as constantes “screenSize”
do tipo “Dimension”, para sabermos as dimensões da tela, e a constante “height” do
tipo “Double“, a qual contém somente a altura da tela, porém também criamos a
constante “width”, a qual contém somente a largura da tela utilizada.
Além disso, para organizarmos o local exato onde cada imagem das latas
deveria ficar nós criamos a constante “espacamentoLatas” do tipo “int”, a qual calcula a
que distância uma lata deve ficar da outra dividindo a largura da tela por 3, a variável
“alturaLatas” do tipo “int”, na qual colocamos em que altura todas as latas devem estar,
e as latas “x_Lata_Azul”, “x_Lata_Verde”,” x_Lata_Vermelha” e ” x_Lata_Amarela” do
tipo “int”, as quais contém os valores do eixo da largura em que as latas devem estar
em nosso programa.
Também criamos as variáveis “fundo”, “paper”, “glass”, “metal” e “plastic” do tipo
“Image”, as quais irão, no futuro, receber as imagens das latas de lixo de nosso jogo, e
a variável “inicio”, do tipo boolean, a qual indicará se o jogo está na tela inicial ou não.
Além disso também criamos a variável “contador” do tipo “int”, a qual servirá
para contarmos quantos objetos o usuário conseguiu fazer cair no cesto correto, a
22
variável “timer” do tipo “Timer”, a qual servirá para controlarmos o tempo de alguns
métodos, a variável “Inimigos’ do tipo “List”, a qual servirá para criarmos uma lista com
vários objetos que estarão caindo na tela, e a variável “emJogo” do tipo “boolean”, a
qual irá nos auxiliar para saber se o usuário perdeu ou não.
Logo no inicio, nós criamos um método chamada “coordinate”, a qual não recebe
nenhuma informação, mas devolve uma variável do tipo “int”, nesse método nós
criamos uma variável do tipo “int” chamada “coo”, e usamos um método contido na
classe “ThreadLocalRandom” para gerar um número aleatório entre 100 e o tamanho
da largura da tela menos 100. Nós criamos esse método para que, sempre que um
objeto apareça na tela, ele esteja em algum lugar aleatório da tela, fazendo com que o
jogo fique mais interessante e dinâmico.
Logo depois, nós criamos um construtor para essa classe chamado “Fase”, o
qual não recebe nenhum valor e também não devolve nada. O qual tem como objetivo
controlar todo o jogo, ou seja, para que o nosso programa nós temos que chamar esse
construtor. Nele nós fazemos com que a nossa tela tenha foco, isso faz com que,
quando você aperte algum botão enquanto nessa tela o programa registrará esse
movimento, também habilitamos um Buffer, para que a tela seja recarregada a cada
determinado tempo.
Também colocamos um ouvidor para o teclado, para que o programa sempre
saiba quando o usuário apertar alguma tecla do teclado, e adicionamos dois ouvidores
para o mouse, um para rastrear quando o usuário clica com o mouse, e um ouvidor
para rastrear se o usuário arrastou o mouse em algum momento.
Depois disso, também importamos todas as imagens de nossas latas e as
atribuímos para as nossas variáveis “fundo”, “paper”, “glass”, “metal” e “plastic” do tipo
“Image” já citadas anteriormente.
Além disso, também fazemos a variável “emJogo” receber o valor de verdadeiro
para que o jogo começo, chamamos o método “inicializarObjetos”, a qual será
responsável por lançar os objetos na tela, e criamos um timer que irá recarregar a tela
a cada 5 milésimos, para observarmos o movimento na tela.
Na mesma classe, também criamos o método “inicializarObjetos”, a qual não
recebe nem devolve nenhum valor. Nós criamos esse método com a intenção de,
23
sempre que precisarmos, chama-la para que os nossos objetos comecem a cair do
topo da tela.
Para isso, nós criamos a variável “inimigos” do tipo “ArrayList”, a qual servirá
para criarmos uma lista com todos os objetos que cairão na tela, e uma variável do tipo
“int” chama “coo”, a qual servirá para termos as coordenadas “x” dos objetos.
Após criarmos essas variáveis, nós criamos um objeto do tipo “Objeto” dando o
valor da variável “coo” e o número “0”, e já o adicionamos em nossa lista “inimigos”.
Nós fazemos isso pois queremos que o nosso objeto sempre inicie com as
coordenadas em “y” igual a 0, para que o objeto aparece no topo da tela, e a
coordenada em “x” igual um número aleatório, para que o objeto aparece em todos os
locais da tela.
Nós também criamos um novo Timer, o qual terminará sempre em 5 segundos,
e deverá adicionar um objeto á lista “inimigos”.
Para a parte gráfica, nós usamos a interface “Paint”, a qual deve receber um
objeto do tipo “Graphic”, porém não devolve nenhuma variável. Por isso a utilizamos
para cuidar de toda a parte de imagens.
Nós colocamos um “if” logo no inicio desse método para que, caso a variável
“inicio” seja falso ele deve rodar certos comando pois o usuário estará na tela inicial e,
caso seja verdadeira, rodará o jogo normalmente.
Para isso, nós criamos um objeto que irá cuidar dessas imagens chamado
“gráficos” do tipo “Graphics2D”, e mandamos ele desenhar todas as imagens de
nossas latas e de nosso fundo no fundo da tela.
Depois disso, criamos uma condição em que, caso o jogo ainda esteja rodando,
ou seja, a variável “emJogo” seja verdadeira, o programa desenhará todos os objetos
caindo em nossa tela e desenhará o contador de quantos objetos foram colocados na
cesta certa, e, caso não esteja, ele desenhará uma imagem com a mensagem de
“Game Over” na tela, nós também usamos os .
Logo após, nós sobrescrevemos o método “actionPerformed” contido na classe
“ActionListener”, o qual deve receber um objeto do tipo “ActionEvent”, porém não
devolve nenhuma variável. O Nosso objetivo com esse método foi programar as
24
mecânicas do jogo, sendo aqui aonde os objetos receberão o comando de se mover ou
não.
Para isso, nós criamos um laço de repetição, o qual verificará se todos os
objetos dentro da lista “inimigos”, e, caso eles estejam visíveis, ou seja, estejam dentro
da tela, ele fará com que esses objetos realizem o seu movimento devido, e, caso não
esteja visível, ele remove o objeto da lista.
Depois disso, nós chamamos o método “encontros”, para verificar se algum
objeto entrou em alguma cesta errada, e depois chamamos o método “repaint”, o qual
deve recarregar a tela, o qual só será chamado caso o jogo não esteja na tela inicial.
Para checarmos se um objeto caiu dentro do cesto correto ou não nós criamos a
classe “encontros”, a qual não recebe nem devolve nenhuma variável.
Nós criamos um laço de repetição que irá, o tempo inteiro, percorrer toda a lista
“inimigos”, e checará quais são as coordenadas “x” e “y”, de cada uma, caso as
coordenadas “y” de qualquer objeto passe de 900, o jogo acabará e a mensagem de
fim de jogo aparecerá, nós fizemos isso pois, casso a coordenada “y” passe desse
valor, significa que o objeto não está mais em tela.
Logo após, nós fizemos uma lógica para que, caso o objeto esteja dentro da
cesta de lixo correta, o objeto se tornará invisível e o contador irá ser acrescentado em
1, e, caso ele vá para qualquer outro cesto, a variável “emJogo” se torna falsa e a
imagem de fim de jogo aparece. Para isso, nós pegamos a coordenada x de cada lata
e acrescentamos 120 pixels para mais ou para menos para cobrir a área inteira da lata
de lixo.
Além disso, também criamos, dentro dessa mesma classe, uma classe chamada
“TecladoAdapter”, a qual estende a classe “KeyAdapter”, com o objetivo de podermos
usar o teclado para, sempre que o jogador perder, ele poder pressionar a tecla “Enter”,
poder voltar ao jogo.
Para isso, nós chamamos o método “keyPressed”, o qual nos dá qual tecla foi
pressionada pelo usuário, e, caso tenha sido “Enter” e não esteja em jogo, o programa
começará novamente um novo jogo para o usuário poder jogar.
Nós também criamos a classe “MouseAdapters”, a qual estende a classe
“MouseAdapter” e implementa a interface “MouseMotionListener”, nós criamos essa
25
classe para poder reconhecer os movimentos do mouse, mais especificamente
reconhecer quando o usuário arrasta o mouse pela tela e poder fazer com que o
usuário arraste os objetos que caem na tela.
Para isso, nós chamamos o método “mouseDragged”, o qual recebe um evento
de mouse, e, sempre que o usuário estiver arrastando o mouse em cima de um dos
objetos contidos na lista “inimigos”, ele pegará as coordenadas “x” e “y” do ponteiro do
mouse, e passará as coordenadas do “x” para a coordenada “x” do objeto.
26
fique errada, falamos para que, quando o usuário clique no botão de fechar a janela, o
programa feche por completo, fazemos com que a janela fique centrado na tela,
fazemos com que toda a parte gráfica fique visível, e adicionamos um tirulo para a
janela.
Por fim, dentro do nosso método “main”, nós apenas criamos um objeto do tipo
“Aplicativo”, o que chamará todos os construtores criados e criará o nosso jogo.
27
5.0 LINHAS DE CÓDIGO
package aps.jogo;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;
import javax.swing.ImageIcon;
28
private Image imagem;
private boolean visible;
29
break;
default:
}
imagem = referencia.getImage();
this.largura = imagem.getWidth(null);
this.altura = imagem.getHeight(null);
visible = true;
}
30
public int getX() {
return x;
}
31
package aps.jogo;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;
32
private final int x_Lata_Azul = 0;
private final int x_Lata_Verde = espacamentoLatas;
private final int x_Lata_Vermelha = 2 * espacamentoLatas;
private final int x_Lata_Amarela = 3 * espacamentoLatas;
return coo;
}
public Fase() {
setFocusable(true);
setDoubleBuffered(true);
addKeyListener(new TecladoAdapter());
addMouseMotionListener(new MouseAdapters());
addMouseListener(new MouseAdapters());
33
ImageIcon referencia = new
ImageIcon(Aplicativo.class.getResource("/Imagens/Fundo.jpg"));
fundo = referencia.getImage();
ImageIcon lataB = new
ImageIcon(Aplicativo.class.getResource("/Imagens/Lata_Azul.png"));
paper = lataB.getImage();
ImageIcon lataG = new
ImageIcon(Aplicativo.class.getResource("/Imagens/Lata_Verde.png"));
glass = lataG.getImage();
ImageIcon lataR = new
ImageIcon(Aplicativo.class.getResource("/Imagens/Lata_Vermelha.png"));
metal = lataR.getImage();
ImageIcon lataY = new
ImageIcon(Aplicativo.class.getResource("/Imagens/Lata_Amarela.png"));
plastic = lataY.getImage();
emJogo = true;
inicializarObjetos();
34
int coo = coordinate();
inimigos.add(new Objeto(coo, 000));
}
});
timer.start();
}
if (emJogo) {
for (int i = 0; i < inimigos.size(); i++) {
Objeto in = inimigos.get(i);
graficos.drawImage(in.getImagem(), in.getX(), in.getY(), this);
}
graficos.drawString("Objetos: " + contador, 5, 15);
} else {
ImageIcon fimJogo = new
ImageIcon(Aplicativo.class.getResource("/Imagens/GameOver.png"));
graficos.drawImage(fimJogo.getImage(), 0, 0, null);
timer.stop();
}
g.dispose();
}
@Override
35
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < inimigos.size(); i++) {
Objeto in = inimigos.get(i);
if (in.isVisible()) {
in.mexer();
} else {
inimigos.remove(i);
}
}
encontros();
repaint();
}
switch(ide){
case 0:
if(tempObjeto.getX() >= x_Lata_Azul - 26 && tempObjeto.getX() <=
x_Lata_Azul + 175
&& tempObjeto.getY() <= height - 200 && tempObjeto.getY() >= height -
270){
contador += 1;
tempObjeto.setVisible(false);
} else{
36
if((tempObjeto.getX() >= x_Lata_Verde - 30 && tempObjeto.getX() <=
x_Lata_Verde+140||
tempObjeto.getX() >= x_Lata_Vermelha - 30 && tempObjeto.getX() <=
x_Lata_Vermelha + 140||
tempObjeto.getX() >= x_Lata_Amarela - 50 && tempObjeto.getX() <=
x_Lata_Amarela + 150)
&& tempObjeto.getY() <= height - 200 && tempObjeto.getY() >= height
- 270){
emJogo = false;
}
}
break;
case 1:
if(tempObjeto.getX() >= x_Lata_Verde - 30 && tempObjeto.getX() <=
x_Lata_Verde+140
&& tempObjeto.getY() <= height - 200 && tempObjeto.getY() >= height -
310){
contador += 1;
tempObjeto.setVisible(false);
} else {
if((tempObjeto.getX() >= x_Lata_Azul - 30 && tempObjeto.getX() <=
x_Lata_Azul + 140||
tempObjeto.getX() >= x_Lata_Vermelha -30 && tempObjeto.getX() <=
x_Lata_Vermelha + 140||
tempObjeto.getX() >= x_Lata_Amarela -30 && tempObjeto.getX() <=
x_Lata_Amarela + 150)
&& tempObjeto.getY() <= height - 200 && tempObjeto.getY() >=
height - 270){
37
emJogo = false;
}
}
break;
case 2:
if(tempObjeto.getX() >= x_Lata_Vermelha - 30 && tempObjeto.getX() <=
x_Lata_Vermelha + 140
&& tempObjeto.getY() <= height - 200 && tempObjeto.getY() >= height -
310){
contador += 1;
tempObjeto.setVisible(false);
} else {
if((tempObjeto.getX() >= x_Lata_Azul - 30 && tempObjeto.getX() <=
x_Lata_Azul + 140||
tempObjeto.getX() >= x_Lata_Verde - 30 && tempObjeto.getX() <=
x_Lata_Verde+140||
tempObjeto.getX() >= x_Lata_Amarela - 30 && tempObjeto.getX() <=
x_Lata_Amarela + 150)
&& tempObjeto.getY() <= height - 200 && tempObjeto.getY() >= height
- 270){
emJogo = false;
}
}
break;
case 3:
38
if(tempObjeto.getX() >= x_Lata_Amarela - 30 - 50 && tempObjeto.getX()
<= x_Lata_Amarela + 150
&& tempObjeto.getY() <= height - 200 && tempObjeto.getY() >= height -
300){
contador += 1;
tempObjeto.setVisible(false);
} else {
if((tempObjeto.getX() >= x_Lata_Azul - 30 && tempObjeto.getX() <=
x_Lata_Azul + 140|
tempObjeto.getX() >= x_Lata_Verde - 30 && tempObjeto.getX() <=
x_Lata_Verde+140||
tempObjeto.getX() >= x_Lata_Vermelha - 30 && tempObjeto.getX() <=
x_Lata_Vermelha + 140)
&& tempObjeto.getY() <= height - 200 && tempObjeto.getY() >= height
- 270){
emJogo = false;
}
}
break;
default:
}
}
}
@Override
public void keyPressed(KeyEvent e) {
39
if (e.getKeyCode() == KeyEvent.VK_ENTER && !emJogo) {
emJogo = true;
inicializarObjetos();
}
}
}
@Override
public void mouseDragged(MouseEvent e){
for(int i = 0; i < inimigos.size(); i++){
if(e.getX() < inimigos.get(i).getX() + 80 && e.getX() > inimigos.get(i).getX() -
80
&& e.getY() < inimigos.get(i).getY() + 80 && e.getY() >
inimigos.get(i).getY() - 80){
inimigos.get(i).setX(e.getX() - 40);
inimigos.get(i).setY(e.getY() - 40);
}
}
}
}
}
package aps.jogo;
import java.awt.Dimension;
40
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
public Aplicativo() {
construirMenuBar();
construirFase();
configurarTela();
}
41
});
menu.add(sobre);
menu.add(new JSeparator());
menu.add(sair);
menuBar.add(menu);
setJMenuBar(menuBar);
return menuBar;
}
42
setLocationRelativeTo(null);
setVisible(true);
setTitle("Jogo APS");
}
43
6.0 PROGRAMA EM FUNCIONAMENTO
44
Fonte: print screen do jogo sendo rodado no sistema macOS Sierra.
45
Fonte: print screen do jogo sendo rodado no sistema macOS Sierra.
46
Fonte: print screen do jogo sendo rodado no sistema macOS Sierra.
BLIBLIOGRAFIA
47
DAWSON, Michael. Beginning C++ Through Game Programming. 4. ed.
Boston: Cengage Learning PTR, 2014.
SCHILDT, Herbet. Java: A begginer’s Guide. 6. ed. Nova York: McGraw-Hill
Education, 2014.
SCHILDT, Herbet. Swing: A begginer’s Guide.1. ed. McGraw-Hill Education,
2006.
JACKSON, Wallace. Beginning Java 8 Games Development. 1. ed. Apress,
2014.
SÉRGIO, Adeodado; Paulo, Fridman. A arte da reciclagem. 1. ed. Horizonte
Geográfico, 2007.
FRAGA, Simone Carvalho Levorato. Reciclagem de materiais plásticos:
Aspectos técnicos, econômicos, ambientais e sociais. 1. ed. 2014.
ORACLE. Class ArrayList<E>. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html>. Acesso em 20 de
out. 2016.
ORACLE. Class Random. Disponível em: <
https://docs.oracle.com/javase/8/docs/api/java/util/Random.html >. Acesso em 20 de
out. 2016.
ORACLE. Class JMenu. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/javax/swing/JMenu.html >. Acesso em 20 de
out. 2016.
ORACLE. Class Dimension. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/awt/Dimension.html>. Acesso em 22 de
out. 2016.
ORACLE. Class Toolkit. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/awt/Toolkit.html>. Acesso em 22 de out.
2016.
ORACLE. Class Image. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/awt/Image.html>. Acesso em 22 de out.
2016.
48
ORACLE. Interface ActionListener. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionListener.html>. Acesso
em 22 de out. 2016.
ORACLE. Class Graphics. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html>. Acesso em 22 de
out. 2016.
ORACLE. Class MouseAdapter. Disponível em: <
http://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseAdapter.html>. Acesso
em 22 de out. 2016.
ORACLE. Class KeyAdapter. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyAdapter.html>. Acesso em
22 de out. 2016.
ORACLE. Class Rectangle. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/awt/Rectangle.html>. Acesso em 22 de
out. 2016.
ORACLE. Class ActionEvent. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionEvent.html>. Acesso em
22 de out. 2016.
ORACLE. Class KeyEvent. Disponível em: <
http://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html>. Acesso em 22
de out. 2016.
ORACLE. Class MouseEvent. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseEvent.html>. Acesso
em 22 de out. 2016.
ORACLE. Interface MouseMotionListener. Disponível em: <
https://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseMotionListener.html>.
Acesso em 22 de out. 2016.
49