import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class Programm5HA extends Applet implements ActionListener, MouseListener {
  Button[] Knoepfe;
  Button Start;
  Label Anzeige;
  int zaehler,knopfnummer,mausklicks;
  long zeit;
  
  public Programm5HA() {
    setLayout(new BorderLayout());
    knopfnummer=(int)(Math.random()*100);

    // Den oberen Bereich mit einem Knopf und einem Label
    Panel Bereich1 = new Panel();
    add(BorderLayout.NORTH,Bereich1);
    Start = new Button("Start");
    Start.addActionListener(this);
    Bereich1.add(Start);
    Anzeige = new Label ("Mach dich bereit für den Reaktionstest!");
    Bereich1.add(Anzeige);

    // Den unteren Bereich mit size*size Knöpfen
    int size=10;
    Panel Bereich2 = new Panel();
    add(BorderLayout.CENTER,Bereich2);
    Knoepfe = new Button[size*size];
    Bereich2.setLayout(new GridLayout(size,size,3,3));
    Bereich2.setBackground(Color.red);
    Bereich2.addMouseListener(this);
    for(int i=0;i<size*size;i++) {
      Knoepfe[i] = new Button(i+1+"");
      Bereich2.add(Knoepfe[i]);
      Knoepfe[i].addActionListener(this);
      Knoepfe[i].setVisible(false);
    }
  }

  public void warte() {
    try { Thread.sleep(1000); }
    catch(InterruptedException e) {}
  }

  public void los() {
    resize(getWidth()-1,getHeight());
    Anzeige.setText("Los gehts: 3");
    warte();
    Anzeige.setText("Los gehts: 3, 2");
    warte();
    Anzeige.setText("Los gehts: 3, 2, 1");
    warte();
    Anzeige.setText("LOS!!!");
    zaehler=0;
    mausklicks=0;
    Start.setVisible(false);
    zeit=(new Date()).getTime();
    weiter();
  }

  public void weiter() {
    Knoepfe[knopfnummer].setVisible(false);
    if((zaehler++)==10) {
      zeit=(long)((new Date()).getTime()-zeit)/10;
      Start.setVisible(true);
      Anzeige.setText("Du hast "+zeit+"ms pro Knopf und "+mausklicks+" Fehlklicks gebraucht");
      resize(getWidth()+1,getHeight());
      return;
    }
    knopfnummer=(int)(Math.random()*100);
    Knoepfe[knopfnummer].setVisible(true);
  }

  public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("Start"))
      los();
    else
      weiter();
  }
  
  public void mouseClicked(MouseEvent e) { mausklicks--; }
  public void mouseEntered(MouseEvent e) {}
  public void mouseExited(MouseEvent e) {}
  public void mousePressed(MouseEvent e) { mausklicks++; }
  public void mouseReleased(MouseEvent e) { mausklicks++; }
}

