IT Professional: Java

init-Methode

Spielplan, Feldaktionen, Menüreignisse

image.jpg

© PC Magazin

Programmier-Baukasten: Mit Eclipse entwickeln Sie das Spiel.

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

© PC Magazin

Vielsprachig: Auch in dieser Sprache wurde Tic Tac Toe programmiert.

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

© PC Magazin

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

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!

Mehr zum Thema

HTML 5
Webgestaltung

Google Web Designer ist spezialisiert auf HTML5. Ein Vorteil dieses Standards ist das einfache Einbinden von Videos mit dem Element video. Wir zeigen…
Wir verraten, wie Sie Fritzboxen und andere Router vor Hackern schützen.
Fritzbox, Asus, Belkin und Co.

Fritzbox, Asus, Belkin oder DLink - die Liste der geknackten Router ist lang. Hacker stahlen Passwörter oder NAS-Daten. So machen Sie Ihren Router…
Wir führen Sie zur eigenen Windows-App - unserem PC-Magazin-RSS-Feed.
C# und XAML

Wir zeigen, wie Sie Windows 8.1 Apps selbst programmieren können. Lernen Sie das App erstellen an Hand unseres Beispiels: dem RSS-Feed von PC…
Windows Tipps & Tricks: Benutzerrechte unter Windows 8.1
Programme richtig installieren

Wir zeigen Ihnen, wie Sie sich unter Windows 8.1 alle Benutzerrechte verschaffen und Programme richtig installieren.
Windows 8: Starbildschirm
Microsoft Project Siena

Erstellen Sie sich selbst eine App für Windows 8, die auf alle Funktionen Ihres Tablets zugreifen kann, inklusive Kamera, Mikrofon und Lautsprecher.…