Die Arena ist ein JPanel, welches das komplette Spielfeld
enthält.
Das Spielfeld ist ein JTable, mit dem ArenaData TableModel
welches die Funktionen des Spielfelds zur Verfügung stellt.
ArenaData ist die Erweiterung des AbstractTableModel
für die Bereitstellung der Spielfunktionen in der von
Arena erzeugten JTable.
Hier werden unter anderem die angezeigten Spielsteine in die
Tabelle eingesetzt.
Erzeugen einer Tabelle mit
festzusetzender Spaltenanzahl.
Die Überschriften TableHeader
werden nach der Anzahl der Spalten
durchnumeriert (1,...,columnCount).
Erzeugen einer Tabelle mit festgesetzten
Überschriften.
Dabei werden die Überschriften als Array von
Strings übergeben und die Anzahl der Spalten
aus der Länge des Arrays ermittelt.
Überprüft wieviele Steine diagonal von einem Ausgangselement beieinanderliegen
-- beide Richungen und beide Seiten --
Funktion gibt Anzahl der beieinanderliegenden Steine zurück
überprüft wieviele Steine gerade von einem Ausgangselement beieinanderliegen
-- vertikal und horizontal --
Funktion gibt Anzahl der beieinanderliegenden Steine zurück
überprüft wieviele Steine gerade von einem Ausgangselement beieinanderliegen
-- eine bestimmte Richtung --
Funktion gibt Anzahl der beieinanderliegenden Steine zurück
Die KI
Ein Objekt KI ist ein Computergegner mit
einstellbarer Spielstärke (>=1).
Die Spielstärke (Schwierigkeitsgrad) gibt an, bis in welche Tiefe
der Algorithmus wiederholt wird.
Hier, in der Hauptfunktion main() wird das Spiel zusammengesetzt.
Dabei wird zuerst der Splashscreen mit dem Vier Gewinnt- Bild für 3 sek angezeigt,
dann wird ein PFrame mit den Init- Werten (7,6) erzeugt und angezeigt.
Natürlich werden die Listener fürs Fenster auch mit eingebunden...
Erzeugen des Optionen-Buttons
Es wird der Button erzeugt, mit den Grafiken versehen, der
ActionListener, der bei Knopfdruck die Optionen anzeigt,
wird eingesetzt und der fertige Button wird zurückgegeben.
Erzeugen des Beenden-Buttons
Es wird der Button erzeugt, mit den Grafiken versehen, der
ActionListener, der bei Knopfdruck das Programm beendet,
wird eingesetzt und der fertige Button wird zurückgegeben.
Erzeugen des Start-Buttons
Es wird der Button erzeugt, mit den Grafiken versehen, der
ActionListener, der bei Knopfdruck das Spiel startet,
wird eingesetzt und der fertige Button wird zurückgegeben.
Beste Spalte
Die Methode maxSpalte errechnet zur aktuellen
Spielsituation den Zug, welcher das beste Ergebnis erzielt.
Der Rückgabewert setzt sich aus
dem Wert dieser Spalte (multipliziert um 100) und
der Spaltennummer (dazuaddiert) zusammen.
Bester Zug
Die Methode maxZug errechnet zur aktuellen
Spielsituation den Zug, welcher voraussichtlich,
für die Zukunft gesehen, der beste Zug sein wird.
Dazu werden rekursiv Steine gesetzt und die Ergebnisse bewertet.
Die Anzahl der gesetzten Steine ist dabei von der Schwierigkeitsstufe
abhängig.
Beim Erstellen eines neuen PButton werden dem neuen JButton
3 Icons zugeordnet.
Dann wird der ToolTip eingesetzt, weitere grafische Einstellungen werden
vorgenommen und zu guterletzt wird der Button aktiviert.
Der PComponent Adapter
ist ein Component Adapter, der verschiedene Aktionen ausführt,
wenn das entsprechende Component bewegt, in der Größe verändert,
angezeigt oder versteckt wird.
Das PFrame mit Spielfeld
Beim Erzeugen eines PFrames, erhält man
ein JFrame mit 3 Elementinhalten:
der PToolbar mit den Buttons
dem Begrüßungs-Bildschirm PGreeting
die Statusleiste
Das Fenster wird dann auf Minimalgröße "gepackt"
Ausrichtung der Toolbar geändert
Hier wird gecheckt, ob die Toolbar vertikal oder horizontal
ausgerichtet werden sollte.
Die Methode wird immer dann aufgerufen, wenn sich die Ausrichtung
der Toolbar ändert.
Das PTextField ist das Textfeld, welches die Einstellung des
Spielernamens ermöglicht.
Es stellt zur vereinfachten Identifizierung einen Bezeichner
in Form eines Integerwerts zur Verfügung
Die PToolbar ist die Toolbar, die die Steuerung des Programms
ermöglicht.
Sie stellt mehrere Buttons zur Verfügung, mit denen man unter
anderem das Spiel starten, beenden oder die Einstellungen verändern
kann.
Beim Erzeugen der Toolbar wird die Hintergrundfarbe eingestellt,
und der PropertyChangeListener, der checkt, ob die Toolbar
vertikal oder horizontal dargestellt wird, hinzugefügt.
Neue Größe der Arena festlegen
.
Dabei wird die Tabelle komplett gelöscht, eine
neue Breite angegeben und anschliessend werden
die neuen Spalten eingesetzt
Setzt eine neue Spaltenanzahl des Spielfelds fest.
dabei werden auch die Tabellenspalten neu benannt und die Tabelle
wird benachrichtigt, dass sich die Struktur geändert hat.
stellt den SplashScreen für einige Zeit auf dem Bildschirm dar.
Dabei wird das JWindow eingestellt und sichtbar gemacht, der Thread
für int millis (Zeit in Millisekunden)"eingeschläfert"
und danach das Window wieder ausgeblendet.
Im Konstruktor wird der SlashScreen zusammengestellt.
Dabei wird ein JPanel contentPane erstellt, in das die einzelnen
Elemente, wie Überschrift, Unterschrift und Bild eingehangen werden.
Anschliessend wird das contentPane gesetzt und das Fenster kann mit showFor()
sichtbar gemacht werden.
Spielfeld anzeigen
dabei wird der Optionsdialog aus dem contentPane
entfernt und das Spielfeld in das contentPane eingefügt
Anschliessend wird das contentPane aktualisiert und das Spiel gestartet
Optionsdialog anzeigen
dabei wird die GameArena aus dem contentPane
entfernt und das JPanel vom Typ SpielOptionen
in das contentPane eingefügt
Anschliessend wird das contentPane aktualisiert
ueberpruefeZugKI
Diese Methode wird für die KI benötigt, da sie erkennt,
ob eine Reihe noch erweiterbar ist oder auf dem gegebenen Platz
nicht mehr vervollständigt werden kann.
Tabellengröße aktualisieren.
Mit Hilfe dieser Methode kann man, zum Beispiel nach einer
Änderung der Spalten- oder Zeilengröße,
die Größe des umschliessenden ScrollPane
neu setzten.