Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package controlador;
- import Auxiliares.Canon;
- import Auxiliares.Casilla;
- import Auxiliares.ContenedorFinal;
- import Vistas.*;
- import Vistas.VistaCanon;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.FlowLayout;
- import java.awt.*;
- 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.awt.geom.AffineTransform;
- import java.awt.geom.Line2D;
- import java.awt.image.AffineTransformOp;
- import java.awt.image.BufferedImage;
- import java.io.IOException;
- import java.text.DecimalFormat;
- import java.util.ArrayList;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.imageio.ImageIO;
- import javax.swing.*;
- import javax.swing.plaf.basic.BasicProgressBarUI;
- /**
- *
- * @author ignacioaranguren
- */
- public class Controlador extends JFrame {
- private JPanel contenedorFinal;
- private JProgressBar barra;
- private ActionListener ac;
- private Timer t;
- private int puntuacion = 0;
- private DecimalFormat timeFormatter;
- private JLabel etiquetaFin;
- private JButton finalizar;
- private Graphics2D offGraphics;
- private Image offImage;
- private Modelo modelo;
- private VistaCanon vistaCanon;
- private VistaBala vistaBala;
- private VistaCasillas vistaCasillas;
- private VistaCorazon vistaCorazon;
- private VistaHaCaidoAgua vistaHaCaidoAgua;
- private VistaSegundero vistaSegundero;
- private VistaPuntuacion vistaPuntuacion;
- public Controlador() {
- setLayout(null);
- modelo = new Modelo();
- vistaCanon = new VistaCanon(modelo);
- modelo.addObserver(vistaCanon);
- modelo.initComponents();
- timeFormatter = new DecimalFormat("00");
- etiquetaFin = new JLabel("Juego finalizado");
- etiquetaFin.setFont(new Font("Arial", Font.PLAIN, 35));
- etiquetaFin.setBounds(250, 330, 300, 100);
- etiquetaFin.setVisible(false);
- finalizar = new JButton("Menu principal");
- finalizar.setBounds(300, 410, 150, 30);
- finalizar.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- System.exit(0);
- }
- });
- finalizar.setVisible(false);
- contenedorFinal = new ContenedorFinal();
- contenedorFinal.setBackground(Color.red);
- contenedorFinal.setVisible(false);
- contenedorFinal.setBounds(0, 0, 940, 900);
- barra = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100);
- barra.setBounds(450, 730, 200, 40);
- barra.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));
- barra.setUI(new BasicProgressBarUI() {
- @Override
- protected void paintDeterminate(Graphics g, JComponent c) {
- Graphics2D g2d = (Graphics2D) g;
- int ancho = barra.getWidth();
- int alto = barra.getHeight();
- int espacioAncho = ancho;
- int espacioAlto = alto;
- barra.setPreferredSize(new Dimension(200, 40));
- double porcentajeProgres = barra.getPercentComplete();
- espacioAncho = (int) (espacioAncho * porcentajeProgres);
- if (porcentajeProgres <= 0.25) {
- g2d.setColor(Color.GREEN);
- } else if (porcentajeProgres > 0.25 && porcentajeProgres <= 0.5) {
- g2d.setColor(Color.yellow);
- } else if (porcentajeProgres > 0.5 && porcentajeProgres <= 0.75) {
- g2d.setColor(Color.orange);
- } else {
- g2d.setColor(Color.red);
- }
- Rectangle rec1 = new Rectangle(0, 0, espacioAncho, espacioAlto);
- g2d.fill(rec1);
- }
- });
- ac = new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- modelo.BarraProgreso();
- }
- };
- modelo.setBarra(barra);
- modelo.setBotonFinalizar(finalizar);
- modelo.setContenedorFinal(contenedorFinal);
- modelo.setEtiquetaFin(etiquetaFin);
- modelo.setTimerFormater(timeFormatter);
- t = new Timer(35, ac);
- t.start();
- addKeyListener(new KeyAdapter() {
- @Override
- public void keyPressed(KeyEvent evento) {
- switch (evento.getKeyCode()) {
- case KeyEvent.VK_LEFT:
- modelo.anguloRotacion(1);
- break;
- case KeyEvent.VK_RIGHT:
- modelo.anguloRotacion(2);
- break;
- case KeyEvent.VK_ENTER:
- modelo.anguloRotacion(3);
- break;
- case KeyEvent.VK_ESCAPE:
- repaint();
- modelo.salirJuego(JOptionPane.showConfirmDialog(null, "¿Volver al menú principal?", "Juego", JOptionPane.YES_NO_OPTION));
- break;
- case KeyEvent.VK_H:
- JOptionPane.showMessageDialog(null, "-Pulsa las teclas izquierda y derecha para mover el cañón.n-Selecciona una "
- + "intensidad mediante la barra de fuerza:n -Rojo = Disparar fuerte.n -Amarillo = disparar medio fuerte"
- + ". n -Verde = disparar suave.n-Pulsa Enter para disparar. n-Durante el disparo puedes modificar su trayectoria mediante la teclas izquierda y derecha."
- + "n-La puntuación: n -Los cangrejos (+1). n -Los tesoros (+2). n -Las botellas de ron (-1) vidas.", "Cómo jugar", JOptionPane.QUESTION_MESSAGE);
- break;
- }
- requestFocus();
- }
- });
- addWindowListener(new java.awt.event.WindowAdapter() {
- @Override
- public void windowClosing(java.awt.event.WindowEvent evt) {
- close();
- }
- });
- setSize(940, 900);
- setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
- add(finalizar);
- add(etiquetaFin);
- setResizable(false);
- add(contenedorFinal);
- add(barra);
- setVisible(true);
- }
- @Override
- public void paint(Graphics g) {
- Graphics2D g2d = (Graphics2D) g;
- Image fondo = new ImageIcon(getClass().getResource("/imagenes/fondo.jpeg")).getImage();
- g2d.drawImage(fondo, 0, 0, null);
- g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
- RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
- g2d.setFont(new Font("Marker Felt", Font.PLAIN, 30));
- g2d.setColor(Color.white);
- g2d.drawString("Cómo jugar, Pulsa H", 710, 330);
- g2d.drawString("Pulsa ESC para salir", 710, 380);
- Image img2 = new ImageIcon(getClass().getResource("/imagenes/fondoMapa.png")).getImage();
- g2d.drawImage(img2, 30, 30, this);
- }
- private void close() {
- if (JOptionPane.showConfirmDialog(rootPane, "¿Volver al menú principal?",
- "Juego", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
- System.exit(0);
- }
- }
- }
- package controlador;
- import Auxiliares.Canon;
- import Auxiliares.Casilla;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics2D;
- import java.awt.Image;
- import java.awt.RenderingHints;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.image.BufferedImage;
- import java.io.IOException;
- import java.text.DecimalFormat;
- import java.util.ArrayList;
- import java.util.Observable;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.imageio.ImageIO;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JProgressBar;
- import javax.swing.Timer;
- /**
- *
- * @author ignacio
- */
- public class Modelo extends Observable {
- private double anguloRotacion, anguloMin, anguloMax;
- private boolean teclaPresionada, flag, flagBala, pintarCasilla, balaAgua;
- private JProgressBar barra;
- private double vX, vY, x1, x2, x1Anterior, x2Anterior, alfa, escala, i;
- private Timer animacion, timer;
- private Canon canon;
- private int progreso, x, y, puntuacion, vidas, posVidaX, contadorCasilla;
- private Casilla[][] casilla;
- private double posX[], posY[];
- private BufferedImage imgB;
- private Image img2, fondo, fondoMapa, vida, img;
- private ArrayList<Casilla> arrayCasilla;
- private JLabel etiquetaFin;
- private JButton finalizar;
- private JPanel contenedorFinal;
- private byte seconds;
- private short minutes;
- private DecimalFormat timeformater;
- public void setBarra(JProgressBar b){
- this.barra = b;
- }
- public void setEtiquetaFin(JLabel f){
- this.etiquetaFin = f;
- }
- public void setTimerFormater(DecimalFormat d){
- timeformater = d;
- }
- public void setContenedorFinal(JPanel p){
- contenedorFinal = p;
- }
- public void setBotonFinalizar(JButton b){
- this.finalizar = b;
- }
- public void initComponents(){
- seconds = 00;
- minutes = 03;
- timer = new Timer(1000, new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- if (seconds == 0 && minutes == 0) {
- timer.stop();
- etiquetaFin.setVisible(true);
- finalizar.setVisible(true);
- contenedorFinal.setVisible(true);
- } else if (seconds > 0) {
- seconds--;
- setChanged();
- notifyObservers();
- } else if (minutes > 0) {
- minutes--;
- seconds = 59;
- setChanged();
- notifyObservers();
- }
- }
- });
- timer.start();
- posX = new double[]{30, 79, 128.0, 177.0, 226.0, 275.0, 324.0, 373.0, 422.0, 471.0, 520.0, 569.0, 618};
- posY = new double[]{30, 83.0, 136.0, 189.0, 242.0, 295.0, 348.0, 401.0, 454.0, 507.0, 560.0, 613.0, 613};
- casilla = new Casilla[13][13];
- inicializarCasillas();
- anguloRotacion = Math.PI / 2;
- vidas = 3;
- anguloMax = 0.81986726449;
- anguloMin = anguloMax = 2.32172538679;
- teclaPresionada = false;
- flag = false;
- flagBala = false;
- pintarCasilla = false;
- balaAgua = false;
- i = 0;
- progreso = 0;
- this.canon = canon = new Canon();
- this.barra = barra;
- arrayCasilla = new ArrayList<>();
- llenarCasillas();
- }
- public void cargarImagenes() {
- try {
- img2 = new ImageIcon(getClass().getResource("/imagenes/fondoMapa.png")).getImage();
- fondo = new ImageIcon(getClass().getResource("/imagenes/fondo.jpeg")).getImage();
- vida = new ImageIcon(getClass().getResource("/imagenes/vida.png")).getImage();
- img = new ImageIcon(getClass().getResource("/imagenes/BalaCanon.png")).getImage();
- imgB = ImageIO.read(getClass().getResource("/imagenes/canon.png"));
- } catch (IOException ex) {
- Logger.getLogger(Modelo.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- public void anguloRotacion(int direccion) {
- switch (direccion) {
- case 1:
- if (anguloRotacion > anguloMin && anguloRotacion < anguloMax) {
- anguloRotacion = anguloRotacion + 0.05;
- } else {
- anguloRotacion = anguloRotacion - 0.05;
- }
- setChanged();
- notifyObservers();
- break;
- case 2:
- if (anguloRotacion > anguloMin && anguloRotacion < anguloMax) {
- anguloRotacion = anguloRotacion - 0.05;
- } else {
- anguloRotacion = anguloRotacion + 0.05;
- }
- setChanged();
- notifyObservers();
- break;
- default:
- break;
- }
- }
- }
- package Vistas;
- import controlador.Modelo;
- import java.awt.Canvas;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.geom.AffineTransform;
- import java.awt.image.AffineTransformOp;
- import java.util.Observable;
- import java.util.Observer;
- public class VistaCanon extends Canvas implements Observer {
- private Modelo m;
- public VistaCanon(Modelo m) {
- this.m = m;
- }
- @Override
- public void paint(Graphics g) {
- super.paint(g);
- Graphics2D g2d = (Graphics2D) g;
- g2d.setColor(Color.gray);
- g2d.fillRect(30, 720, 646, 122);
- AffineTransform tx = AffineTransform.getRotateInstance(Math.PI / 2 - m.getAnguloRotacion(), m.getImB().getWidth(this) / 2, m.getImB().getHeight(this) / 2);
- AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
- tx.rotate(Math.PI / 2 - m.getAnguloRotacion());
- System.out.println(tx.toString());
- g2d.drawImage(op.filter(m.getImB(), null), 360, 740, null);
- }
- @Override
- public void update(Observable o, Object arg) {
- repaint();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement