import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; /* * Kleines catch-me Spiel * 9.6.06 / Sö */ public class ZeichnungFrame extends JFrame implements Runnable, MouseListener { Bereich bereich; // Zeichnungsbereich Thread t; // Thread für Animation JButton b; boolean running = false; // Spiel läuft noch nicht boolean erwischt = false; // Objekt wurde noch nicht erwischt int x, y = 0; // Koordinaten des Objektes int groesse = 50; // Grösse des Objektes int zeitschritt = 1000; // Zeitschritt in Animation in ms // Zeichnung: class Bereich extends JComponent { public void paint(Graphics g) { if (!running) { g.drawString("Zum starten des Spiels Taste drücken!", 10, 100); } else { if (!erwischt) { g.fillRect(x, y, groesse, groesse); } else { g.drawString("Bravo!", 10, 100); } } } } // Reaktionen auf Tastenklick: class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { running = true; b.setVisible(false); t.start(); } } ZeichnungFrame() { t = new Thread(this); // neuer Thread für Animation this.setSize(500, 500); // Grösse des Fensters // Taste erstellen: b = new JButton("Start"); this.add(b, BorderLayout.NORTH); b.addActionListener(new ButtonListener()); // Zeichnungsbereich erstellen: bereich = new Bereich(); this.add(bereich); bereich.addMouseListener(this); } // wird ausgeführt, wenn Thread gestartet ist: public void run() { while (running) { x = (int) ((Math.random() * (bereich.getWidth() - groesse))); y = (int) ((Math.random() * (bereich.getHeight() - groesse))); repaint(); try { Thread.sleep(zeitschritt); } catch (InterruptedException e) { System.out.println("Thread wurde unterbrochen"); e.printStackTrace(); } } } // Reaktion auf Mausklick in Zeichnungsbereich: public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { // War der Klick auf das Objekt? if ((e.getX() > x) & (e.getX() < (x + groesse)) & (e.getY() > y) & (e.getY() < (y + groesse))) { // wenn ja, sind wir fertig: erwischt = true; } } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }