codice:
class GiocoPanel extends JPanel{
Dimension myGioco = new Dimension(0, 0);
Color myColor = new Color(22, 43, 86); //COLORE PANNELLO MYGIOCO;
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);
bersagli.get(bersagli.size()-1).setCentro(CentroRandom());
}
});
t1.start();
}
public Point2D CentroRandom(){
Point2D punto = new Point2D.Double(0,0);
switch((int)Math.round(Math.random()*8+1)){
case 1: punto = new Point2D.Double(-30,-30);
((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(1,1);
break;
case 2: punto = new Point2D.Double(0,30+NRandom());
((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(1,0);
break;
case 3: punto = new Point2D.Double(30+NRandom(),0);
((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(0,1);
break;
case 4: punto = new Point2D.Double(530,530);
((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(-1,-1);
break;
case 5: punto = new Point2D.Double(520,0);
((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(-1,1);
break;
case 6: punto = new Point2D.Double(-15,430);
((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(1,-1);
break;
case 7: punto = new Point2D.Double(30+NRandom(),485);
((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(0,-1);
break;
case 8: punto = new Point2D.Double(530,30+NRandom());
((Bersaglio)bersagli.get(bersagli.size()-1)).setDirection(-1,0);
break;
}
return punto;
}
public int NRandom(){
int nrand = (int)(Math.round((Math.random())*300+1));
return nrand;
}
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(22,43,86));
}
public void disegna(Graphics2D g2){
for(int i=0; i<bersagli.size(); i++){
((Bersaglio)bersagli.get(i)).disegna(g2);
}
}
}
class DatiPanel extends JPanel{
private JLabel StageLabel, ObiettiviLabel, PuntiLabel;
private int myStage, myObiettivi, myPunti;
public int getStage() { return myStage; }
public int getObiettivi() { return myObiettivi; }
public int getPunti() { return myPunti; }
public void setStage(int value) { myStage = value; }
public void setObiettivi(int value) { myObiettivi = value; }
public void setPunti(int value) { myPunti = value; }
public DatiPanel(){
int Stage=1; int Obiettivi=0; int Punti=0;
StageLabel = new JLabel("Stage:\t"+myStage);
ObiettiviLabel = new JLabel("Obiettivi:\t"+myObiettivi);
PuntiLabel = new JLabel("Punti:\t"+myPunti);
add(StageLabel);
add(ObiettiviLabel);
add(PuntiLabel);
}
}
}
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); //Colore circonferenza rossa
cBersaglioBianco = new Color(255,255,255); //Colore circonferenza bianca
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); // 1° circonferenza
figura.fill(cerchio1);
figura.setColor(cBersaglioBianco); // 2° circonferenza
figura.fill(cerchio2);
figura.setColor(cBersaglioRosso); // 3° circonferenza
figura.fill(cerchio3);
figura.setColor(cBersaglioBianco); // 4° circonferenza
figura.fill(cerchio4);
figura.setColor(cBersaglioRosso); // 5° circonferenza
figura.fill(cerchio5);
}
public void setSpeed(double s) {speed = s; }
public double getSpeed() { return speed; }
public void setCentro(double x, double y) { centro = new Point2D.Double(x,y); }
public Point2D getCentro() { return centro; }
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;
}
}