Package hexenschach.gui

Source Code of hexenschach.gui.GameMenu

package hexenschach.gui;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import hexenschach.gameplay.Gameplay;
import hexenschach.gui.event.GameEvent;
import hexenschach.gui.event.GameListener;
import hexenschach.gui.resources.Images;
import hexenschach.player.Human;
import hexenschach.player.Player;
/**
* Panel, welches die Buttons zur Steuerung
* des Spielablaufs enhaelt.
* @author Tobias Marquardt
*
*/
public class GameMenu extends JPanel implements GUIContainer, GameListener{
  private static final long serialVersionUID = 7076444149264653552L;
  private GUI gui;
  //Buttons
  GameMenuButton undoButton;
  GameMenuButton redoButton;
  GameMenuButton autoButton;
  // Größe des Panels
  static final int xSize = 352;
  static final int ySize = 150;
  GameMenu(GUI gui) {
    this.gui = gui;
    initLayout();
    initComponents();
    initListener();
    initContainerProperties();
  }
 
  public void initLayout() {
    // Es wird ein Null-Layout verwendet, daher müssen alle Komponenten manuell platziert werden.
    setLayout(null);
  }
  public void initComponents() {
    // Buttons erzeugen
    undoButton = new GameMenuButton(Dictionary.UndoToolTipp, Images.getUndoButtonDefaultImage(), Images.getUndoButtonRolloverImage(), Images.getUndoButtonPressedImage(), Images.getUndoButtonDisabledImage());
    redoButton = new GameMenuButton(Dictionary.RedoToolTipp, Images.getRedoButtonDefaultImage(), Images.getRedoButtonRolloverImage(), Images.getRedoButtonPressedImage(), Images.getRedoButtonDisabledImage());
    autoButton = new GameMenuButton(Dictionary.AutoToolTipp, Images.getAutoButtonDefaultImage(), Images.getAutoButtonRolloverImage(), Images.getAutoButtonPressedImage(), Images.getAutoButtonDisabledImage());
    // Beim Positionieren der Buttons im null-Layout muss auch
    // deren Größe angegeben werden. Daher wird diese hier aus der Klasse
    // GameMenuButton ermittelt:
    int xSizeButton = GameMenuButton.xSize;
    int ySizeButton = GameMenuButton.ySize;
    // Buttons positionieren
    undoButton.setBounds(75, 33, xSizeButton, ySizeButton);
    redoButton.setBounds(75, 72, xSizeButton, ySizeButton);
    autoButton.setBounds(75, 111, xSizeButton, ySizeButton);
    // Buttons zu Beginn deaktivieren
    undoButton.setEnabled(false);
    redoButton.setEnabled(false);
    autoButton.setEnabled(false);
    // Buttons hinzufuegen
    add(undoButton);
    add(redoButton);
    add(autoButton);
  }
  public void initContainerProperties() {
    setOpaque(false); //Paneltransparenz
    setBorder(null);
    setPreferredSize(new Dimension(xSize, ySize));
  }
  /**
   * Fügt sicht selbst als dem GUI als GameListener hinzu
   * und fügt den Buttons ActionListener in Form
   * innerer anonymer Klassen hinzu.
   */
  private void initListener() {
    gui.addGameListener(this);
    undoButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            undoButtonClicked();           
          }
        }
      );
    redoButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            redoButtonClicked();
          }
        }
      );
    autoButton.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            autoButtonClicked();
          }
        }
      );
  }
// Für jeden Button gibt es hier eine Clicked-Methode, die vom jeweiligen ActionListener aufgerufen wird.
// Dient vorallem der Übersichtlichkeit.
  /**
   * Aktion beim Klick auf den Rückgängig-Button.
   */
  private void undoButtonClicked() {
    if(gui.getGameplay() != null)
      gui.getGameplay().undo();
  }
  /**
   * Aktion beim Klick auf den Wiederholen-Button.
   */
  private void redoButtonClicked() {
    if(gui.getGameplay() != null)
      gui.getGameplay().redo();
   

  }
  /**
   * Aktion beim Klick auf den Automatisch-Button.
   */
  private void autoButtonClicked() {
    if(gui.getGameplay() != null)
      gui.getGameplay().autoMove();
    //Wenn noch kein Spiel läuft, soll einfach ein neues Spiel mit 3 menschlichen Spielern
    //automatisch erstellt und gestartet werden.
    else
      startNewGame();
  }
  /**
   * Erzeugt ein Neues Gameplay,
   */
  private void startNewGame() {
    // 3 menschliche Spieler erstellen
    Player player1 = new Human(true, "white");
    Player player2 = new Human(true, "brown");
    Player player3 = new Human(true, "black");
    // Gameplay erzeugen
    Gameplay gameplay = new Gameplay(player1, player2, player3, gui);
    gui.setGameplay(gameplay);
  }
  @Override
  public void gameStarted(GameEvent e) {
    // Buttons nach Start eines neuen Spiel aktivieren
    undoButton.setEnabled(true);
    redoButton.setEnabled(true);
    autoButton.setEnabled(true);
  }
  @Override
  public void gameFinished(GameEvent e) {
    undoButton.setEnabled(false);
    redoButton.setEnabled(false);
    autoButton.setEnabled(false);
  }
  @Override
  public void gameSaved(GameEvent e) {
     
  }
}
TOP

Related Classes of hexenschach.gui.GameMenu

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.