[Corsopoc] Esempio prog. Java
cantone
cantone@copernico.uniroma2.it
Mon, 06 Jan 2003 16:49:42 +0100
--=====================_558241==_
Content-Type: text/plain; charset="us-ascii"; format=flowed
--=====================_558241==_
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: attachment; filename="Biglia.java"
import java.awt.*;
public class Biglia {
//Una biglia e' un Rectangle Java in movimento, con lati uguali (quadrato)
//Di un tale rettangolo viene colorato e visualizzato il solo ovale inscritto (cerchio).
//ATTRIBUTI
protected Rectangle locazione; //location e' una variabile di tipo (puntatore a) Rettangolo
protected double dx; // Proiezione orizzontale di spostamento unitario (PASSO.
protected double dy; //Proiezione verticale di spostamento unitario.
protected Color colore; //color e' una variabile di tipo (puntatore a) Color
//COSTRUTTORI
public Biglia (int x, int y, int r)
{
locazione = new Rectangle(x-r, y-r, 2*r, 2*r);
//UN OGGETTO Rectangle E' DEFINITO TRAMITE LE COORDINATE DEL SUO VERTICE IN ALTO A SINISTRA, LA BASE E L'ALTEZZA.
colore = Color.blue;
dx = 0;
dy = 0;
//UNA BIGLIA NASCE BLU E FERMA
}
//METODI
//ASSEGNAZIONE DI VALORE AGLI ATTRIBUTI
public void setColor (Color nuovoColore)
{ colore = nuovoColore; }
public void setMotion (double ndx, double ndy)
{ dx = ndx; dy = ndy; }
//ACCESSO AGLI ATTRIBUTI
public int raggio ()
{ return locazione.width / 2; }
public int x () //ASCISSA DEL CENTRO
{ return locazione.x + raggio(); }
public int y () //ORDINATA DEL CENTRO
{ return locazione.y + raggio(); }
public double xMotion ()
{ return dx; }
public double yMotion ()
{ return dy; }
public Rectangle region () { return locazione; }
// MODIFICATORI DI ATTRIBUTI
public void moveTo (int x, int y) //(RI)POSIZIONA LA BIGLIA
{ locazione.setLocation(x, y); }
public void move () //SPOSTA LA BIGLIA DI UN PASSO
{ locazione.translate ((int) dx, (int) dy); }
public void paint (Graphics g)
{
g.setColor (colore);
g.fillOval (locazione.x, locazione.y, locazione.width, locazione.height);
}
}
--=====================_558241==_
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: attachment; filename="BigliaSpecializzata.java"
import java.awt.*;
public class BigliaSpecializzata extends Biglia {
public BigliaSpecializzata (int sx, int sy)
{
//LA BIGLIA SPECIALIZZATA NASCE CON RAGGIO 10 E IN MOTO VERSO L'ALTO CON PICCOLA INCLINAZIONE CASUALE
super(sx, sy, 10); //CHIAMA COSTRUTTORE DELLA CLASSE MADRE
private static final int deltaX = -2;
private static final int deltaY = -15;
super.setMotion (deltaX + Math.random()/4, deltaY); //super non necessario
}
//GESTIONE SEMPLIFICATA DELLA GRAVITA' DELLA BIGLIA
private double effettoDiGravita = 0.3;
public void move ()
{
dy = dy + effettoDiGravita; // Effetto di gravita'
super.move(); // trasla la biglia
}
}
--=====================_558241==_
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: attachment; filename="GiocoDiBiglie.java"
import java.awt.*;
import java.awt.event.*; //GESTIONE EVENTI
import java.util.Vector; //ARRAY DINAMICO
public class GiocoDiBiglie extends Frame {
public static final int LarghezzaCornice = 400; //COSTANTE LARGHEZZA CORNICE DI GIOCO
public static final int AltezzaCornice = 400; //COSTANTE ALTEZZA CORNICE DI GIOCO
public static final int VQLX = 40; //ASCISSA VERTICE QUADRATO DI LANCIO BIGLIE
public static final int VQLY = 40; //ORDINATA VERTICE QUADRATO DI LANCIO BIGLIE
public static final int LQL = 30; //LATO QUADRATO DI LANCIO BIGLIE
public static final int TS = 10; //TEMPO (MINIMO) DI SONNO PER PROCESSO
private Vector biglie; //BIGLIE GIOCATE
//COSTRUTTORE
public GiocoDiBiglie() {
setTitle ("KIT PER LA COSTRUZIONE DEL GIOCO DI BIGLIE");
setSize (LarghezzaCornice, AltezzaCornice);
biglie = new Vector();
addMouseListener (new AcchiappaMouse()); //E' IN ASCOLTO EVENTI DI MOUSE
}
//COSTRUZIONE DEL GIOCO E LANCIO DI BIGLIE
private class AcchiappaMouse extends MouseAdapter {
//(RI)DEFINISCE TRATTAMENTO EVENTI MouseAdapter
public void mousePressed (MouseEvent e) {
int x = e.getX(); //COORDINATE SCHERMO D'EVENTO DI MOUSE
int y = e.getY();
if ((x > LarghezzaCornice-VQLX) && (y > AltezzaCornice -VQLY)) {
//E' IN ZONA DI LANCIO
BigliaSpecializzata nuovaBiglia = new BigliaSpecializzata(e.getX(), e.getY()); //NUOVA BIGLIA
biglie.addElement (nuovaBiglia); //NUOVA BIGLIA AGGIUNTA
Thread newThread = new ProcessoBiglia (nuovaBiglia); //BIGLIA MESSA IN GIOCO COME PROCESSO
newThread.start();
}
//else {TATTARE COSTRUZIONE DEL GIOCO}
}
}
//CLASSE PROCESSO LEGGERO BIGLIA
private class ProcessoBiglia extends Thread {
private Biglia laBiglia;
//COSTRUTTORE
public ProcessoBiglia(Biglia unaBiglia) {
laBiglia = unaBiglia;
}
//(RI)ATTIVAZIONE DELLA BIGLIA. NON CHIAMARE DIRETTAMENTE MA TRAMITE DISPATCHER
public void run () {
while (laBiglia.y() < AltezzaCornice) {
laBiglia.move ();
repaint();
try {
sleep(TS);
} catch (InterruptedException e) { System.exit(0); }
}
}
}
public void paint (Graphics g) {
//DISEGNO DELLE CORNICI
g.setColor (Color.white);
g.fillRect (LarghezzaCornice-VQLX, AltezzaCornice-VQLY, LQL, LQL);
g.setColor (Color.red);
g.fillOval (LarghezzaCornice-VQLX, AltezzaCornice-VQLY, LQL, LQL);
//DISEGNO DELLE BIGLIE
for (int i = 0; i < biglie.size(); i++) {
Biglia unaBiglia = (Biglia) biglie.elementAt(i);
unaBiglia.paint(g);
}
}
public static void main (String [ ] args) {
gioco = new GiocoDiBiglie();
gioco.show();
}
}
--=====================_558241==_--