DemoBiljard.java [Last ned]
import static java.lang.Integer.*; /* Demo-program som både viser lengre forflytninger av * enkelt-figurer og "samtidig" forflytning av flere * figur-objekt ("biljardkuler") i mange, korte steg. * Farten på animasjonen blir lest inn fra brukeren. */ public class DemoBiljard extends EasyGraphics { public static void main(String[] args) { launch(args); } public void run() { final int ANT_ITER = 10000; // Totalt antall steg final int ANT_FIGS = 5; // Antall figurer final int BREDDE = 800; final int HØYDE = 800; // Lagrer posisjon, størrelse og retning i tabeller int[] r = new int[ANT_FIGS]; int[] x = new int[ANT_FIGS]; int[] y = new int[ANT_FIGS]; int[] dx = new int[ANT_FIGS]; int[] dy = new int[ANT_FIGS]; // Initierer tabellene for (int i=0; i<ANT_FIGS; i++) { // Tilfeldig størrelse og posisjon r[i] = (int) (Math.random()*20)+5; x[i] = (int) (Math.random()*(BREDDE-200))+100; y[i] = (int) (Math.random()*(HØYDE-200))+100; // Merk at alle forflytninger er kortere enn 4 // langs begge akser. dx[i] = (int) (Math.random()*3)+1; dy[i] = (int) (Math.random()*3)+1; } makeWindow("Biljard", BREDDE, HØYDE); // Innlesing av fart fra bruker int fart = parseInt(getText("Angi fart:")); setSpeed(fart); // Tegner biljardkulene for (int i=0; i<ANT_FIGS; i++) { int rf = (int) (Math.random()*150); int gf = (int) (Math.random()*150); setColor(rf, gf, 255); // Tilfeldig blåfarge fillCircle(x[i], y[i], r[i]); } // Flytter én og én kule fram og tilbake. // Hvis vinduet er lite nok vil deler av bevegelsen // skje utenfor vinduet. for (int k=0; k<ANT_FIGS; k++) { moveCircle(k, x[k]+200, y[k]+200); moveCircle(k, x[k], y[k]); } // Flytter alle kulene "samtidig" i små steg, // slik at de holder seg innenfor tegnevinduet. for (int step=0; step<ANT_ITER; step++) { for (int i=0; i<ANT_FIGS; i++) { if ( (x[i]+dx[i]-r[i]) <= 0 || (x[i]+dx[i]+r[i]) >= BREDDE ) dx[i] = -dx[i]; if ( (y[i]+dy[i]-r[i]) <= 0 || (y[i]+dy[i]+r[i]) >= HØYDE ) dy[i] = -dy[i]; x[i] += dx[i]; y[i] += dy[i]; moveCircle(i, x[i], y[i]); } // Eventuell innlagt venting med jevne mellomrom // if (step % 500 == 0) // getText("Trykk enter for å fortsette"); } } }
Kildekode blir vist ved hjelp av GeSHi.