Konrad-Adenauer-Gymnasium Langenfeld

Informatik Grundkurs Q1

JumpingBall Version 1

Erzeugen sie ein neues Applet JumpingBall1.

Es besteht neben einigen Variablendeklarationen lediglich aus der paint-Methode.

Deklarationen:

int X,Y;
double SinX=0.0, SinY=0.0;
double SinOffX=2*Math.PI / 180, SinOffY = 5*Math.PI / 180;

Zunächst werden mit X und Y zwei Variablen erzeugt, die die Koordinaten des Balles zum Zeichnen bestimmen. Die weiteren Variablen bestimmen die exakten Koordinaten mit Nachkommastellen zum Rechnen. Daher werden die Variablen mit dem Realtyp double deklariert.

SinX und SinY sind dabei die double-Koordinaten, die dann in X und umgewandelt werden, damit die ganzzahligen Zeichenkoordinaten zur Verfügung stehen. Startwert ist jeweils 0.0.

Die Variablen SinOffX und SinOffY gibt die Veränderungen des Arguments der Sinus-Funktion an. Hierbei wird auf die Konstante PI aus der Klasse Math zurückgegriffen, mit der der Wert der Kreiszahl Pi zur Verfügung steht.

paint-Methode:

public void paint(Graphics g)
{
X = 200 + (int)(180*Math.sin(SinX));
SinX+=SinOffX;
Y = 120 - (int)(Math.abs(120*Math.sin(SinY)));
SinY+=SinOffY;
g.fillOval(X,Y,20,20);
try
{
Thread.sleep(40);
}
catch(Exception e)
{
}
repaint();
}

Im ersten Teil wird zunächst die Position X und Y berechnet. Dabei werden zwei Methoden der Klasse Math verwendet:

double sin(double arg) liefert den Sinuswert des Arguments arg. Dabei ist arg im Bogenmaß anzugeben.

double abs(double arg) liefert den Absolutbetrag des Arguments arg.

Um aus den double-Werten dann ganzzahlige Zeichenpositionen zu machen, verwendet man das Type-Casting auf int. Mit der fillOval-Methode wird dann der Kreis für den Ball gezeichnet.

Wirklich neu ist der try-Block. Der Methodenaufruf von

Thread.sleep(int milli-sekunden)

bewirkt, dass die Ausführung des Threads (hier des Zeichnens) für die angegebene Zeit unterbrochen wird, bevor es die repaint-Methode aufruft.

Allerdings kann die sleep-Methode unterbrochen werden. Trifft eine solche Unterbrechung ein, wirft die Methode eine sog. Exception (eine Ausnahmebehandlung). Das wird zwar hier nicht gebraucht, ist aber prinzipiell so vorgesehen. Deshalb muss der Aufruf der Methode in einen try-Block, der mit einem catch-Block versehen ist; dieser bleibt aber hier leer, da wir keine besondere Behandlung benötigen. Ansonsten könnte hier z.B. die Ausgabe einer Fehlermeldung über System.out.println() sein.


© Ralph-Erich Hildebrandt, 30. Juni 2004