import java.awt.Font;
Zeichenfarbe = Color.black;
private void setWort()
{
Wort = (int)((Woerter.length)*Math.random());
Ergebnis = new StringBuffer(Woerter[Wort]);
for (int i = 0; i<Woerter[Wort].length();
i++)
Ergebnis.setCharAt(i,'_');
erraten = false;
}
Das er die Funktion "actionPerformed(ActionEvent event)" benötigt, hat ihm der Kompiler verraten, dass er darin die Aktionen des Benutzers auswerten soll und was er machen will wenn der Benutzer einen Buchstaben eingetippt hat und wenn er den Butten "Neu" drückt weiss er auch. Nur weiss er nicht wie er mitbekommt, was der Benutzer gemacht hat. Vervollständigen Sie die Funktion.
public void actionPerformed(ActionEvent event)
{
if ("Wenn der Benutzer
den Neu-Button gedrückt hat")
{
Position = 0;
setWort();
Eingabe.setText("");
dT = null;
T = null;
repaint();
}
else if ("Wenn er einen
Buchstaben eingegeben hat" && Position < 11 && !erraten)
{
if (charInWort((Eingabe.getText()).charAt(0)))
repaint();
else
paintNext();
Eingabe.setText("");
}
}
Jetzt erstellt er die Funktion "paintNext()". Da er ja die Klassen zum annimierten Zeichnen selbst geschrieben hat, kennt er sich super damit aus und schreibt sie Fehlerfrei selbst.
private void paintNext()
{
if (T != null)
{
dT.drawFast();
try
{
T.join();
}
catch (InterruptedException ex){}
}
Graphics gr = getGraphics();
int i = (Position*2);
boolean Line = true;
if (i == 10)
Line = false;
dT = new drawThread(gr,
Zeichenfarbe, Galgen[0][i], Galgen[1][i], Galgen[0][i+1], Galgen[1][i+1],Line);
T = new Thread(dT);
Position++;
nextLine = true;
repaint();
}
Die Funktion "charInWort()" schreibt er auch ganz flott. Zu prüfen, ob Ein Buchstabe in einem Wort ist, ist ja nicht schwer. Alle Gefundenen Übereinstimmungen schreibt er auch gleich ins "Ergebnis". Sollten in diesem Schritt alle "Unterstriche" ersetzt werden, wird die globale Variable "erraten" auf "wahr" gesetzt.
private boolean charInWort(char c)
{
boolean Buchstabe = false;
boolean Unterstrich = false;
for (int i = 0; i<Woerter[Wort].length();
i++)
{
if (Ergebnis.charAt(i) == '_')
{
if (Woerter[Wort].charAt(i) == c)
{
Ergebnis.setCharAt(i,c);
Buchstabe = true;
}
else
Unterstrich = true;
}
}
erraten = !Unterstrich;
return Buchstabe;
}
Die Funktion "paint()" ist da schon etwas schwieriger für ihn,wenn das Wort keine Unterstriche mehr enthält und der Galgen noch nicht komplett gezeichnet ist, hat der Benutzer das Wort erraten und er will das Wort ausgeben und ein schönes grosses "Erraten!!" auf den Zeichenbereich schreiben. Erledigen Sie das für ihn.
public void paint(Graphics g)
{
if (erraten && Position
< Galgen.length()/2)
{
...?
}
Sollte der Benutzer das Wort noch nicht erraten haben schreibt er das aktuelle Ergebnis auf den Zeichenbereich, sollte "nextLine" wahr sein, muss er am Galgen einen Strich mehr zeichnen, und alle Striche davor auffrischen da sie sonst verschwinden. Sollte der Benutzer einen richtigen Buchstaben eingegeben haben ("nextLine" ist falsch) muss er einfach nur alle Linien bis hier neu zeichnen das sie sonst ebenfalls verschwinden würden.
else if (Position < 11)
{
g.drawString((new String(Ergebnis)),10, 190);
if (nextLine)
{
T.start();
nextLine = false;
drawGalgen(g, Position-1);
}
else drawGalgen(g, Position);
}
Sollte auch das nicht zutreffen hat der Benutzer leider Verloren. Dazu will er wieder das Ergebnis auf den Zeichenbereich schreiben und richtig schön gross ein "Verloren!" dazu. Erledigen Sie auch das für ihn.
else
{
...?
}
}
Jetzt hat er jedoch schon wieder ein Problem. Er braucht ja noch die Funktion "drawGalgen(Graphics g, int Position)", die alle striche des Galgens bis zur Position "Position" auf konventionelle Weise mit den Funktionen "drawLine(int x0, int y0, int x1, int y1)" und "drawOval(int x0, int y0, int breite, int hoehe)" aus der Klasse "Graphics" zeichnet. Der Punkt (Galgen[0][10], Galgen[1][10]) ist der oberste Punkt vom Kopf und (Galgen[0][11], Galgen[1][11]) ist der unterste Punkt vom Kopf. (Galgen[1][11]-Galgen[1][10]) ist also der Durchmesser des Kreises. Schreiben Sie die Funktion "drawGalgen(Graphics g, int Position)" mit den hier genannten Mitteln.
private void drawGalgen(Graphics g, int Pos)
{
...?
}
Und nun fehlt ihm nur noch eine Funktion, die ihm auch vom Kompiler
angezeigt wird. Sie soll die Farbauswahl des Benutzers aus dem "Choice"
auswerten und die globale Variable Zeichenfarbe mit den dementsprechenden
Werten belegen. Schreiben Sie auch diese Funktion und probieren Sie das
Programm aus. Bei richtiger Programmierung sollte es fehlerfrei funktionieren.
Es sollte dann ähnlich wie dieses hier
aussehen.
Last updated: 09.01.2001
Stephan Finn