Diese Klasse stellt das Hauptfenster von DionaRap zur Verfuegung und enthaelt die main()-Methode. Mehr ...
Abgeleitet von javax::swing::JFrame.
Öffentliche Methoden | |
Hauptfenster (Point position, String level) | |
Konstruktor der Klasse Hauptfenster . | |
void | updateGame (GameStatus status) |
Diese Methode wird aufgerufen, um das Spiel zu aktualisieren, z.B. | |
void | showLevelEditor () |
Zeigt das LevelEditor-Fenster an. | |
void | showDescriptionWindow () |
Zeigt das Spielfiguren-Fenster an. | |
void | setArtwork (String theme) |
Stellt das neue Theme ein und veranlasst das Hauptfenster, das Spielfeld neu zu zeichnen. | |
void | setLookAndFeel (String lookAndFeel) |
Legt ein Look-And-Feel fest und aktualisiert dabei das Hauptfenster, den navigator und den helpDialog . | |
String | getCurrentLevel () |
Liefert den Namen des aktuell ausgewaehlten Levels zurueck. | |
void | startNewGame (String level) |
Startet ein neues Spiel mit dem angegeben Level. | |
void | showHelpWindow () |
Zeigt das Hilfefenster an. | |
String[] | getLevels () |
Liefert die Liste der zur Verfuegung stehenden Levels zurueck. | |
void | toggleNavigator () |
Wechselt die Sichtbarkeit des Steuerungsfensters. | |
Öffentliche, statische Methoden | |
static void | main (String[] args) |
Programmeintrittspunkt von Diona Rap. | |
Statische öffentliche Attribute | |
static final String | levelDefaultName = "default" |
Bezeichnung fuer den Standard-Level. | |
static final String | levelPrefix = "level_" |
Prefix Level-Dateinamen und Level-Auswahl-ActionCommands. | |
Geschützte Methoden | |
DionaRapController | getController () |
Stellt die get-Methode fŸr den DionaRapController zur Verfuegung. | |
DionaRapModel | getModel () |
Stellt die get-Methode fŸr den DionaRapModel zur Verfuegung. | |
Private Methoden | |
void | setupLevels () |
Initialisiert die Levelnamen-Liste levelnames . | |
void | readLevel () |
Liest den aktuellen Level, welcher in levelName steht, ein und macht ein Multi-Threaded-Spiel daraus. | |
MTConfiguration | getDefaultConfiguration () |
Liefert die Standard-Spieleinstellung zurueck. | |
String | getLevelFilename (String level) |
Bildet aus einem Levelnamen den kompletten Dateinamen samt Pfad. | |
String | getDirectory (String directory) |
Liefert das Programm-Verzeichnis, nutzt dafuer die Klassen System und File | |
JDialog | createLevelEditorWindow () |
Erstellt den Dialog fuer den LevelEditor. | |
JDialog | createDescriptionWindow () |
Erstellt den Dialog fuer die Spiel-Figuren aus dem aktuellen Icon-Themas. | |
JDialog | createHelpDialog () |
Erzeugt das Hilfefenster mit der HTML-Beschreibung des Spieles an. | |
String | getHelpDirectory () |
Liefert das Hilfe-Verzeichnis, nutzt dafuer getDirectory(String directory) | |
URL | getHelpFile () |
Gibt die Adresse vom Typ URL zu der lokalen HTML Datei mit der Spielbeschreibung zurueck. | |
Private Attribute | |
Spielfeld | spielfeld |
DionaRap-Spielfeld. | |
DionaRapModel | model |
DionaRap-Spiele-Model. | |
DionaRapController | controller |
DionaRap-Spiele-Controller. | |
JDialog | helpDialog = this.createHelpDialog() |
Das Hilfefenster vom Typ JDialog | |
Navigator | navigator = new Navigator(this) |
DionaRap-Spiele-Navigator, rechts neben dem Hauptfenster. | |
JDialog | iconDialog = createDescriptionWindow() |
Das Spielfiguren-Fenster vom Typ JDialog | |
JDialog | levelEditorDialog = createLevelEditorWindow() |
LevelEditor vom Typ JDialog | |
String | levelname |
Der Name momentan ausgewaehlten Levels. | |
Vector< String > | levelnames |
Die Liste der zur Verfuegung stehenden Levels. | |
Statische private Attribute | |
static final long | serialVersionUID = 4932458420387758006L |
Interne Versionsnummer - Serialisieren fuer Applets, Klassentausch. | |
static String | titel = "DionaRap - TM, RH" |
Spiele Titel. |
Diese Klasse stellt das Hauptfenster von DionaRap zur Verfuegung und enthaelt die main()-Methode.
Diese ist abgeleitet von der Klasse JFrame
.
Sie beinhaltet als sichtbare Komponenten die Menueleiste, das Spielfeld und das Navigtor- und das Hilfe-Fenster. Die Spielelogik wird ebenso in dieser Klasse eingebunden.
Definiert in Zeile 48 der Datei Hauptfenster.java.
dionarap::Hauptfenster::Hauptfenster | ( | Point | position, | |
String | level | |||
) | [inline] |
Konstruktor der Klasse Hauptfenster
.
Erstellt alle benoetigten Komponenten wie Menue, Spielfeld und Steuerungsfenster, und initialisiert die Spiel-Logik.
position | Postition des Hauptfensters, Angabe in Pixel | |
level | Name des Levels |
Setzt den Titel des Fensters
Verkleiner- und Vergroesserung des Fensters nicht moeglich
BorderLayout als Layout-Manager
Rueckt das Fenster an position
Zusammenpacken und Anzeigen
Definiert in Zeile 98 der Datei Hauptfenster.java.
00098 { 00099 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 00100 00102 this.setTitle(titel); 00103 00105 this.setResizable(false); 00106 00108 this.setLayout(new BorderLayout()); 00109 00111 this.setLocation(position); 00112 00113 this.levelname = level; 00114 this.addComponentListener(new ListenerFenster(this.navigator)); 00115 this.setupLevels(); 00116 this.readLevel(); 00117 00118 this.model.addModelChangedEventListener(new ListenerModel(this)); 00119 00120 this.setJMenuBar(new MenuBar(this, new ListenerMenu(this))); 00121 00122 this.spielfeld = new Spielfeld( this.model.getGrid().getGridSizeX(), this.model.getGrid().getGridSizeY() ); 00123 this.getContentPane().add(this.spielfeld);; 00124 00125 this.updateGame(GameStatus.game); 00126 00127 this.navigator.setNewGameButtonStatus(false); 00128 this.navigator.setVisible(true); 00129 00131 this.pack(); 00132 this.setVisible(true); 00133 }
JDialog dionarap::Hauptfenster::createDescriptionWindow | ( | ) | [inline, private] |
Erstellt den Dialog fuer die Spiel-Figuren aus dem aktuellen Icon-Themas.
Zur Darstellung der Icons wird die Klasse MyGraphic
verwendet.
Definiert in Zeile 355 der Datei Hauptfenster.java.
00355 { 00356 Artwork theme = Artwork.getTheme(); 00357 00358 JDialog descDialog; 00359 descDialog = new JDialog(); 00360 descDialog.setLayout(new BorderLayout()); 00361 00362 JPanel panel = new JPanel(); 00363 panel.setLayout(new GridLayout(1,3)); 00364 00365 panel.add(new PaintGraphic("Spieler", theme.getPlayerIcon(5))); 00366 panel.add(new PaintGraphic("Gegner", theme.getOpponentIcon())); 00367 panel.add(new PaintGraphic("Hindernis", theme.getObstacleIcon())); 00368 panel.setVisible(true); 00369 00370 JButton descCloseButton = new JButton("Schlie§en"); 00371 descCloseButton.setActionCommand(MenuBar.CMD_CLOSEWINDOW); 00372 descCloseButton.addActionListener(new ListenerDialog()); 00373 00374 descDialog.add(panel, BorderLayout.CENTER); 00375 descDialog.add(descCloseButton, BorderLayout.SOUTH); 00376 00377 descDialog.pack(); 00378 00379 return descDialog; 00380 }
JDialog dionarap::Hauptfenster::createHelpDialog | ( | ) | [inline, private] |
Erzeugt das Hilfefenster mit der HTML-Beschreibung des Spieles an.
Zur Darstellung der Beschreibung wird eine JScrollPane
genutzt. Die Adresse der Hilfe-Datei wird ueber getHelpFile
ermittelt. Der Dialog ist nach Erstellen noch nicht sichtbar.
Definiert in Zeile 460 der Datei Hauptfenster.java.
00460 { 00461 JDialog dlg = new JDialog(); 00462 dlg.setSize(800, 600); 00463 dlg.setTitle("Spielhilfe"); 00464 dlg.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 00465 dlg.setLayout(new BorderLayout()); 00466 00467 JEditorPane editorPane = new JEditorPane(); 00468 JScrollPane scrollPane = new JScrollPane(editorPane, 00469 JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 00470 JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 00471 00472 editorPane.setEditable(false); 00473 00474 try { 00475 editorPane.setPage(getHelpFile()); 00476 } 00477 catch (IOException e) { 00478 e.printStackTrace(); 00479 } 00480 00481 JButton helpCloseButton = new JButton("Schließen"); 00482 helpCloseButton.setActionCommand(MenuBar.CMD_CLOSEWINDOW); 00483 helpCloseButton.addActionListener(new ListenerDialog()); 00484 00485 dlg.add(scrollPane, BorderLayout.CENTER); 00486 dlg.add(helpCloseButton, BorderLayout.SOUTH); 00487 00488 return dlg; 00489 }
JDialog dionarap::Hauptfenster::createLevelEditorWindow | ( | ) | [inline, private] |
Erstellt den Dialog fuer den LevelEditor.
Dieser LevelEditor stammt aus dem vorhanden LevelEditor.jar
Definiert in Zeile 324 der Datei Hauptfenster.java.
00324 { 00325 JDialog levDialog; 00326 levDialog = new JDialog(); 00327 00328 JPanel panel = new JPanel(); 00329 panel.add(new LevelEditor(new GameSettingsModel())); 00330 panel.setVisible(true); 00331 00332 levDialog.add(panel, BorderLayout.CENTER); 00333 levDialog.pack(); 00334 00335 return levDialog; 00336 }
DionaRapController dionarap::Hauptfenster::getController | ( | ) | [inline, protected] |
Stellt die get-Methode fŸr den DionaRapController
zur Verfuegung.
DionaRapController
Definiert in Zeile 153 der Datei Hauptfenster.java.
00153 { 00154 return this.controller; 00155 }
String dionarap::Hauptfenster::getCurrentLevel | ( | ) | [inline] |
Liefert den Namen des aktuell ausgewaehlten Levels zurueck.
String
Definiert in Zeile 430 der Datei Hauptfenster.java.
00430 { 00431 return this.levelname; 00432 }
MTConfiguration dionarap::Hauptfenster::getDefaultConfiguration | ( | ) | [inline, private] |
Liefert die Standard-Spieleinstellung zurueck.
MTConfiguration
-Objekt mit Einstellungen Definiert in Zeile 247 der Datei Hauptfenster.java.
00247 { 00248 MTConfiguration mt = new MTConfiguration(); 00249 mt.setAlgorithmAStarActive(true); 00250 mt.setAvoidCollisionWithOpponent(true); 00251 mt.setAvoidCollisionWithObstacles(true); 00252 mt.setMinimumTime(800); 00253 mt.setShotGetsOwnThread(true); 00254 mt.setOpponentStartWaitTime(2000); 00255 mt.setOpponentWaitTime(2000); 00256 mt.setShotWaitTime(500); 00257 mt.setRandomOpponentWaitTime(false); 00258 mt.setDynamicOpponentWaitTime(false); 00259 00260 return mt; 00261 }
String dionarap::Hauptfenster::getDirectory | ( | String | directory | ) | [inline, private] |
Liefert das Programm-Verzeichnis, nutzt dafuer die Klassen System
und File
Definiert in Zeile 279 der Datei Hauptfenster.java.
String dionarap::Hauptfenster::getHelpDirectory | ( | ) | [inline, private] |
Liefert das Hilfe-Verzeichnis, nutzt dafuer getDirectory(String directory)
Definiert in Zeile 506 der Datei Hauptfenster.java.
00506 { 00507 return this.getDirectory("html"); 00508 }
URL dionarap::Hauptfenster::getHelpFile | ( | ) | [inline, private] |
Gibt die Adresse vom Typ URL
zu der lokalen HTML Datei mit der Spielbeschreibung zurueck.
Der Dateipfad wird in eine URL
-Adresse fuer den JEditorPane
umgewandelt.
Definiert in Zeile 518 der Datei Hauptfenster.java.
00518 { 00519 String helpFilename = this.getHelpDirectory() + "help.html"; 00520 File helpFile = new File(helpFilename); 00521 URL helpURL = null; 00522 try { 00523 helpURL = helpFile.toURI().toURL(); 00524 } 00525 catch (MalformedURLException e) { 00526 e.printStackTrace(); 00527 } 00528 return helpURL; 00529 }
String dionarap::Hauptfenster::getLevelFilename | ( | String | level | ) | [inline, private] |
Bildet aus einem Levelnamen den kompletten Dateinamen samt Pfad.
level | Level-Name als String |
String
Definiert in Zeile 269 der Datei Hauptfenster.java.
00269 { 00270 return this.getDirectory("xml") + Hauptfenster.levelPrefix + level + ".xml"; 00271 }
String [] dionarap::Hauptfenster::getLevels | ( | ) | [inline] |
Liefert die Liste der zur Verfuegung stehenden Levels zurueck.
Erstellt dabei eine Kopie der Liste um die interne Liste vor Aenderungen zu schuetzen.
String
-Array mit Level-Namen Definiert in Zeile 537 der Datei Hauptfenster.java.
00537 { 00538 String[] levelarray = new String[this.levelnames.size()]; 00539 for (int i = 0; i < levelarray.length; i++) { 00540 levelarray[i] = this.levelnames.get(i); 00541 } 00542 00543 this.getTitle(); 00544 00545 return levelarray; 00546 }
DionaRapModel dionarap::Hauptfenster::getModel | ( | ) | [inline, protected] |
Stellt die get-Methode fŸr den DionaRapModel
zur Verfuegung.
DionaRapModel
Definiert in Zeile 164 der Datei Hauptfenster.java.
00164 { 00165 return this.model; 00166 }
static void dionarap::Hauptfenster::main | ( | String[] | args | ) | [inline, static] |
Programmeintrittspunkt von Diona Rap.
Erstellt das Hauptfenster mit Standardeinstellungen.
args | Kommandozeilenparameter |
Definiert in Zeile 142 der Datei Hauptfenster.java.
00142 { 00143 new Hauptfenster(new Point(60, 60), Hauptfenster.levelDefaultName); 00144 }
void dionarap::Hauptfenster::readLevel | ( | ) | [inline, private] |
Liest den aktuellen Level, welcher in levelName
steht, ein und macht ein Multi-Threaded-Spiel daraus.
Initialisiert dabei ebenfalls das DionaRapModel
.
Wenn es sich um den Standard-Level handelt, werden die Einstellungen ueber getDefaultConfiguration
festgelegt. Ansonsten wird der Dateiname ueber LevelFilename
gebildet und die Datei ueber den LevelReader
eingelesen.
Definiert in Zeile 218 der Datei Hauptfenster.java.
00218 { 00219 if (this.levelname.equals(Hauptfenster.levelDefaultName)) { 00220 this.model = new DionaRapModel(); 00221 this.controller = new DionaRapController(this.model); 00222 this.controller.setMultiThreaded(getDefaultConfiguration()); 00223 return; 00224 } 00225 00226 System.out.println("Lade Level: " + this.levelname); 00227 this.model = new DionaRapModel(); 00228 this.controller = new DionaRapController(this.model); 00229 MTConfiguration mt = new MTConfiguration(); 00230 00231 LevelReader lr = new LevelReader(mt, model); 00232 try { 00233 lr.readLevel(this.getLevelFilename(this.levelname)); 00234 this.controller.setMultiThreaded(mt); 00235 } catch (Exception e) { 00236 System.out.println("Fehler beim Einlesen der XML-Leveldatei: " + e); 00237 } 00238 }
void dionarap::Hauptfenster::setArtwork | ( | String | theme | ) | [inline] |
Stellt das neue Theme ein und veranlasst das Hauptfenster, das Spielfeld neu zu zeichnen.
theme | Name des angeklickten Theme |
Definiert in Zeile 389 der Datei Hauptfenster.java.
00389 { 00390 Artwork.getTheme().setTheme(theme); 00391 00392 JDialog tmp = this.createDescriptionWindow(); 00393 tmp.setLocation(this.iconDialog.getLocation()); 00394 tmp.setVisible(this.iconDialog.isVisible()); 00395 this.iconDialog.dispose(); 00396 this.iconDialog = tmp; 00397 this.requestFocus(); 00398 00399 this.updateGame(GameStatus.game); 00400 }
void dionarap::Hauptfenster::setLookAndFeel | ( | String | lookAndFeel | ) | [inline] |
Legt ein Look-And-Feel fest und aktualisiert dabei das Hauptfenster, den navigator
und den helpDialog
.
lookAndFeel | Klassenname des Designs |
Definiert in Zeile 410 der Datei Hauptfenster.java.
00410 { 00411 try { 00412 UIManager.setLookAndFeel(lookAndFeel); 00413 SwingUtilities.updateComponentTreeUI(this); 00414 SwingUtilities.updateComponentTreeUI(this.navigator); 00415 SwingUtilities.updateComponentTreeUI(this.helpDialog); 00416 SwingUtilities.updateComponentTreeUI(this.iconDialog); 00417 } catch (Exception e) { 00418 System.out.println("setLookAndFeel Exception " + e); 00419 } 00420 00421 this.pack(); 00422 this.navigator.pack(); 00423 }
void dionarap::Hauptfenster::setupLevels | ( | ) | [inline, private] |
Initialisiert die Levelnamen-Liste levelnames
.
Zuerst wird das Standardlevel in die Liste eingetragen, die uebrigen Levels werden im Level-Verzeichnis gesucht, welches ueber getLevelDirectory()
ermittelt wird. Level-Dateinamen muessen zwingend mit levelPrefix
beginnen, der eigentliche Level-Name beginnt erst nach diesem Prefix.
Definiert in Zeile 176 der Datei Hauptfenster.java.
00176 { 00177 this.levelnames = new Vector<String>(); 00178 this.levelnames.add(Hauptfenster.levelDefaultName); 00179 try { 00180 File f = new File(this.getDirectory("xml")); 00181 File[] files = f.listFiles(); 00182 for (int i = 0; i < files.length; i++) { 00183 if (!files[i].isFile()) continue; 00184 if (!files[i].getName().startsWith(Hauptfenster.levelPrefix)) continue; 00185 00186 String filename = files[i].getName(); 00187 filename = filename.substring(Hauptfenster.levelPrefix.length(), filename.length() - ".xml".length()); 00188 00189 if (filename.equalsIgnoreCase(Hauptfenster.levelDefaultName)) { 00190 System.out.println("Reservierter Levelname " + filename); 00191 continue; 00192 } 00193 00194 this.levelnames.add(filename); 00195 } 00196 } catch (Exception e) { 00200 } 00201 }
void dionarap::Hauptfenster::showDescriptionWindow | ( | ) | [inline] |
Zeigt das Spielfiguren-Fenster an.
Definiert in Zeile 344 der Datei Hauptfenster.java.
00344 { 00345 this.iconDialog.setVisible(true); 00346 }
void dionarap::Hauptfenster::showHelpWindow | ( | ) | [inline] |
Zeigt das Hilfefenster an.
Definiert in Zeile 496 der Datei Hauptfenster.java.
00496 { 00497 this.helpDialog.setVisible(true); 00498 }
void dionarap::Hauptfenster::showLevelEditor | ( | ) | [inline] |
Zeigt das LevelEditor-Fenster an.
Definiert in Zeile 314 der Datei Hauptfenster.java.
00314 { 00315 this.levelEditorDialog.setVisible(true); 00316 }
void dionarap::Hauptfenster::startNewGame | ( | String | level | ) | [inline] |
Startet ein neues Spiel mit dem angegeben Level.
Dabei werden die aktuellen Fenster und die Spiellogik zerstoert und ein neues Hauptfenster an alter Stelle neu erstellt.
level | Level-Name, mit dem das neue Spiel begonnen werden soll |
Definiert in Zeile 441 der Datei Hauptfenster.java.
00441 { 00442 Point location = this.getLocation(); 00443 00444 this.model.clear(); 00445 00446 this.navigator.dispose(); 00447 this.iconDialog.dispose(); 00448 this.dispose(); 00449 00450 new Hauptfenster(location, level); 00451 }
void dionarap::Hauptfenster::toggleNavigator | ( | ) | [inline] |
Wechselt die Sichtbarkeit des Steuerungsfensters.
War es sichtbar, wird es versteckt, war es beim Aufruf unsichtbar, wird es angezeigt.
Definiert in Zeile 554 der Datei Hauptfenster.java.
void dionarap::Hauptfenster::updateGame | ( | GameStatus | status | ) | [inline] |
Diese Methode wird aufgerufen, um das Spiel zu aktualisieren, z.B.
um das Spielfeld neu zu zeichnen. Dabei werden alle Icons neu gezeichnet, der Punktestand aktualisiert, und der "Neues Spiel"-Button gegebenenfalls aktiviert
status | Information ueber die Aenderungen |
Definiert in Zeile 294 der Datei Hauptfenster.java.
00294 { 00295 if ((this.model == null) || (this.spielfeld == null)) return; 00296 00297 this.navigator.setPoints(this.model.getScore()); 00298 this.spielfeld.cleanupSpielfeld(); 00299 if (status != GameStatus.game) { 00300 this.navigator.setNewGameButtonStatus(true); 00301 } 00302 this.spielfeld.updateStatus(status); 00303 AbstractPawn[] pawns = this.model.getAllPawns(); 00304 for (int i = 0; i < pawns.length; i++) { 00305 this.spielfeld.setPawn(pawns[i]); 00306 } 00307 }
DionaRapController dionarap::Hauptfenster::controller [private] |
DionaRap-Spiele-Controller.
Definiert in Zeile 63 der Datei Hauptfenster.java.
JDialog dionarap::Hauptfenster::helpDialog = this.createHelpDialog() [private] |
Das Hilfefenster vom Typ JDialog
Definiert in Zeile 66 der Datei Hauptfenster.java.
JDialog dionarap::Hauptfenster::iconDialog = createDescriptionWindow() [private] |
Das Spielfiguren-Fenster vom Typ JDialog
Definiert in Zeile 72 der Datei Hauptfenster.java.
final String dionarap::Hauptfenster::levelDefaultName = "default" [static] |
Bezeichnung fuer den Standard-Level.
Definiert in Zeile 84 der Datei Hauptfenster.java.
JDialog dionarap::Hauptfenster::levelEditorDialog = createLevelEditorWindow() [private] |
LevelEditor vom Typ JDialog
Definiert in Zeile 75 der Datei Hauptfenster.java.
String dionarap::Hauptfenster::levelname [private] |
Der Name momentan ausgewaehlten Levels.
Definiert in Zeile 78 der Datei Hauptfenster.java.
Vector<String> dionarap::Hauptfenster::levelnames [private] |
Die Liste der zur Verfuegung stehenden Levels.
Definiert in Zeile 81 der Datei Hauptfenster.java.
final String dionarap::Hauptfenster::levelPrefix = "level_" [static] |
Prefix Level-Dateinamen und Level-Auswahl-ActionCommands.
Definiert in Zeile 87 der Datei Hauptfenster.java.
DionaRapModel dionarap::Hauptfenster::model [private] |
DionaRap-Spiele-Model.
Definiert in Zeile 60 der Datei Hauptfenster.java.
Navigator dionarap::Hauptfenster::navigator = new Navigator(this) [private] |
DionaRap-Spiele-Navigator, rechts neben dem Hauptfenster.
Definiert in Zeile 69 der Datei Hauptfenster.java.
final long dionarap::Hauptfenster::serialVersionUID = 4932458420387758006L [static, private] |
Interne Versionsnummer - Serialisieren fuer Applets, Klassentausch.
Definiert in Zeile 51 der Datei Hauptfenster.java.
Spielfeld dionarap::Hauptfenster::spielfeld [private] |
DionaRap-Spielfeld.
Definiert in Zeile 57 der Datei Hauptfenster.java.
String dionarap::Hauptfenster::titel = "DionaRap - TM, RH" [static, private] |
Spiele Titel.
Definiert in Zeile 54 der Datei Hauptfenster.java.