Este applet simula la creacion de una especie de insecto virtual.
Al presionar el boton "Nuevo Bicho", se genera un bicho con caracteristicas
que definen a su especie, como: forma, color, tiempo maximo de vida,
madurez reproductiva y fuerza de ataque.
import java.applet.*;
import java.awt.*;
import java.lang.*;
import java.io.*;
public class generabichos extends Applet{
Button nuevo;
int Dx;
int Dy;
//Estructura logica del bicho
int IdEspecie; //identificador de la especie
int TiempoVidaMax;//Tiempo maximo de vida del bicho
int MadurezRep; //Tiempo que debe esperar el bicho para poder reproducirse
int IngestaMax; //Cantidad maxima de alimento que puede ingerir el bicho
int Fuerza; //Fuerza de ataque del bicho
//Estructura fisica del bicho
int Npuntos; //Numero de puntos que forman el cuerpo
int []px; //puntos que forman el cuerpo
int []py;
int Npatas; //numero de patas del insecto
Color color; //color del bicho
public void init(){
Dx=300; Dy=150;
Crea(Dx,Dy);
nuevo=new Button("nuevo bicho>");
add(nuevo);
}
public void update(Graphics g){
Dibuja(g,80,30,Dx,Dy);
VerAtributos(g,150,200);
}
public void paint(Graphics g){
repaint();
}
public boolean action(Event e, Object o) {
if (e.target == nuevo){Crea(Dx,Dy);}
repaint();
return true;
}
public void Crea(int Dx, int Dy){
random(1);
TiempoVidaMax=random(10000)+50;
MadurezRep=random(TiempoVidaMax);
IngestaMax=random(1000)+10;
Fuerza=random(100);
Npuntos=random(6)+3;
Npatas=2+random(8);
color=new Color(random(255),random(255),random(255));
px=new int[Npuntos]; py=new int[Npuntos];
px[0]=(int)(0.1875*Dx); py[0]=(int)(0.5*Dy); //primer punto
px[Npuntos-1]=(int)(0.9375*Dx); py[Npuntos-1]=(int)(0.5*Dy); //ultimo punto
for(int i=1; i<Npuntos-1; i++){
px[i]=(int)((0.6875*i*Dx/Npuntos)+(0.1875*Dx));
py[i]=random(0.25*Dy)+(int)(0.3125*Dy);
}
}
public void Dibuja(Graphics g,int h,int k,int Dx,int Dy){
int i,d;
g.clearRect(h-1,k,Dx,Dy+1);
d=random(10);
//Dibujando Antenas
g.setColor(Color.black);
g.drawLine ((int)(h+(0.125*Dx)) ,(int)(k+(0.5*Dy)) , h, (int)(k+(0.375*Dy)+d)
);
g.drawLine ((int)(h+(0.125*Dx)) ,(int)(k+(0.5*Dy)) , h, (int)(k+(0.625*Dy)-d)
);
//Dibujando las patas
g.setColor(Color.black);
for(i=0; i<Npatas+1;i++){
g.drawLine ( (int)(h+(0.6875*i*Dx/Npatas)+(0.25*Dx)) , (int)(k+(0.5*Dy)) , (int)(h+(0.6875*i*Dx/Npatas)+(0.25*Dx)-(0.0625*Dx)-d)
, (int)(k+(0.25*Dy)) );
g.drawLine ( (int)(h+(0.6875*i*Dx/Npatas)+(0.25*Dx)-(0.0625*Dx)-d) , (int)(k+(0.25*Dy))
,(int)(h+(0.6875*i*Dx/Npatas)+(0.25*Dx)) , k);
g.drawLine ( (int)(h+(0.6875*i*Dx/Npatas)+(0.25*Dx)) , (int)(k+(0.5*Dy)) , (int)(h+(0.6875*i*Dx/Npatas)+(0.25*Dx)-(0.0625*Dx)-d)
, (int)(k+(0.75*Dy)) );
g.drawLine ( (int)(h+(0.6875*i*Dx/Npatas)+(0.25*Dx)-(0.0625*Dx)-d) , (int)(k+(0.75*Dy))
, (int)(h+(0.6875*i*Dx/Npatas)+(0.25*Dx)) , k+Dy);}
//Dibujando el cuerpo
double y1,y2,m,x,y,auxx,auxy;
int j,l;
for(i=0;i<Npuntos-1;i++){
y1=k+py[i]+(((0.5*Dy)-py[i])*2);
y2=k+py[i+1]+(((0.5*Dy)-py[i+1])*2);
g.drawLine( h+px[i] ,k+py[i] , h+px[i+1] , k+py[i+1] );
g.drawLine( h+px[i] ,(int)y1 , h+px[i+1] , (int)y2 );}
//Dibujando la cabeza
g.drawOval((int)(h+px[0]-(0.05*Dx)),(int)(k+py[0]-(0.05*Dx)),(int)(0.1*Dx),(int)(0.1*Dx)
);
g.setColor(color);
g.fillOval((int)(h+px[0]-(0.05*Dx)),(int)(k+py[0]-(0.05*Dx)),(int)(0.1*Dx),(int)(0.1*Dx)
);
}
public void VerAtributos(Graphics g,int h,int k){
Integer Val;
g.clearRect(h,k-10,600,100);
g.setColor(Color.black);
g.drawString("Maximo Tiempo de Vida>",h,k);
g.drawString("Madurez Reproductiva>",h,k+10);
g.drawString("Ingesta Maxima>",h,k+20);
g.drawString("Fuerza de Ataque>",h,k+30);
Val=new Integer(TiempoVidaMax); g.drawString(Val.toString(),h+150,k);
Val=new Integer(MadurezRep); g.drawString(Val.toString(),h+150,k+10);
Val=new Integer(IngestaMax); g.drawString(Val.toString(),h+150,k+20);
Val=new Integer(Fuerza); g.drawString(Val.toString(),h+150,k+30);
}
int random(double num){
int i; double aux;
if(num==0) return 0;
for(i=10; i<1000000; i+=10)if(num-i<=0){aux=(Math.random()*i) % num;
return (int)aux;}
return 0;
}
int random(int num){
int i; double aux;
if(num==0) return 0;
for(i=10; i<1000000; i+=10)if(num-i<=0){aux=(Math.random()*i) % num;
return (int)aux;}
return 0;
}
}