import java.awt.*; public class Opdracht14_06 extends Applet { Biljart biljart; Bal bal; Button knop; public void init() { biljart = new Biljart(0, 0, 250, 150); bal = new Bal(getGraphics(), 10, 10); knop = new Button("Teken bal..."); knop.addActionListener(new KnopHandler()); add(knop); } public void paint(Graphics g) { biljart.tekenLaken(g); } public class KnopHandler implements ActionListener { public void actionPerformed(ActionEvent e) { bal.start(); } } } class Biljart { private int x; private int y; private int width; private int height; private int startOfX = 50; private int startOfY = 50; public Biljart(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } void tekenLaken(Graphics g) { g.translate(startOfX, startOfY); g.setColor(Color.green); g.fillRect(x, y, width, height); } } class Bal extends Thread { private int x = 0; private int y = 0; private int width; private int height; /* Dit is heel dirty, ik kan deze waarden beter uit de variablene uit de klasse Biljart halen. * Wellicht de attributen width en height daar public en static maken, zodat ik ze kan inlezen * zonder een instantie van de klasse te maken... */ private int widthOfLaken = 250; private int heightOfLaken = 150; private int startOfX = 50; private int startOfY = 50; private Graphics g; public Bal(Graphics g, int width, int height) { this.g = g; this.width = width; this.height = height; } public void run() { g.translate(startOfX, startOfY); while(true) { teken(g, Color.red); slaap(10); teken(g, Color.blue); verplaats(); } } public void teken(Graphics g, Color kleur) { g.setColor(kleur); g.fillOval(x, y, width, height); } private int dx = 1; private int dy = 2; private int ondergrens = 0; private void verplaats() { /* 01: Zolang y niet heightOfLaken is dan geldt: y + dy; * 02: Zolang x niet widthOfLaken is dan geldt: x + dx; * 03: Als y gelijk is aan heightOfLaken dan geldt: y - dy; * 04: Als x gelijk is aan widthOfLaken dan geldt: x - dx; */ if ( y + dy > heightOfLaken || y + dy < ondergrens) { dy = -dy; } if ( x + dx > widthOfLaken || x + dy < ondergrens) { dx = -dx; } x += dx; y += dy; } void slaap( int millisec ) { try { Thread.sleep(millisec); } catch( InterruptedException e) { } } }