Zum Inhalt springen
Der Guide für ein smartes Leben.
IT Professional: Java

init-Methode

Autor: Alexander Scheb • 18.2.2011 • ca. 2:40 Min

Inhalt
  1. Java-Tic Tac Toe mit Eclipse
  2. init-Methode

Spielplan, Feldaktionen, Menüreignisse ...

Spielplan, Feldaktionen, Menüreignisse

image.jpg
Programmier-Baukasten: Mit Eclipse entwickeln Sie das Spiel.
© PC Magazin

Die Klasse Spielplan repräsentiert den Verlauf. Diese Klasse leitet sich von der Klasse JPane ab. Innerhalb des Deklarationsbereichs legen Sie über den Befehl new JButton[9] neun Schaltflächen an. Per init-Methode bauen Sie den Spielplan auf, wobei Sie das Spielfeld per setLayout(layout) gestalten. Um im Spielplan auf Ereignisse zu reagieren, legen Sie später eine Instanz der Klasse FeldAktion an.

Innerhalb einer Schleife verschaffen Sie sich die neun Schaltflächen. Wieder wird über addActionListener(fa) die Klasse FeldAktion registriert, um auf Ereignisse der Schaltflächen reagieren zu können. Welches Ereignis von welcher Schaltfläche ausgelöst wird, bestimmt der Eintrag setActionCommand(new Integer(i).toString()). Abschließend fügt der Befehl add(jButton) dem Spielplan die Schaltflächen hinzu. Über die setButtonsEnabled-Methode aktiviert oder deaktiviert der Befehl setEnabled(b) eine Schaltfläche.

Hat der Spieler ein Feld gewählt, schaltet diese Methode die Schaltfläche inaktiv. Ein Neustart initialisiert den Spielplan neu. Dazu hebt die reset()-Methode mit setButtonsText("") die einzelnen Markierungen der Spielfelder auf. Anschließend muss das Programm die deaktivierten Schaltflächen wieder aktivieren, weil damit ein Spieler neu klicken kann.

image.jpg
Vielsprachig: Auch in dieser Sprache wurde Tic Tac Toe programmiert.
© PC Magazin

Die Klasse FeldAktion nimmt die Ereignisbehandlung für die Spielfelder vor. Die Klasse muss die Schnittstelle ActionListener implementieren. Damit die Klasse auf die Hauptfenster-Klasse zugreift, braucht sie eine Variable, wozu Sie appFrame definieren. Der Konstruktor verlangt als Übergabeparameter ein Hauptfenster-Objekt. So wird die Klasse immer mit einer Referenz auf ein Fenster-Objekt versorgt.

Nun setzen Sie die actionPerformed()-Methode um, die über getSource() ermittelt, von welcher Schaltfläche das Ereignis ausgelöst wurde. Dann setzen Sie das betreffende Feld über setEnabled(false) auf inaktiv. Der Indexwert int des ausgewählten Feldes wird innerhalb der Variable index abgelegt. Anschließend wird der aktuelle Spieler über holeAktuellenSpieler() abgerufen und die entsprechende Schaltfläche über markiereFeld() mit dem aktuellen Spielersymbol markiert.

Die Methode prüfeSpielStatus() prüft den aktuellen Status. Den Gewinner zeigt ein Dialog an. Steht der noch nicht fest, erfährt die if-Abfrage (aktuellerSpieler = Hauptfenster.Spieler.X), welcher Spieler aktuell ist. So übergeben Sie die Reihenfolge per appFrame.setzeAktuellenSpieler() an den nächsten Spieler.

Per Klasse MenüAktion reagieren Sie sodann auf Menüereignisse. Diese Klasse muss ebenso die Schnittstelle ActionListener implementieren. Damit diese Klasse auf Ereignisse der Menüs innerhalb des Hauptfensters zugreift, benötigen Sie eine Referenz auf das Hauptfenster. Deshalb wird der Konstruktor automatisch mit solch einer Referenz versehen.

Die Syntax e.getActionCommand() ermittelt, welches Ereignis ausgelöst wurde. Haben Sie den Menüeintrag Spiel starten gewählt, was die Syntax actionCommand = applicationfenster.MenuAktion.NEUESSPIEL.toString()) ermittelt, startet die Methode neuesSpiel.

Dialog zum Ende

image.jpg
Das Spiel: Mit jedem Klick füllt der Spieler die entsprechenden Felder mit einem X- oder O-Symbol.
© PC Magazin

Den Abschluss macht die Klasse EndDialog. Dieser Dialog zeigt den Gewinn eines Spielers an. Die Klasse erbt von der Klasse Dialog und implementiert die ActionListener Schnittstelle. Über new Label() erzeugen Sie eine Beschriftungskomponente, die später anzeigt, wer gewonnen hat. Der Befehl new JButton() generiert eine Schaltfläche, um den Dialog abzuschließen.

Der Konstruktor wird wieder mit einer Referenz auf das Hauptfenster versehen und initialisiert den Dialog. Die Methode setTitle() betitelt den Dialog und setModal() setzt den Dialog so, dass erst der Abschluss des Dialogs ein weiteres Arbeiten gestattet (modal). Das Layout des Dialogs gestaltet setLayout(). Die Methode holeGewinner() der Klasse Hauptfenster erfragt den Gewinner und setzt ihm einen entsprechenden Text zusammen.

Diesen geben Sie per Beschriftungskomponente mit der setText()-Methode weiter. Der Befehl addActionListener(this) registriert die Klasse, dem das Programm die einzelnen Komponenten (Label und jButton) per add()-Methode dem Dialog hinzugefügt.

Abschließend lässt die Syntax setVisible(true) den Dialog sehen. Wer will, erweitert das Spielfeld auf fünf mal fünf Felder. Besonders beliebt und nützlich ist eine Statistik, welche anzeigt, wie oft welcher Spieler gewonnen hat. Viel Spaß mit den Erweiterungen!