/*
* 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