Kapitel 14: "Entwicklung einer größeren Anwendung"

"TeeTristPanel.java"


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;

/**
* Die GUI-Klasse TeeTristPanel erzeugt das Spielfeld und erzeugt ein
* Instanz der Klasse Spielthread, die für die Spiellogik zuständig ist.
* Dabei liest TeeTristPanel die aktuellen Spielfelddaten des
* SpielfeldThread aus und erzeugt eine visualle Darstellung der
* aktuellen Spielsituation.
*/

public class TeeTristPanel extends Panel {
private Color[] farben = { Color.RED, Color.YELLOW, Color.MAGENTA,
Color.BLUE, Color.CYAN, Color.GREEN, Color.ORANGE};
private SpielThread spiel;

/**
* Die aktuelle Pixelgröße einer Spielfigurbox wird im Konstruktor
* für die spätere Darstellung gespeichert.
*/

public int boxSize;

// Konstruktor
/**
* Der Konstruktor der Klasse.
* @param groesse Initialisiert die Größe einer Spielfigurbox
* in Pixel.
*/

public TeeTristPanel(int groesse) {
boxSize = groesse;

// Spiellogik
spiel = new SpielThread(this);

setSize(groesse*spiel.getSpielfeldBreite(), groesse*(spiel.getSpielfeldHoehe()+1));
setPreferredSize(this.getSize());
setBackground(Color.GRAY);
addKeyListener(spiel);
}

/**
* Die paint-Methode wird durch den SpielThread aufgerufen und
* visualisiert die aktuelle Spielfeldsituation.
* @param g Das Graphicsargument.
*/

public void paint(Graphics g) {
g.setColor(Color.GRAY);
g.fillRect(0, 0, boxSize*(spiel.getSpielfeldBreite()+2), boxSize);
g.setColor(Color.BLACK);
g.drawString("Punkte: "+spiel.getSpielfeldPunkte(), boxSize, boxSize-3);

if (spiel.istSpielBeendet())
g.drawString("GAME OVER!", 5*boxSize, boxSize-3);

g.drawRect(0, boxSize, boxSize*spiel.getSpielfeldBreite(), boxSize*spiel.getSpielfeldHoehe());

for (int x=0; x < spiel.getSpielfeldBreite(); x++) {
for (int y=0; y < spiel.getSpielfeldHoehe(); y++) {
if (spiel.getSpielfeldTyp(x,y) != -1)
g.setColor(farben[spiel.getSpielfeldTyp(x,y)]);
else
g.setColor(Color.GRAY);
g.fillRect(x*boxSize+1, (spiel.getSpielfeldHoehe()-y)*boxSize+1, boxSize-1, boxSize-1);
}
}
}

/**
* Durch die Überschreibung der update-Methode wird ein Flackern
* verhindert. Die überschriebene Methode hatte zuvor den Bildschirm
* vor einem erneuten paint-Aufruf gelöscht.
* Bei der Überlagerung ähnlicher Bilder ist kein Flackern mehr
* festzustellen.
* @param g Das Graphicsargument.
*/

public void update(Graphics g) {
paint(g);
}
}

Picksel Media Marco Block © 2006-2009 – ImpressumKontakt
Gestaltung und Umsetzung Tobias Losch, www.picksel-media.de