miércoles, 6 de diciembre de 2017

Programas en NetBeans

Programa  Gotas de Lluvia
Frame

package FigurasGraficas13;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.Timer;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class GotasDeLluvia extends javax.swing.JFrame implements ActionListener{
 private Random aleatorio;
    private javax.swing.Timer temporizador;
    private Timer timer;
    
   
    public GotasDeLluvia() {
        initComponents();
        
         aleatorio=new Random();
        timer = new Timer(1000,this);
        
        timer.start();
    }

  
    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new GotasDeLluvia().setVisible(true);
            }
        });
    }

                        
    private javax.swing.JTextField campoIntervalo;
    private javax.swing.JSlider deslizable;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel pane;
                    

    @Override
    public void actionPerformed(ActionEvent ae) {
       
    
    int x,y,tamaño;
    Graphics papel=pane.getGraphics();
    papel.setColor(Color.blue);
     
    x=aleatorio.nextInt(200);
    y=aleatorio.nextInt(200);
    tamaño=aleatorio.nextInt(20);
    papel.fillOval(x, y, tamaño, tamaño);
    }
    
     public void stateChanged(ActionEvent e) {
         int timeGab=deslizable.getValue();
         campoIntervalo.setText(Integer.toString(timeGab));
         temporizador.setDelay(timeGab);
         

    }
}


Consola de corrida del programa


_________________________________________________________________________________


Programa  Imagen Demo
Frame

package FigurasGraficas14;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;


public class ImagenDemo extends JFrame implements ActionListener {
private int posicionX=0, posicionY=0;
    
public ImagenDemo() {
        initComponents();
    }


    @SuppressWarnings("unchecked")
   private void botonActionPerformed(java.awt.event.ActionEvent evt) {                                      
         ImageIcon miImagen=new ImageIcon(campoArchivo.getText());
        Graphics papel=pane.getGraphics();
        miImagen.paintIcon(this,papel,posicionX,posicionY);
        posicionX=posicionX+30;
        posicionY=posicionY+30;

    }                                     
 public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ImagenDemo().setVisible(true);
            }
        });
    }
 private javax.swing.JPanel PANEL;
    private javax.swing.JButton boton;
    private javax.swing.JTextField campoArchivo;
    private javax.swing.JLabel nombre_A;
    private javax.swing.JPanel pane;
}
Consola de corrida del programa
 


_________________________________________________________________________________


Programa  Circulo Mayor
Fram

package FigurasGraficas15;

import javax.swing.JFrame;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Mayor extends JFrame implements ChangeListener {

    public Mayor() {
        initComponents();
        deslizanteRojo.addChangeListener(this);
        deslizanteAzul.addChangeListener(this);
    }

    @SuppressWarnings("unchecked")
  public static void main(String args[]) {
         Mayor demo = new Mayor();
        demo.setSize(300,300);
        demo.setVisible(true);;
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Mayor().setVisible(true);
            }
        });
    }
private javax.swing.JTextField campoTexto;
    private javax.swing.JSlider deslizanteAzul;
    private javax.swing.JSlider deslizanteRojo;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void stateChanged(ChangeEvent e) {
       Graphics papel = panel.getGraphics();
         
        int valorRojo, valorAzul;
        valorRojo = deslizanteRojo.getValue();
        valorAzul = deslizanteAzul.getValue();
        
        papel.setColor(Color.white);
        papel.fillRect(0, 0, 200, 150);
        papel.setColor(Color.red);
        papel.fillOval(10,10,valorRojo,valorRojo);
        papel.setColor(Color.blue);
        papel.fillOval(100, 10, valorAzul, valorAzul);
        
        if(valorRojo > valorAzul){
            campoTexto.setText("El rojo es mayor");
            
        }
        else {
            campoTexto.setText("El azul es mayor");
        }
    }
}

Consola de corrida del programa




_________________________________________________________________________________


Programa  Termometro
Frame

package FigurasGraficas16;

import javax.swing.JFrame;
import javax.swing.event.ChangeListener;
  import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Max extends JFrame implements ChangeListener,ActionListener {
private int max =0;

    public Max() {
        initComponents();
        deslizante.addChangeListener(this);
        botón.addActionListener(this);
    }


    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
         Max demo = new Max();
        demo.setSize(200,300);
        demo.setVisible(true);;
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Max().setVisible(true);
            }
        });
    }
 private javax.swing.JButton botón;
    private javax.swing.JTextField campoTexto;
    private javax.swing.JSlider deslizante;
    private javax.swing.JPanel jPanel1;
 @Override
    public void stateChanged(ChangeEvent e) {
int temp;
    temp=deslizante.getValue();
    if(temp>max){
        max=temp;   
    }
    mostrar(); 
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
campoTexto.setText("");
        max=0;
    }
    private void mostrar(){
    campoTexto.setText("El valor máximo es"+max );
}
}


Consola de corrida del programa


_________________________________________________________________________________


Programa  Carita Feliz/Triste
Frame

package FigurasGraficas17;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class FelizOTriste extends JFrame implements ActionListener  {

    private ImageIcon imagenFeliz, imagenTriste;
    
    public FelizOTriste() {
        initComponents();
         botónFeliz.addActionListener(this);
         botónTriste.addActionListener(this);
         
         imagenFeliz=new ImageIcon("feliz.png");
         imagenTriste=new ImageIcon("triste.png");  
          
    }
 @SuppressWarnings("unchecked")
public static void main(String args[]) {
        FelizOTriste demo=new FelizOTriste();
         demo.setSize(350,350);
         demo.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FelizOTriste().setVisible(true);
            }
        });
    }
private javax.swing.JButton botónFeliz;
    private javax.swing.JButton botónTriste;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
 @Override
    public void actionPerformed(ActionEvent event) {
        Graphics papel=panel.getGraphics();
         Object origen=event.getSource();
         if (origen==botónFeliz){
             imagenFeliz.paintIcon(this,papel,0,0);            
         }
         else{
             imagenTriste.paintIcon(this,papel,0,0);
             
         }
    
    }
}
Consola de corrida del programa




_________________________________________________________________________________


Programa Cajas
Frame

package FigurasGraficas18;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


public class Cajas extends JFrame implements ChangeListener {


    public Cajas() {
        initComponents();
       deslizante.addChangeListener(this);
       
    }

    @SuppressWarnings("unchecked")
public static void main(String args[]) {
        Cajas demo=new Cajas();
        demo.setSize(250,150);
        demo.setVisible(true);
  java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Cajas().setVisible(true);
            }
        });
    }
    private javax.swing.JSlider deslizante;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
 @Override
    public void stateChanged(ChangeEvent e) {
        Graphics papel=panel.getGraphics();
        int X, NúmeroDeCajas,Contador;
        NúmeroDeCajas=deslizante.getValue();
        papel.setColor(Color.WHITE);
        papel.fillRect(0,0,180,50);
        X=10;
        Contador=1;
        papel.setColor(Color.black);
        while(Contador<=NúmeroDeCajas){
            papel.drawRect(X, 10, 10, 10);
            X=X+15;
            Contador++;
            
        }
    }

   
}
Consola de corrida del programa


_________________________________________________________________________________


Programa  Estrellas
Frame

package FigurasGraficas19;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;


public class Estrellas extends JFrame implements ActionListener  {
private Random aleatorio;
    
    public Estrellas() {
        initComponents();
        aleatorio=new Random();
        botónDibujar.addActionListener(this);
    }


    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
 java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Estrellas().setVisible(true);
            }
        });
    }
 private javax.swing.JButton botónDibujar;
    private javax.swing.JPanel panel;
        
       @Override
    public void actionPerformed(ActionEvent event) {
        Graphics papel=panel.getGraphics();
        papel.setColor(Color.black);
        papel.fillRect(0, 0, 200, 200);
        papel.setColor(Color.white);
        for(int contador=0;contador<20;contador++){
            int x,y,radio;
            x=aleatorio.nextInt(200);
            y=aleatorio.nextInt(200);
            radio=5;
            papel.fillOval(x, y, radio, radio);
        }
    
    }

Consola de corrida del programa


_________________________________________________________________________________


Programa Caminata Aleatoria
Frame

package FigurasGraficas20;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;


public class CaminataAleatoria extends JFrame implements ActionListener  {
private Random aleatorio;

    public CaminataAleatoria() {
        initComponents();
        aleatorio=new Random();
        botónDibujar.addActionListener(this);
    }


    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CaminataAleatoria().setVisible(true);
            }
        });
    }
 private javax.swing.JButton botónDibujar;
    private javax.swing.JTextField campoTexto;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void actionPerformed(ActionEvent event) {
    Graphics papel=panel.getGraphics();
    int X,Y,pasosX,pasosY,nuevaX,nuevaY,pasos;
    papel.setColor(Color.white);
    int anchuraPapel;
    int alturaPapel;
    papel.fillRect(0,0,216,184);
    X=216/2;
    Y=184/2;
    for(pasos=0;
            X<216&&X>0
            &&
            Y<184&&Y>0;
            pasos++){
        pasosX=aleatorio.nextInt(100)-50;
        pasosY=aleatorio.nextInt(100)-50;
        
        nuevaX=X+pasosX;
        nuevaY=Y+pasosY;
        
        papel.setColor(Color.black);
        papel.drawLine(X,Y,nuevaX,nuevaY);
        
        X=nuevaX;
        Y=nuevaY;
                
    }
    campoTexto.setText("Le tomó "+pasos+" pasos");
    }
}


Consola de corrida del programa


_________________________________________________________________________________


Programa Apartamentos
Frame

package FigurasGraficas21;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


public class BloqueDeApartamentos extends JFrame implements ChangeListener{

    public BloqueDeApartamentos() {
        initComponents();
        deslizante1.addChangeListener(this);
        deslizante2.addChangeListener(this);
    }

    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
         BloqueDeApartamentos demo=new BloqueDeApartamentos();
        demo.setSize(500,350);
        demo.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new BloqueDeApartamentos().setVisible(true);
            }
        });
    }
    private javax.swing.JSlider deslizante1;
    private javax.swing.JSlider deslizante2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void stateChanged(ChangeEvent e) {
         Graphics papel=panel.getGraphics();
        int pisos,apartamentos;
        int X,Y;
        Y=10;
        papel.setColor(Color.green);
        papel.fillRect(0,0,200,200);
        
        apartamentos=deslizante1.getValue();
        pisos=deslizante2.getValue();
        for(int piso=0;piso<=pisos;piso++){
            X=10;
            for (int contador=0;contador<=apartamentos;contador++){
                papel.setColor(Color.BLACK);
                papel.drawRect(X,Y,10,5);
                X=X+15;
            }
            Y=Y+15;
        }
    }
}

Consola de corrida del programa




_________________________________________________________________________________


Programa  Escalera
Frame

package FigurasGraficas22;

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;



public class Escalera extends JFrame implements ActionListener   {


    public Escalera() {
        initComponents();
        botónDibujar.addActionListener(this);
    }


    @SuppressWarnings("unchecked")
private void botónDibujarActionPerformed(java.awt.event.ActionEvent evt) {                                             
       
         Graphics papel=pane.getGraphics();

        papel.drawRect(20,20,20,20);
        papel.drawRect(20,50,20,20);
        papel.drawRect(20,80,20,20);
        papel.drawRect(20,110,20,20);
        papel.drawRect(20,140,20,20);
        
        papel.drawRect(50,50,20,20);
        papel.drawRect(50,80,20,20);
        papel.drawRect(50,110,20,20);
        papel.drawRect(50,140,20,20);
        
        papel.drawRect(80,80,20,20);
        papel.drawRect(80,110,20,20);
        papel.drawRect(80,140,20,20);
        
        papel.drawRect(110,110,20,20);
        papel.drawRect(110,140,20,20);
        
        papel.drawRect(140,140,20,20);
    }                                            
 public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Escalera().setVisible(true);
            }
        });
    }
 private javax.swing.JButton botónDibujar;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel pane;
  @Override
    public void actionPerformed(ActionEvent event) {
    
      Graphics papel=pane.getGraphics();
         Object origen=event.getSource();
         if (origen==botónDibujar){
      
         }
    }
}
Consola de corrida del programa


_________________________________________________________________________________


Programa Globo


Clase
package FigurasGraficas23;

import java.awt.Color;
import java.awt.Graphics;




class Globo {
    private int X=50;
    private int Y=50;
    private int diámetro=20;
    
    public void moverDerecha(int pasosX ){
        X=X+pasosX;
        
    }
    
    public void cambiarTamaño(int cambio ){
        diámetro=diámetro+cambio;
    }
    public void mostrar (Graphics papel){
        papel.setColor(Color.black);
        papel.drawOval(X,Y,diámetro,diámetro);
    }
}

Frame

package FigurasGraficas23;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class UsarGlobo extends JFrame implements ActionListener {

private Globo globo;

    public UsarGlobo() {
        initComponents();
        botónMover.addActionListener(this);
        botónCrecer.addActionListener(this);
        globo=new Globo();
    }


    @SuppressWarnings("unchecked")
  public static void main(String args[]) {
        UsarGlobo demo=new UsarGlobo();
        demo.setSize(200,200);
        demo.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UsarGlobo().setVisible(true);
            }
        });
    }
    private javax.swing.JButton botónCrecer;
    private javax.swing.JButton botónMover;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void actionPerformed(ActionEvent event) {
    Graphics papel=panel.getGraphics();
    if(event.getSource()==botónMover){
        globo.moverDerecha(20);
    }
    else{
        globo.cambiarTamaño(20);
        
    }
    papel.setColor(Color.white);
    papel.fillRect(0, 0, 350, 350);
    globo.mostrar(papel);
    }
}

Consola de corrida del programa


_________________________________________________________________________________


Programa Grafico
Frame

package FigurasGraficas24;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Gráfico extends JFrame implements ChangeListener{

 int a,b,c,d;
 private int altura=200,anchura=200;

    public Gráfico() {
        initComponents();
        aDeslizante.addChangeListener(this);
        bDeslizante.addChangeListener(this);
        cDeslizante.addChangeListener(this);
        dDeslizante.addChangeListener(this);
        
    }

    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
        Gráfico frame=new Gráfico();
        frame.setSize(320,350);
        frame.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Gráfico().setVisible(true);
            }
        });
    }
    private javax.swing.JSlider aDeslizante;
    private javax.swing.JTextField aTexto;
    private javax.swing.JSlider bDeslizante;
    private javax.swing.JTextField bTexto;
    private javax.swing.JSlider cDeslizante;
    private javax.swing.JTextField cTexto;
    private javax.swing.JSlider dDeslizante;
    private javax.swing.JTextField dTexto;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void stateChanged(ChangeEvent e) {
    a=aDeslizante.getValue();
    b=bDeslizante.getValue();
    c=cDeslizante.getValue();
    d=dDeslizante.getValue();
    
    aTexto.setText("a="+Integer.toString(a));
    bTexto.setText("b="+Integer.toString(b));
    cTexto.setText("c="+Integer.toString(c));
    dTexto.setText("d="+Integer.toString(d));
    dibujar();
    }
    private void dibujar(){
        Graphics papel=panel.getGraphics();
        papel.setColor(Color.white);
        papel.fillRect(0, 0, anchura, altura);
        double x,y,siguienteX,siguienteY;
        int pixelX,pixelY,siguientePixelX,siguientePixelY;
        papel.setColor(Color.black);
        for (pixelX=0;pixelX<=anchura;pixelX++){
            x=escalarX(pixelX);
            y=laFunción(x);
            pixelY=escalarY(y);
            siguientePixelX=pixelX+1;
            siguienteX=escalarX(siguientePixelX);
            siguienteY=laFunción(siguienteX);
            siguientePixelY=escalarY(siguienteY);
            papel.drawLine(pixelX, pixelY, siguientePixelX, siguientePixelY);
            
            
        }
    }
    private double laFunción(double x){
        return a*x*x*x+b*x*x+c*x+d;       
    }
    private double escalarX(int pixelX){
        double xInicial=-5,xFinal=5;
        double xEscalar=anchura/(xFinal-xInicial);
        return (pixelX-(anchura/2))/xEscalar;       
    }
    private int escalarY(double y){
        double yInicial=-5,yFinal=5;
        int coordPixel;
        double yEscala=altura/(yFinal-yInicial);
        coordPixel=(int) (-y*yEscala)+(int)(altura/2);
        return coordPixel;     
    }
}

Consola de corrida del programa


_________________________________________________________________________________


Programa Globo
Clase
package FigurasGraficas25;
import java.awt.*;


public class Globo {
 
      private int x;
    private int y;
    private int diámetro;
 
      public Globo(int xInicial,int yInicial,int diámetroInicial){
    x=xInicial;
    y=yInicial;
    diámetro=diámetroInicial;
 
    }
       public void cambiarTamaño(int cambio ){
        diámetro=diámetro+cambio;
    }
    public void mostrar (Graphics papel){
        papel.setColor(Color.black);
        papel.drawOval(x,y,diámetro,diámetro);
    }
               
}

Frame

package FigurasGraficas25;

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;


public class UsarGlobo extends JFrame implements ActionListener {
 
     private Globo[] fiesta = new Globo[10];

    public UsarGlobo() {
        initComponents();
        botónDibujar.addActionListener(this);
     
        fiesta[0] = new Globo(10, 10, 50);
        fiesta[1] = new Globo(50, 50, 100);
        fiesta[2] = new Globo(100, 100, 200);
    }
 @Override
    public void actionPerformed(ActionEvent event) {
        Graphics papel = panel.getGraphics();
        if(event.getSource() == botónDibujar) {
            fiesta[0].mostrar(papel);
            fiesta[1].mostrar(papel);
            fiesta[2].mostrar(papel);
        }
    }
    
    private void mostrarGlobos(Graphics papel) {
        for (int g = 0; g <= 2; g++) {
            fiesta[g].mostrar(papel);
        }  
    }
    
    private void cambiarTamaño() {
        for (int g = 0; g <= 2; g++) {
            fiesta[g].cambiarTamaño(20);
        }  
    }
public static void main(String args[]) {
        UsarGlobo demo=new UsarGlobo();
        demo.setSize(200,200);
        demo.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UsarGlobo().setVisible(true);
            }
        });
    }
 private javax.swing.JButton botónDibujar;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
}
Consola de corrida del programa


_________________________________________________________________________________


Programa Globo
Clase
package FigurasGraficas26;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;


public class Globo {
    private int x=10;
    private int y=10;
    private int radio=20;
    private int intervaloY=20;   

public void moverArriba(){
    y=y-intervaloY;
}
public void moverAbajo(){
    y=y+intervaloY;
}

public void mostrar(JPanel panel){
    Graphics papel=panel.getGraphics();
    papel.setColor(Color.white);
    papel.fillRect(0, 0, 550, 550);
    papel.setColor(Color.black);
    papel.drawOval(x, y, radio*2, radio*2);   
}
public int getRadio(){
    return radio;
}
public void setRadio(int nuevoRadio){
    radio=nuevoRadio;
   }
}

Frame

package FigurasGraficas26;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class UsarGlobo extends JFrame implements ChangeListener,ActionListener {
private Globo globo;

    public UsarGlobo() {
        initComponents();
        
        botónArriba.addActionListener(this);
        botónAbajo.addActionListener(this);
        deslizable.addChangeListener(this);
        globo=new Globo();
    }

    @SuppressWarnings("unchecked")
 public static void main(String args[]) {
        UsarGlobo demo=new UsarGlobo();
        demo.setSize(500,500);
        demo.setVisible(true);
java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UsarGlobo().setVisible(true);
            }
        });
    }
    private javax.swing.JButton botónAbajo;
    private javax.swing.JButton botónArriba;
    private javax.swing.JTextField campoTexto;
    private javax.swing.JSlider deslizable;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel panel;
@Override
    public void actionPerformed(ActionEvent event) {
       if(event.getSource()==botónArriba){
           globo.moverArriba();
       }
       else{
           globo.moverAbajo();
       }
       dibujar();
    }
    public void stateChanged (ChangeEvent event){
        int radio=deslizable.getValue();
        campoTexto.setText("Radio ="+radio);
        globo.setRadio(radio);
        dibujar();
    }
    private void dibujar(){
        globo.mostrar(panel);
    }
}


Consola de corrida del programa

_________________________________________________________________________________


Programa Animación


Clase Spaceinvader


package Juego;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class SpaceInvaders extends JFrame implements KeyListener{

    //Constantes del Juego
    private final int TAMAÑO_NAVE = 50;
    private final int VELOCIDAD_JUGADOR = 3;
    private final ImageIcon Jugador = new ImageIcon("src\\Recursos\\Jugador.gif");
    private final ImageIcon Bala = new ImageIcon("src\\Recursos\\Bala.gif");
    
    //Variables para el movimiento del usuario
    private boolean Arriba = false;
    private boolean Abajo = false;
    private boolean Derecha = false;
    private boolean Izquierda = false;
    
    //Variable para pintar las balas
    private Bala ReferenciaBala;
    
    //Crea el motor del juego
    private MotorJuego Juego = new MotorJuego();
    
    //Variable que controla el juego
    private boolean GameOver = false;
    private boolean Pause = false;
    
    //Doble buffer
    private BufferStrategy DobleBuffer;
    
    
    public SpaceInvaders(){
        super(" S P A C E   I N V A D E R S");
        this.setSize(800,600);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);
        addKeyListener(this);
        createBufferStrategy(2);
        DobleBuffer = getBufferStrategy();
        requestFocus();
    }
    
    public void Jugar(){
        Juego.setNivel(1);
        Juego.setTamañoImagen(TAMAÑO_NAVE);
        BuclePrincipal();
    }
    
    @Override
    public void keyPressed(KeyEvent e) {
        switch(e.getKeyCode()){
            case 37:{       //Izquierda
                Izquierda = true;
                break;
            }
            case 38:{       //Arriba
                Arriba = true;
                break;
            }
            case 39:{       //Derecha
                Derecha = true;
                break;
            }
            case 40:{       //Abajo
                Abajo = true;
                break;
            }
        }
    }
    
    @Override
    public void keyReleased(KeyEvent e) {
        switch(e.getKeyCode()){
            
            case 37:{       //Izquierda
                Izquierda = false;
                break;
            }
            case 38:{       //Arriba
                Arriba = false;
                break;
            }
            case 39:{       //Derecha
                Derecha = false;
                break;
            }
            case 40:{       //Abajo
                Abajo = false;
                break;
            }
            case 65:{       //Letra A
                Juego.NuevaBala();
                break;
            }
        }
    }    
    
    @Override
    public void keyTyped(KeyEvent e) {}
    
    
    
    /*
     * Pinta cada uno de los componentes del juego
     */
    
    private void BuclePrincipal(){
        while(!GameOver){
            ActualizarJuego();
            PintarJuego();
            try{
                Thread.sleep(20);
            }
            catch(Exception Error){System.out.println("ERROR INTERNO DEL JUEGO");}
        }
    }
    
    private void ActualizarJuego(){
        PosicionarJugador();
        Juego.Jugar();
    }
    
    public void PosicionarJugador(){
        if(Izquierda){Juego.setJugadorPosicionX(Juego.getJugadorPosicionX() - VELOCIDAD_JUGADOR);}
        if(Derecha){Juego.setJugadorPosicionX(Juego.getJugadorPosicionX() + VELOCIDAD_JUGADOR);}
        if(Arriba){Juego.setJugadorPosicionY(Juego.getJugadorPosicionY() - VELOCIDAD_JUGADOR);}
        if(Abajo){Juego.setJugadorPosicionY(Juego.getJugadorPosicionY() + VELOCIDAD_JUGADOR);}
    }
    
    private void PintarJuego(){
        //Pinta el Jugador
        paint(getGraphics());
    }
   
    
    @Override
    public void paint(Graphics g){
        g = DobleBuffer.getDrawGraphics();
        g.setColor(this.getBackground());
        g.fillRect(0, 0, getWidth(), getHeight());
        
        //Pinta el Jugador
        g.drawImage(Jugador.getImage(), Juego.getJugadorPosicionX(), Juego.getJugadorPosicionY(), this);
        
        //Pinta las balas
        for(int i = 0; i < Juego.getNumeroBalas(); i++){
            ReferenciaBala = Juego.getBala(i);
            g.drawImage(Bala.getImage(), ReferenciaBala.getX(), ReferenciaBala.getY(), this);
        }
        
        //Pinta las naves
        for(int i = 0; i < Juego.NAVES_X; i++){
            for(int j = 0; j < Juego.NAVES_Y; j++){
                g.drawImage(Juego.getNave(i, j), 10 + i*TAMAÑO_NAVE, 30 + j*TAMAÑO_NAVE, this);
            }
        }
        
        DobleBuffer.show();
        
        
    }
}

Clase Nave


package Juego;

import java.awt.Image;
import javax.swing.ImageIcon;

public class Nave {
    private ImageIcon Imagen = null;
    private int Resistencia = 0;
    
    public Nave(int TipoEnemigo){
        Imagen = new ImageIcon("src\\Recursos\\Nave" + TipoEnemigo + ".gif");
        switch(TipoEnemigo){
            case 0:{
                Resistencia = 1;
                break;
            }
            case 1:{
                Resistencia = 2;
                break;
            }
            case 2:{
                Resistencia = 3;
                break;
            }
            case 3:{
                Resistencia = 4;
                break;
            }
        }
    }
    
    public Image getImagen(){
        return Imagen.getImage();
    }
    
    public boolean DisminuirResistencia(){   //Devuelve true si su resistencia ha llegado a 0
        Resistencia--;
        if(Resistencia == 0){
            return true;
        }
        else{
            return false;
        }
    }
}

Clase MotorJuego


package Juego;

import java.awt.Image;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Random;

public class MotorJuego {

    private Random NumeroAleatorio = new Random();
    private final int MAXIMA_POSICION_JUGADOR_X = 750;
    private final int MAXIMA_POSICION_JUGADOR_Y = 550;
    public final int NAVES_X = 15;
    public final int NAVES_Y = 5;
    private int JugadorPosicionX = MAXIMA_POSICION_JUGADOR_X / 2;
    private int JugadorPosicionY = MAXIMA_POSICION_JUGADOR_Y;
    private int VelocidadJuego = 0;
    private int TamañoImagen = 50;
    //Variables para el control de las balas
    private ArrayList<Bala> Balas = new ArrayList();
    private int NumeroBalas = 0;
    //Variable para el control de los enemigos
    private Nave[][] MatrizNaves = new Nave[NAVES_Y][NAVES_X];
    private int PulsosBucle = 0;
    private int Pulsos = 0;
    private int CantidadEnemigos = 0;
    //Variables para la deteccion de colisiones
    private Rectangle Imagen1 = new Rectangle();    //Para las naves alienigenas
    private Rectangle Imagen2 = new Rectangle();    //Para las balas del usuario

    public void NuevaBala() {
        Balas.add(new Bala(JugadorPosicionX + 25, JugadorPosicionY));
        NumeroBalas++;
    }

    public MotorJuego() {
        //Establece el tamaño de las balas del jugador
        Imagen2.height = 17;
        Imagen2.width = 7;

        //Establece el tamaño de las naves
        Imagen1.height = 50;
        Imagen1.width = 50;
    }

    public int getNumeroBalas() {
        return NumeroBalas;
    }

    public Bala getBala(int Indice) {
        return Balas.get(Indice);
    }

    public void setTamañoImagen(int Tamaño) {
        this.TamañoImagen = Tamaño;
    }

    public void EstablecerNivel(int Nivel) {
        this.VelocidadJuego = Nivel * 10;
    }

    public int getJugadorPosicionX() {
        return JugadorPosicionX;
    }

    public int getJugadorPosicionY() {
        return JugadorPosicionY;
    }

    public Image getNave(int X, int Y) {
        if (MatrizNaves[Y][X] == null) {
            return null;
        } else {
            return MatrizNaves[Y][X].getImagen();
        }
    }

    public void setJugadorPosicionX(int X) {
        if (X >= 0 && X < MAXIMA_POSICION_JUGADOR_X) {
            this.JugadorPosicionX = X;
        }
    }

    public void setJugadorPosicionY(int Y) {
        if (Y >= 25 && Y < MAXIMA_POSICION_JUGADOR_Y) {
            this.JugadorPosicionY = Y;
        }
    }

    /**
     * ************************************************************
     * Acá genera enemigos aleatorios y crea posiciones aleatorias*
     * ************************************************************
     */
    private int FuncionPulsos(int X) {
        return -10 * X + 60;
    }

    public void setNivel(int Nivel) {
        this.Pulsos = FuncionPulsos(Nivel);
    }

    private void GenerarEnemigo() {
        int X = NumeroAleatorio.nextInt(NAVES_X);
        int Y = NumeroAleatorio.nextInt(NAVES_Y);
        int TipoNave = NumeroAleatorio.nextInt(4);

        //Verifica que esa posición no exista
        while (MatrizNaves[Y][X] != null) {
            X = NumeroAleatorio.nextInt(NAVES_X);
            Y = NumeroAleatorio.nextInt(NAVES_Y);
        }

        MatrizNaves[Y][X] = new Nave(TipoNave);
        CantidadEnemigos++;
    }

    private void DetectarColisiones() {
        //Detecta colisiones entre las balas y los aliens
        for (int i = 0; i < NAVES_X; i++) {
            for (int j = 0; j < NAVES_Y; j++) {
                //Obtiene la posición de la nave alien
                if (MatrizNaves[j][i] != null) {
                    Imagen1.x = 10 + i * TamañoImagen;
                    Imagen1.y = 10 + j * TamañoImagen;

                    //La compara con las posiciones de las balas
                    for (int k = 0; k < Balas.size(); k++) {
                        Imagen2.x = Balas.get(k).getX();
                        Imagen2.y = Balas.get(k).getY();

                        if (Imagen1.intersects(Imagen2)) {
                            if (MatrizNaves[j][i].DisminuirResistencia()) {
                                MatrizNaves[j][i] = null;
                            }
                            Balas.remove(k);
                            NumeroBalas--;
                            break;
                        }
                    }
                }
            }
        }
    }

    public void Jugar() {

        //Mueve un poco las balas
        for (int i = 0; i < NumeroBalas; i++) {
            if (Balas.get(i).MoverBala()) {
                Balas.remove(i);
                NumeroBalas--;
            }
        }

        //Si el tiempo es el correcto crea un nuevo enemigo en una posición aleatoria
        PulsosBucle++;
        if (PulsosBucle == Pulsos) {
            PulsosBucle = 0;
            if (CantidadEnemigos != NAVES_X * NAVES_Y) {
                GenerarEnemigo();
            }
        }

        //Verifica las colisiones
        DetectarColisiones();
    }
}

Clase Bala


package Juego;

public class Bala {

    private final int VELOCIDAD_BALA = 5;
    
    private int PosicionX = 0;
    private int PosicionY = 0;

    public Bala(int PosicionX, int PosicionY) {
        this.PosicionX = PosicionX;
        this.PosicionY = PosicionY;
    }

    public boolean MoverBala(){
        PosicionY = PosicionY - VELOCIDAD_BALA;
        if(PosicionY <= 0){
            return true;
        }
        else
        {
            return false;
        }
    }
    
    public int getX() {
        return PosicionX;
    }

    public int getY() {
        return PosicionY;
    }

    public void setX(int X) {
        this.PosicionX = X;
    }

    public void setY(int Y) {
        this.PosicionY = Y;
    }
}




Frame

package Juego;
import Juego.SpaceInvaders;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;


public class Principal {
 
    private ImageIcon ImagenMenu = new ImageIcon("src\\Recursos\\Menu.jpg");
    private JFrame Ventana = null;
 
    public Principal(){
        CrearInterfaz();
    }
 
    private void CrearInterfaz(){
     
        //Crea el Frame
        Ventana = new JFrame("Space Invaders -- Menú Principal");
        Ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Ventana.setVisible(true);
        Ventana.setSize(603,447);
        Ventana.setResizable(false);
        Ventana.setLayout(null);
     
        //Añade fondo al frame
        JLabel Fondo = new JLabel(ImagenMenu);
        Fondo.setBounds(0,0,597,418);
        Fondo.setVisible(true);
     
        //Añade los botones
        JButton btnNuevoJuego = new JButton("Nuevo Juego");
        JButton btnEstadisticas = new JButton("Estadisticas");
        JButton btnOpciones = new JButton("Opciones Administrativas");
     
        btnNuevoJuego.setVisible(true);
        btnEstadisticas.setVisible(true);
        btnOpciones.setVisible(true);
     
        btnNuevoJuego.setBounds(205,274,217,30);
        btnEstadisticas.setBounds(205,304,217,26);
        btnOpciones.setBounds(205,330,217,26);
     
        Ventana.add(btnNuevoJuego);
        Ventana.add(btnEstadisticas);
        Ventana.add(btnOpciones);
        Ventana.add(Fondo);
     
     
     
        //Añade ActionListeners a los botones
        btnNuevoJuego.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                NuevoJuego();
            }
        });
     
        btnEstadisticas.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                JOptionPane.showMessageDialog(Ventana, "Temporalemtne no se encuentra esta opción");
            }
        });
     
        btnOpciones.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                JOptionPane.showMessageDialog(Ventana, "Temporalmente no se encuentra esta opción");
            }
        });
    }
 
    private void NuevoJuego(){
        SpaceInvaders Juego = new SpaceInvaders();
        Juego.Jugar();
    }
 
    public static void main(String args[]){
     
        SpaceInvaders Juego = new SpaceInvaders();
        Juego.Jugar();
    }
}

Consola de corrida del programa

No hay comentarios:

Publicar un comentario