Prévia do material em texto
UNIVERSIDADE PAULISTA
CURSO: CIÊNCIA DA COMPUTAÇÃ
APS – ATIVIDADES PRÁTICAS SUPERVISIONADAS
VANESSA SANTOS DA SILVA
RA:D74HJG-1
DESENVOLVIMENTO DE UM JOGO COM UTILIZAÇÃO DE INTERFACE GRÁFICA
MANAUS/AM
2019
VANESSA SANTOS DA SILVA
RA:D74HJG-1
DESENVOLVIMENTO DE UM JOGO COM UTILIZAÇÃO DE INTERFACE GRÁFICA
Trabalho de Atividades Práticas Supervisionadas para obtenção de nota para conclusão do semestre no curso de Ciência da Computação apresentado a Universidade Paulista – UNIP.
Orientador: Prof. André Alves
MANAUS/AM
2019
Sumário
1.Introdução..................................................................................................................4
2.Objetivo e Motivação do Trabalho............................................................................................5
2.1 Importância dos jogos.......................................................................................5
A importância da Educação Ambiental............................................................6
3. Regras do Jogo..........................................................................................................................7
Regras são simples...........................................................................................7
Plano de Desenvolvimento................................................................................................7
Código-Fonte...........................................................................................................................8
Fase.java..............................................................................................................8
Classe tela .........................................................................................................13
Classe cores......................................................................................................15
Classe imagem...................................................................................................17
5. Ficha..........................................................................................................................19
1. Introdução
Partindo do proposto pela instituição, foi desenvolvido um programa em JAVA com intuito de mostrar aos jogadores a importância do meio ambiente e motiva-los a preserva-lo.
O jogo foi desenvolvido em caráter educacional e visa aumentar a percepção das pessoas aos problemas que são causados pelos moradores de grandes cidades pela negligência e que não possuem muitas informações para ter soluções desses problemas.
Nós desenvolvedores do jogo optamos por querer a responsabilidade de trazer a mudança no pensamento das pessoas para que compreendam a importância do meio ambiente através da inclusão digital proporcionada pelo avanço da tecnologia.
Uma informação técnica, o software foi desenvolvido em linguagem em JAVA, conforme pedido pela instituição.
2. Objetivo e Motivação do Trabalho
2.1 Importância dos jogos
Jogos são atividades estruturadas, praticadas com fins recreativos e em alguns casos fazem parte de instrumentos educacionais, onde são usados jogos para passar uma mensagem aos jogadores (vencedores e perdedores).
São distintos do trabalho que visa remuneração e da arte que está associado à expressão de ideias. Esta separação é sempre precisa, porém, há jogos praticados por remuneração e outros associados à expressão de ideias e emoções.
Jogos geralmente envolvem estimulação mental ou física e muitas vezes ambos. Muitos deles ajudam a desenvolver habilidades práticas, servem como uma forma de exercícios ou realizam um papel educativo, simulação ou psicológica.
Jogos são disputados contra adversários, o que os diferencia de competições, o adversário pode ser outro jogador ou uma simulação que interage com o jogador (no caso de jogos digitais).
Porque voltado para o meio ambiente?
Os surgimentos de centros de educação ambiental e encontros regionais e nacionais foram importantes para aproximar discussões mundiais a respeito dos fundamentos de uma comprometida Educação Ambiental.
A ECO-92 reforça as ideias da Conferência de Tbilisi e propõe a capacitação de educadores e a mobilização social acerca da problemática ambiental.
A maior contribuição na Educação foi com a reforma curricular no ensino fundamental prevista nos Parâmetros Curriculares Nacionais (PCNs), no que estabelece a Educação Ambiental com um tema transversal que preza pela interdisciplinaridade.
2.2 A importância da Educação Ambiental
A educação ambiental é fundamental para que as pessoas se tornem mais conscientes sobre a sustentabilidade e a importância de construir um futuro mais limpo para as próximas gerações. A adoção de práticas ecologicamente corretas e o incentivo ao uso moderado dos recursos naturais são algumas das medidas básicas propostas pela educação ambiental.
No Brasil, a educação ambiental é lei desde 1999. Várias escolas tem o dever de ensinar a educação da preservação, incentivar a reciclagem e conscientizar sobre a importância de recursos naturais de maneira equilibrada.
3 Regras do Jogo
3.1 Regras são simples.
Sendo elas:
1. você morre se quando inimigo atirar!
2. você morre se não atira no inimigo!
3. você só possui uma vida por partida.
4. faça pontos o máximo que você conseguir!
4 Plano de Desenvolvimento
Nós desenvolvedores do jogo optamos por querer a responsabilidade de trazer a mudança no pensamento das pessoas para que compreendam a importância do meio ambiente através da inclusão digital proporcionada pelo avanço da tecnologia.
A educação ambiental é fundamental para que as pessoas se tornem mais conscientes sobre a sustentabilidade e a importância de construir um futuro mais limpo para as próximas gerações. A adoção de práticas ecologicamente corretas e o incentivo ao uso moderado dos recursos naturais são algumas das medidas básicas propostas pela educação ambiental.
5 Código-Fonte
5.1 Fase.java
Responsável pelo Gráfico sendo a classe principal de um jogo, sendo ela que gerencia a parte gráfica e mapeia comandos de controles e eventos.
Import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Fase extends JPanel implements ActionListener {
/**
* Serial gerado automaticamente apenas para efeito de serialização
*/
private static final long serialVersionUID = -5079021684583630134L;
private Image fundo;
private Nave nave;
private Timer timer;
private List<Inimigo> inimigos;
private boolean emJogo;
private int[][] coordenadas = { { 2380, 29 }, { 2600, 59 }, { 1380, 89 },
{ 780, 109 }, { 580, 139 }, { 880, 239 }, { 790, 259 },
{ 760, 50 }, { 790, 150 }, { 1980, 209 }, { 560, 45 }, { 510, 70 },
{ 930, 159 }, { 590, 80 }, { 530, 60 }, { 940, 59 }, { 990, 30 },
{ 920, 200 }, { 900, 259 }, { 660, 50 } };
public Fase() {
setFocusable(true);
setDoubleBuffered(true);
addKeyListener(new TecladoAdapter());
ImageIcon referencia = new ImageIcon(Main.class.getResource("/res/fundo.png"));
fundo = referencia.getImage();
nave = new Nave();
emJogo = true;
inicializarInimigos();
timer = new Timer(5, this);
timer.start();
}public void inicializarInimigos() {
inimigos = new ArrayList<>();
for (int i = 0; i < coordenadas.length; i++) {
inimigos.add(new Inimigo(coordenadas[i][0], coordenadas[i][1]));
}
}
public void paint(Graphics g) {
Graphics2D graficos = (Graphics2D) g;
graficos.drawImage(fundo, 0, 0, null);
if (emJogo) {
graficos.drawImage(nave.getImagem(), nave.getX(), nave.getY(), this);
List<Missel> misseis = nave.getMisseis();
for (int i = 0; i < misseis.size(); i++) {
Missel m = (Missel) misseis.get(i);
graficos.drawImage(m.getImagem(), m.getX(), m.getY(), this);
}
for (int i = 0; i < inimigos.size(); i++) {
Inimigo in = inimigos.get(i);
graficos.drawImage(in.getImagem(), in.getX(), in.getY(), this);
}
graficos.setColor(Color.white);
graficos.drawString("Inimigos: " + inimigos.size(), 5, 15);
} else {
ImageIcon fimJogo = new ImageIcon(Main.class.getResource("/res/game_over.jpg"));
graficos.drawImage(fimJogo.getImage(), 0, 0, null);
}
g.dispose();
}
@Override
public void actionPerformed(ActionEvent e) {
if (inimigos.size() == 0) {
emJogo = false;
}
List<Missel> misseis = nave.getMisseis();
for (int i = 0; i < misseis.size(); i++) {
Missel m = (Missel) misseis.get(i);
if (m.isVisible()) {
m.mexer();
} else {
misseis.remove(i);
}
}
for (int i = 0; i < inimigos.size(); i++) {
Inimigo in = inimigos.get(i);
if (in.isVisible()) {
in.mexer();
} else {
inimigos.remove(i);
}
}
nave.mexer();
checarColisoes();
repaint();
}
public void checarColisoes() {
Rectangle formaNave = nave.getBounds();
Rectangle formaInimigo;
Rectangle formaMissel;
for (int i = 0; i < inimigos.size(); i++) {
Inimigo tempInimigo = inimigos.get(i);
formaInimigo = tempInimigo.getBounds();
if (formaNave.intersects(formaInimigo)) {
nave.setVisivel(false);
tempInimigo.setVisible(false);
emJogo = false;
}
}
List<Missel> misseis = nave.getMisseis();
for (int i = 0; i < misseis.size(); i++) {
Missel tempMissel = misseis.get(i);
formaMissel = tempMissel.getBounds();
for (int j = 0; j < inimigos.size(); j++) {
Inimigo tempInimigo = inimigos.get(j);
formaInimigo = tempInimigo.getBounds();
if (formaMissel.intersects(formaInimigo)) {
tempInimigo.setVisible(false);
tempMissel.setVisible(false);
}
}
}
}
private class TecladoAdapter extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
emJogo = true;
nave = new Nave();
inicializarInimigos();
}
nave.keyPressed(e);
}
@Override
public void keyReleased(KeyEvent e) {
nave.keyReleased(e);
}
}
}
5.2 Classe tela
Importjava.awt.Image;
import java.awt.Rectangle;
import javax.swing.ImageIcon;
public class Inimigo extends Movel {
private static final int LARGURA_TELA = 500;
private static final int VELOCIDADE = 1;
private static int contador = 0;
public Inimigo(int x, int y) {
this.x = x;
this.y = y;
ImageIcon referencia;
if (contador++ % 3 == 0) {
referencia = new ImageIcon(Main.class.getResource("/res/inimigo_2.png"));
} else {
referencia = new ImageIcon(Main.class.getResource("/res/inimigo_1.png"));
}
imagem = referencia.getImage();
this.largura = imagem.getWidth(null);
this.altura = imagem.getHeight(null);
visible = true;
}
public void mexer() {
if (this.x < 0) {
this.x = LARGURA_TELA;
} else {
this.x -= VELOCIDADE;
}
}
public Rectangle getBounds() {
return new Rectangle(x, y, largura, altura);
}
public boolean isVisible() {
return visible;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
public Image getImagem() {
return imagem;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public int getAltura() {
return altura;
}
@Override
public int getLargura() {
return largura;
}
@Override
public boolean isVisivel() {
return visible;
}
@Override
public void setVisivel(boolean visivel) {
this.visible = visivel;
}
}
5.3 Classe cores
import java.awt.Color;
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;
import javax.swing.border.LineBorder;
public class Main extends JFrame {
/**
* Serial gerado automaticamente apenas para efeito de serialização
*/
private static final long serialVersionUID = 1L;
public Main() {
construirMenuBar();
construirFase();
configurarTela();
}
public static void main(String[] args) {
new Main();
}
private JMenuBar construirMenuBar() {
JMenuBar menuBar = new JMenuBar();
menuBar.setBackground(Color.WHITE);
menuBar.setBorder(new LineBorder(Color.red));
JMenu menu = new JMenu("Opções");
JMenuItem sobre = new JMenuItem("Sobre");
sobre.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane
.showMessageDialog(
null,
"Desenvolvido por Fernando Duarte Galloro \ncontato: fernandodrt@live.com \n\nVersão 1.0 - 2012",
"Informações", JOptionPane.INFORMATION_MESSAGE);
}
});
JMenuItem sair = new JMenuItem("Sair");
sair.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
menu.add(sobre);
menu.add(new JSeparator());
menu.add(sair);
menuBar.add(menu);
setJMenuBar(menuBar);
return menuBar;
}
private JPanel construirFase() {
Fase fase = new Fase();
add(fase);
return fase;
}
private void configurarTela() {
setSize(500, 420);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
setTitle("AlienTrix");
}
}
5.4 Classe imagem
import java.awt.Image;
import java.awt.Rectangle;
public abstract class Movel {
protected int x, y;
protected int altura, largura;
protected boolean visible;
protected Image imagem;
public abstract Rectangle getBounds();
publicabstract int getX();
public abstract int getY();
public abstract int getAltura();
public abstract int getLargura();
public abstract boolean isVisivel();
public abstract void setVisivel(boolean visivel);
public abstract Image getImagem();
}