/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package Experimentos.Juego;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.lang.System.Logger;
import java.lang.System.Logger.Level;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
* @author Rafael Angel Montero Fernández
* Recomendado usar Canvas para los dibujos.
* Sabado 19 de febrero del 2022.
* Finalmente despues de investigar los sprites, he decidido que la mejor manera de crear un juego en java
* por el momento es usando estas bibliotecas.
*
*/
public class UnidadEstandar {
private int nivelDeSatisfaccion=0;
/**
* Permite que la unidad realice mejores acciones cuanto más alto sea su nivel de satisfaccion.
* @param nuevo_nivel_de_satisfaccion
*/
public void setNivelDeSatisfaccion(int nuevo_nivel_de_satisfaccion){ nivelDeSatisfaccion=nuevo_nivel_de_satisfaccion;
}
/**
* Permite que la unidad realice mejores acciones cuanto más alto sea su nivel de satisfaccion.
* @return
*/
public int getNivelDeSatisfaccion(){ return nivelDeSatisfaccion;
}
private int puntosDeVida=1;
/**
* Por ejemplo un edificio debe tener como minimo 2 puntos de vida.
* @param nuevos_puntos_de_vida
*/
public void setPuntosDeVida(int nuevos_puntos_de_vida){ puntosDeVida=nuevos_puntos_de_vida;
}
/**
* Por ejemplo un edificio debe tener como minimo 2 puntos de vida.
* @param nuevos_puntos_de_vida
*/
public int getPuntosDeVida(){ return puntosDeVida;
}
/**
* Son estaticas porque todas las unidades deben usar estos limites.
*/
public static int LimiteSuperior=0, LimiteInferior, LimiteIzquierdo=0, LimiteDerecho=0;
private int numeroTemp=0;
public int numeroAleatorio(int Min, int Max){ if(Min==0){ Min=-1;
}
int resultado=(int)(Math.random()*(Max-Min+1)+Min);
if(numeroTemp==resultado){ System.out.println("Mismo resultado que el anterior:" + resultado); numeroAleatorio(Min, Max);
}
numeroTemp=resultado;
return resultado;
}
private int numeroDeEdificio;
public void setNumeroDeEdficio(int nuevoNumeroDeEdificio){ numeroDeEdificio=nuevoNumeroDeEdificio;
}
public int getNumeroDeEdficio(){ return numeroDeEdificio;
}
private int velocidad=10;
public void setVelocidad(int nuevaVelocidad){ velocidad=nuevaVelocidad;
}
public int getVelocidad(){ return this.velocidad;
}
private boolean creado=false;
public void setCreado(boolean ya_fue_creado){ creado=ya_fue_creado;
// crear=false;
}
public boolean getCreado(){ return creado;
}
private boolean crear=false;
/**
* Para implementar la creacion de edificios.
* @param nueva_creacion
*/
public void setCrear(boolean nueva_creacion){ crear=nueva_creacion;
}
public boolean getCrear(){ return crear;
}
public void moverArriba(){ y-=velocidad;
if(y<=LimiteSuperior){ y=LimiteSuperior;
}
}
public void moverAbajo(){ y+=10;
if(y>=LimiteInferior){ y=LimiteInferior;
}
}
public void moverDrecha(){ x+=velocidad;
if(x>=LimiteDerecho){ x=LimiteDerecho;
}
}
public void moverIzquierda(){ x-=velocidad;
if(x<=LimiteIzquierdo){ x=LimiteIzquierdo;
}
}
public void keyPressed(java.awt.event.InputMethodEvent evt){ System.out.println("Tecla " + evt.paramString()); }
/**
* Mueve la unidad de acuerdo a las teclas de direccion.
* Para crear edificios se usa el teclado numerico y luego la tecla c.
* @param key
*/
public void keyPressed(KeyEvent key){// System.out.println((char)(key.getKeyCode())+"= " + key.getKeyCode());
if(key.getKeyCode()==KeyEvent.VK_UP){ this.moverArriba();
crear=false;
}
if(key.getKeyCode()==KeyEvent.VK_DOWN){ this.moverAbajo();
crear=false;
}
if(key.getKeyCode()==KeyEvent.VK_LEFT){ this.moverIzquierda();
crear=false;
}
if(key.getKeyCode()==KeyEvent.VK_RIGHT){ this.moverDrecha();
crear=false;
}
if(key.getKeyCode()==67){ crear=true;
// this.numeroDeEdificio=this.numeroAleatorio(1, 4);
}
if(key.getKeyCode()==49){//Tecla 1 this.numeroDeEdificio=1;
}
if(key.getKeyCode()==50){//Tecla 2 this.numeroDeEdificio=2;
}
if(key.getKeyCode()==51){//Tecla 3 this.numeroDeEdificio=3;
}
if(key.getKeyCode()==52){//Tecla 4 this.numeroDeEdificio=4;
}
if(key.getKeyCode()==53){//Tecla 5 this.numeroDeEdificio=5;
// System.out.println("Edificio enemigo 5"); }
if(Superficie_para_dibujar!=null){ Superficie_para_dibujar.repaint();
}else{ this.panel.repaint();
}
}
private boolean con_foto = false;
public int []pixeles;
private JFrame Superficie_para_dibujar=null;
private String nombreDeLaImagen="";
/**
* Direccion con nombre de la imagen, con la extencion de archivo.
* Ejemplo: /coliciones/agregar.png
* @param nuevo_nombre
*/
public void setNombreDeLaImagen(String nuevo_nombre){ nombreDeLaImagen=nuevo_nombre;
}
public String getNombreDeLaImagen(){ return this.nombreDeLaImagen;
}
public void draw(Graphics g){// super.paintComponent(g);//Esta era la palabra.
BufferedImage f=null;
try { f = ImageIO.read(UnidadEstandar.class.getResourceAsStream(getNombreDeLaImagen()));
} catch (IOException ex) { java.util.logging.Logger.getLogger(UnidadEstandar.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
if(Superficie_para_dibujar!=null){ g.drawImage(f, x, y,this.width,height, Superficie_para_dibujar);
}else{ g.drawImage(f, x, y,this.width,this.height, this.panel);
}
// f.getRGB(0, 0, 30, 20, pixeles, 1, 100);
// this.con_foto=true;
// if(x>=20){// //Dibujar otra imagen.
// }
// original x*=4;
// setX(getX());//50*4;
//
// setY(getY());
// g.drawImage(f, getX(), getY(),this);
//Asi cuando todo el algoritmo de dibujado se realiza dentro del form.
// if(aliado.intersects(enemigo)==true){// System.out.println( "Colicion");
// }
}
public UnidadEstandar []mUnidadesEnemigas=new UnidadEstandar[5];
public UnidadEstandar []mUnidadesAliadas=new UnidadEstandar[5];
private int x,y,width,height;
public Color color;
public void setX(int nuevoX){ x=nuevoX;
}
public int getX(){ return x;
}
public void setY(int nuevoY){ y=nuevoY;
}
public int getY(){ return y;
}
public void setWidth(int nuevoWidth){ this.width=nuevoWidth;
}
public int getWidth(){ return width;
}
public void setHeight(int nuevoheight){ height=nuevoheight;
}
public int getHeight(){ return height;
}
/**
* Para rectangulos o territorios
* @param nuevoX
* @param nuevoY
* @param nuevoWidth
* @param nuevoHeight
* @param form_para_dibujar
*/
public UnidadEstandar(int nuevoX, int nuevoY, int nuevoWidth, int nuevoHeight, JPanel form_para_dibujar){ this.x=nuevoX;
y=nuevoY;
this.width=nuevoWidth;
this.height=nuevoHeight;
this.panel=form_para_dibujar;
}
public UnidadEstandar(int nuevoX, int nuevoY, int nuevoWidth, int nuevoHeight){ this.x=nuevoX;
y=nuevoY;
this.width=nuevoWidth;
this.height=nuevoHeight;
}
/**
* Debe llenar esos parametros.
* @param nuevoX
* @param nuevoY
* @param nuevoWidth
* @param nuevoHeight
* @param form_para_dibujar
* @param nuevo_nombre_de_la_imagen
*/
public UnidadEstandar(int nuevoX, int nuevoY, int nuevoWidth, int nuevoHeight, JFrame form_para_dibujar,String nuevo_nombre_de_la_imagen){ this.x=nuevoX;
y=nuevoY;
this.width=nuevoWidth;
this.height=nuevoHeight;
this.Superficie_para_dibujar=form_para_dibujar;
nombreDeLaImagen=nuevo_nombre_de_la_imagen;
}
/**
* Debe llenar esos parametros.
* @param nuevoX
* @param nuevoY
* @param nuevoWidth
* @param nuevoHeight
* @param form_para_dibujar
*/
public UnidadEstandar(int nuevoX, int nuevoY, int nuevoWidth, int nuevoHeight, JPanel form_para_dibujar,String nuevo_nombre_de_la_imagen){ this.x=nuevoX;
y=nuevoY;
this.width=nuevoWidth;
this.height=nuevoHeight;
this.panel=form_para_dibujar;
this.nombreDeLaImagen=nuevo_nombre_de_la_imagen;
}
private JPanel panel=null;
/**
* Algoritmo perfecto para detectar intersecciones.
* Basado en la clase Retangle.
* @param nueva_unidad
* @return
*/
public boolean intersects(UnidadEstandar nueva_unidad) { int tw = this.width;
int th = this.height;
int rw = nueva_unidad.width;
int rh = nueva_unidad.height;
if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) { return false;
}
int tx = this.x;
int ty = this.y;
int rx = nueva_unidad.x;
int ry = nueva_unidad.y;
rw += rx;
rh += ry;
tw += tx;
th += ty;
// overflow || intersect
/**
* Todas las condiciones tienen que ser true para que suceda una colicion.
*/
return ((rw < rx || rw > tx) &&
(rh < ry || rh > ty) &&
(tw < tx || tw > rx) &&
(th < ty || th > ry));
}
/**
* Detecta el borde derecho del ambiente.
* @param width_del_ambiente
* @return
*/
public boolean detectarBordeDerecho(int width_del_ambiente){ if(width_del_ambiente<=getX()+getWidth()){// System.out.println("Estoy en el borde derecho ." + (getX()+getWidth())); return true;
}
return false;
}
/**
* Detecta el borde izquierdo del ambiente.
* @param height_del_ambiente
* @return
*/
public boolean detectarBordeInferior(int height_del_ambiente){ if(height_del_ambiente<=getY()+this.getHeight()){// System.out.println("Estoy en el borde inferior ." + (getY()+getHeight())); return true;
}
return false;
}
public boolean detectarBordeIzquierdo(){ if(this.getX()<=0){ return true;
}
return false;
}
public boolean detectarBordeSuperior(){ if(this.getY()<=0){ return true;
}
return false;
}
}
Comentarios sobre la versión: 1.0 (0)
No hay comentarios