[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==_--