codice:
class GiocoPanel extends JPanel{
Dimension myGioco = new Dimension(750, 530);
Color myColor = new Color(9, 64, 32);
Timer t,t1;
ArrayList bersagli;
public GiocoPanel(){
setPreferredSize(myGioco);
setBackground(myColor);
Genera();
t = new Timer(20, new ActionListener(){
public void actionPerformed(ActionEvent event){
if(bersagli != null){
for(int i=0; i<bersagli.size(); i++){
((Bersaglio)(bersagli.get(i))).move();
}
}
repaint();
}
});
t.start();
}
public void Genera(){
bersagli = new ArrayList();
t1 = new Timer(1200, new ActionListener(){
public void actionPerformed(ActionEvent event){
bersagli.add(new Bersaglio(0,0));
((Bersaglio)bersagli.get(bersagli.size()-1)).setSpeed(2);
((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(1,1);
}
});
t1.start();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
if(bersagli==null)
bersagli = new ArrayList();
else
disegna(g2);
g2.setColor(new Color(9,64,32));
}
public void disegna(Graphics2D g2){
for(int i=0; i<bersagli.size(); i++){
((Bersaglio)bersagli.get(i)).disegna(g2);
}
}
}
}
class Bersaglio{
Ellipse2D.Double cerchio1, cerchio2, cerchio3, cerchio4, cerchio5;
double raggio;
double G = 30;
Point2D centro;
Color cBersaglioRosso, cBersaglioBianco;
Vector2 direzione;
double speed;
public Bersaglio(double x, double y){
centro = new Point2D.Double(x, y);
cBersaglioRosso = new Color(210, 0 ,5);
cBersaglioBianco = new Color(255,255,255);
direzione = new Vector2(0,0);
speed = 0;
raggio = G;
cerchio1 = new Ellipse2D.Double(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
raggio = (4*G)/5;
cerchio2 = new Ellipse2D.Double(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
raggio = (3*G)/5;
cerchio3 = new Ellipse2D.Double(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
raggio = (2*G)/5;
cerchio4 = new Ellipse2D.Double(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
raggio = G/5;
cerchio5 = new Ellipse2D.Double(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
}
public void disegna(Graphics2D figura){
figura.setColor(cBersaglioRosso);
figura.fill(cerchio1);
figura.setColor(cBersaglioBianco);
figura.fill(cerchio2);
figura.setColor(cBersaglioRosso);
figura.fill(cerchio3);
figura.setColor(cBersaglioBianco);
figura.fill(cerchio4);
figura.setColor(cBersaglioRosso);
figura.fill(cerchio5);
}
public void setSpeed(double s) {speed = s; }
public double getSpeed() { return speed; }
public void setDirection(Vector2 v) {direzione = v; }
public void setDirection(double dx, double dy) { direzione = new Vector2(dx,dy); direzione.normalize(); }
public Vector2 getDirection() { return direzione; }
public void move(){
double raggio = G;
centro = new Point2D.Double(centro.getX()+(direzione.getX()*speed), centro.getY()+(direzione.getY()*speed) );
cerchio1.setFrame( centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
raggio = (4*G)/5;
cerchio2.setFrame(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
raggio = (3*G)/5;
cerchio3.setFrame(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
raggio = (2*G)/5;
cerchio4.setFrame(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
raggio = G/5;
cerchio5.setFrame(centro.getX()-raggio, centro.getY()-raggio, raggio*2, raggio*2);
}
public void directTo(Point2D p){
direzione = new Vector2( p.getX() - centro.getX(), p.getY() - centro.getY() );
direzione.normalize();
}
}
class Vector2{
private double x,y;
public Vector2(double a, double b){
x = a;
y = b;
}
public double getX() {return x; }
public void setX(double a) { x = a; }
public double getY() {return y; }
public void setY(double b) { y = b; }
public double length(){
return (Math.sqrt(Math.pow(x,2)+Math.pow(y,2)));
}
public void normalize(){
double l = length();
x = x/l;
y = y/l;
}
}