From c81536f941461f41631b2cb903c0fab916f9dbb4 Mon Sep 17 00:00:00 2001 From: Marc Michalsky Date: Sun, 26 Apr 2020 22:03:28 +0200 Subject: [PATCH] =?UTF-8?q?JMenueBar=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gfn/marc/Feld.java | 8 ++ src/gfn/marc/Form.java | 16 +++ src/gfn/marc/Gewinner.java | 96 ++++++++--------- src/gfn/marc/Spiel.java | 25 ++--- src/gfn/marc/Spielfeld.java | 55 +++++----- src/gfn/marc/TicTacToe.java | 90 ++-------------- src/gfn/marc/Zug.java | 68 ++++-------- src/gfn/marc/gui/Fenster.java | 155 +++++++++++++++++++++++++++ src/gfn/marc/gui/Fenstergroesse.java | 126 ++++++++++++++++++++++ 9 files changed, 422 insertions(+), 217 deletions(-) create mode 100644 src/gfn/marc/gui/Fenster.java create mode 100644 src/gfn/marc/gui/Fenstergroesse.java diff --git a/src/gfn/marc/Feld.java b/src/gfn/marc/Feld.java index 2be9960..f7b5ab1 100644 --- a/src/gfn/marc/Feld.java +++ b/src/gfn/marc/Feld.java @@ -84,4 +84,12 @@ public class Feld { public boolean isGesetzt() { return gesetzt; } + + public void setGesetzt(boolean gesetzt) { + this.gesetzt = gesetzt; + } + + public void setFeldId(int feldId) { + this.feldId = feldId; + } } diff --git a/src/gfn/marc/Form.java b/src/gfn/marc/Form.java index 20833b3..783741a 100644 --- a/src/gfn/marc/Form.java +++ b/src/gfn/marc/Form.java @@ -37,6 +37,22 @@ public abstract class Form { return para4; } + public void increasePara1(int x) { + this.para1 += x; + } + + public void increasePara2(int x) { + this.para2 += x; + } + + public void increasePara3(int x) { + this.para3 += x; + } + + public void increasePara4(int x) { + this.para4 += x; + } + public boolean isSichtbar() { return sichtbar; } diff --git a/src/gfn/marc/Gewinner.java b/src/gfn/marc/Gewinner.java index 39eb0d4..8083c0a 100644 --- a/src/gfn/marc/Gewinner.java +++ b/src/gfn/marc/Gewinner.java @@ -8,93 +8,93 @@ public class Gewinner { // Prüfe Horizontale for (int i = 0; i <= 8; i += 3) { - if (spiel.getSpielfeld().getFelder()[i].getKreuz().isSichtbar() && - spiel.getSpielfeld().getFelder()[i + 1].getKreuz().isSichtbar() && - spiel.getSpielfeld().getFelder()[i + 2].getKreuz().isSichtbar()) { + if (spiel.getF().getSpielfeld().getFelder()[i].getKreuz().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[i + 1].getKreuz().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[i + 2].getKreuz().isSichtbar()) { Gewinner.spieler = spiel.getSpieler1(); spiel.getSpieler1().setPunktestand(); - spiel.getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[i + 1].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[i + 2].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i + 1].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i + 2].getRechteck().setGewinnerFeld(true); break; } - if (spiel.getSpielfeld().getFelder()[i].getKreis().isSichtbar() && - spiel.getSpielfeld().getFelder()[i + 1].getKreis().isSichtbar() && - spiel.getSpielfeld().getFelder()[i + 2].getKreis().isSichtbar()) { + if (spiel.getF().getSpielfeld().getFelder()[i].getKreis().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[i + 1].getKreis().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[i + 2].getKreis().isSichtbar()) { Gewinner.spieler = spiel.getSpieler2(); spiel.getSpieler2().setPunktestand(); - spiel.getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[i + 1].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[i + 2].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i + 1].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i + 2].getRechteck().setGewinnerFeld(true); } } // Prüfe Vertikale for (int i = 0; i < 3; i++) { - if (spiel.getSpielfeld().getFelder()[i].getKreuz().isSichtbar() && - spiel.getSpielfeld().getFelder()[i + 3].getKreuz().isSichtbar() && - spiel.getSpielfeld().getFelder()[i + 6].getKreuz().isSichtbar()) { + if (spiel.getF().getSpielfeld().getFelder()[i].getKreuz().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[i + 3].getKreuz().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[i + 6].getKreuz().isSichtbar()) { Gewinner.spieler = spiel.getSpieler1(); spiel.getSpieler1().setPunktestand(); - spiel.getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[i + 3].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[i + 6].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i + 3].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i + 6].getRechteck().setGewinnerFeld(true); break; } - if (spiel.getSpielfeld().getFelder()[i].getKreis().isSichtbar() && - spiel.getSpielfeld().getFelder()[i + 3].getKreis().isSichtbar() && - spiel.getSpielfeld().getFelder()[i + 6].getKreis().isSichtbar()) { + if (spiel.getF().getSpielfeld().getFelder()[i].getKreis().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[i + 3].getKreis().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[i + 6].getKreis().isSichtbar()) { Gewinner.spieler = spiel.getSpieler2(); spiel.getSpieler2().setPunktestand(); - spiel.getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[i + 3].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[i + 6].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i + 3].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[i + 6].getRechteck().setGewinnerFeld(true); } } // Prüfe Diagonale - if (spiel.getSpielfeld().getFelder()[0].getKreuz().isSichtbar() && - spiel.getSpielfeld().getFelder()[4].getKreuz().isSichtbar() && - spiel.getSpielfeld().getFelder()[8].getKreuz().isSichtbar()) { + if (spiel.getF().getSpielfeld().getFelder()[0].getKreuz().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[4].getKreuz().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[8].getKreuz().isSichtbar()) { Gewinner.spieler = spiel.getSpieler1(); spiel.getSpieler1().setPunktestand(); - spiel.getSpielfeld().getFelder()[0].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[8].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[0].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[8].getRechteck().setGewinnerFeld(true); } - if (spiel.getSpielfeld().getFelder()[0].getKreis().isSichtbar() && - spiel.getSpielfeld().getFelder()[4].getKreis().isSichtbar() && - spiel.getSpielfeld().getFelder()[8].getKreis().isSichtbar()) { + if (spiel.getF().getSpielfeld().getFelder()[0].getKreis().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[4].getKreis().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[8].getKreis().isSichtbar()) { Gewinner.spieler = spiel.getSpieler2(); spiel.getSpieler2().setPunktestand(); - spiel.getSpielfeld().getFelder()[0].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[8].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[0].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[8].getRechteck().setGewinnerFeld(true); } - if (spiel.getSpielfeld().getFelder()[2].getKreuz().isSichtbar() && - spiel.getSpielfeld().getFelder()[4].getKreuz().isSichtbar() && - spiel.getSpielfeld().getFelder()[6].getKreuz().isSichtbar()) { + if (spiel.getF().getSpielfeld().getFelder()[2].getKreuz().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[4].getKreuz().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[6].getKreuz().isSichtbar()) { Gewinner.spieler = spiel.getSpieler1(); spiel.getSpieler1().setPunktestand(); - spiel.getSpielfeld().getFelder()[2].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[6].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[2].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[6].getRechteck().setGewinnerFeld(true); } - if (spiel.getSpielfeld().getFelder()[2].getKreis().isSichtbar() && - spiel.getSpielfeld().getFelder()[4].getKreis().isSichtbar() && - spiel.getSpielfeld().getFelder()[6].getKreis().isSichtbar()) { + if (spiel.getF().getSpielfeld().getFelder()[2].getKreis().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[4].getKreis().isSichtbar() && + spiel.getF().getSpielfeld().getFelder()[6].getKreis().isSichtbar()) { Gewinner.spieler = spiel.getSpieler2(); spiel.getSpieler2().setPunktestand(); - spiel.getSpielfeld().getFelder()[2].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); - spiel.getSpielfeld().getFelder()[6].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[2].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); + spiel.getF().getSpielfeld().getFelder()[6].getRechteck().setGewinnerFeld(true); } return Gewinner.spieler; diff --git a/src/gfn/marc/Spiel.java b/src/gfn/marc/Spiel.java index afe48c4..08612be 100644 --- a/src/gfn/marc/Spiel.java +++ b/src/gfn/marc/Spiel.java @@ -1,17 +1,17 @@ package gfn.marc; +import gfn.marc.gui.Fenster; + import javax.swing.*; -import java.awt.*; public class Spiel { private static Spieler spieler1; private static Spieler spieler2; - private Frame f; - private Spielfeld spielfeld; + private final Fenster f; - Spiel(Frame f, Spielfeld spielfeld) throws InterruptedException { + Spiel(Fenster f) throws InterruptedException { this.f = f; @@ -106,18 +106,14 @@ public class Spiel { } } -// Neues Spielfeld anlegen - this.spielfeld =spielfeld; - - } public boolean spielen() { // Züge durchführen try { - Zug zug = new Zug(); // Zufälliger Spieler startet + new Zug(); double startSpieler = Math.random(); while (Gewinner.ermittleGewinner(this) == null && Zug.getZugNummer() < 9) { if (Zug.getZugNummer() % 2 == 0) { @@ -136,7 +132,7 @@ public class Spiel { } f.repaint(); Thread.sleep(500); - f.setTitle(Spiel.spieler1.getName() + ": " + Spiel.spieler1.getPunktestand() + " | " + + f.setzeTitel(Spiel.spieler1.getName() + ": " + Spiel.spieler1.getPunktestand() + " | " + Spiel.spieler2.getName() + ": " + Spiel.spieler2.getPunktestand()); if (Gewinner.getSpieler() == null) { // Noch ein Spiel? @@ -155,11 +151,6 @@ public class Spiel { return false; } - - public Spielfeld getSpielfeld() { - return spielfeld; - } - public Spieler getSpieler1() { return spieler1; } @@ -167,4 +158,8 @@ public class Spiel { public Spieler getSpieler2() { return spieler2; } + + public Fenster getF() { + return f; + } } diff --git a/src/gfn/marc/Spielfeld.java b/src/gfn/marc/Spielfeld.java index b14bd96..241fec4 100644 --- a/src/gfn/marc/Spielfeld.java +++ b/src/gfn/marc/Spielfeld.java @@ -1,28 +1,28 @@ package gfn.marc; +import gfn.marc.gui.Fenster; + import java.awt.*; -import static gfn.marc.TicTacToe.fensterGroesse; import static gfn.marc.TicTacToe.DEBUG; public class Spielfeld { final static int KORREKTUR_X = 0; // Korrektur der Spielfeldposition auf X Achse - final static int KORREKTUR_Y = 25; // Korrektur der Spielfeldposition auf Y Achse + final static int KORREKTUR_Y = 0; // Korrektur der Spielfeldposition auf Y Achse - private int quadrant = fensterGroesse / 3; - private Frame f; + private final Fenster f; private Feld[] felder = new Feld[9]; - private boolean spielfeldExistiert; // Unterteilung des Spielfelds in rechteckige Felder - public Spielfeld(Frame f) { + public Spielfeld(Fenster f) { this.f = f; + int quadrant = (f.getFenstergroesse() / 3); int k = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { - felder[k] = new Feld(new Rechteck(((this.quadrant * j) + KORREKTUR_X), (KORREKTUR_Y + (this.quadrant * i)), - this.quadrant, this.quadrant)); + felder[k] = new Feld(new Rechteck(((quadrant * j) + KORREKTUR_X), (KORREKTUR_Y + (quadrant * i)), + quadrant, quadrant)); k++; } } @@ -35,35 +35,36 @@ public class Spielfeld { feld.getRechteck().setSichtbar(true); feld.getRechteck().paintMe(g); // Zahlen auf Felder einblenden, wenn Debug-Mode aktiviert ist - this.f.add(feld.getLabel()); + this.f.hinzufuegen(feld.getLabel()); if (DEBUG) { feld.getRechteck().paintId(g, feld.getFeldId()); } } } - // Spielfeld äufräumen - public void aufraeumen() { - - felder = null; - this.f = null; - - } - public Feld[] getFelder() { return felder; } - public Frame getF() { - return f; - } - - public boolean isSpielfeldExistiert() { - return spielfeldExistiert; - } - - public void setSpielfeldExistiert(boolean spielfeldExistiert) { - this.spielfeldExistiert = spielfeldExistiert; + public void resizeFelder(int spielfeldgroesse) { + Feld[] felderNeu = new Feld[9]; + int quadrant = (spielfeldgroesse / 3); + int k = 0; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + felderNeu[k] = new Feld(new Rechteck(((quadrant * j) + KORREKTUR_X), (KORREKTUR_Y + (quadrant * i)), + quadrant, quadrant)); + k++; + } + } + for (int i = 0; i < this.felder.length; i++) { + felderNeu[i].getRechteck().setGewinnerFeld(felder[i].getRechteck().isGewinnerFeld()); + felderNeu[i].getKreis().setSichtbar(felder[i].getKreis().isSichtbar()); + felderNeu[i].getKreuz().setSichtbar(felder[i].getKreuz().isSichtbar()); + felderNeu[i].setGesetzt(felder[i].isGesetzt()); + felderNeu[i].setFeldId(felder[i].getFeldId()); + } + this.felder = felderNeu; } } diff --git a/src/gfn/marc/TicTacToe.java b/src/gfn/marc/TicTacToe.java index 28dba34..0bacaf5 100644 --- a/src/gfn/marc/TicTacToe.java +++ b/src/gfn/marc/TicTacToe.java @@ -1,76 +1,37 @@ package gfn.marc; -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; +import gfn.marc.gui.Fenster; + import java.io.IOException; -import static gfn.marc.Spielfeld.KORREKTUR_X; -import static gfn.marc.Spielfeld.KORREKTUR_Y; +public class TicTacToe { -public class TicTacToe extends JFrame { - - static Frame f; - static int fensterGroesse; - static Spielfeld spielfeld; + static Fenster f; static Spiel spiel; - static boolean DEBUG = false; + static boolean DEBUG = true; public static void main(String[] args) throws IOException { // Laden der Spielstände Speicher.spielstaendeEinlesen(); - // Eingabedialog: Fenstergröße - String eingabe = ""; - while (true) { - eingabe = JOptionPane.showInputDialog(f, "Wie groß soll das Spielfeld sein? (in Pixel)", - "600"); - try { - fensterGroesse = Integer.parseInt(eingabe); - break; - } catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(null, "Die Eingabe muss eine Zahl sein!"); - } - } - + f = new Fenster(); + f.macheSichtbar(true); // Spiel starten try { boolean nochEinSpiel = true; while (nochEinSpiel) { - f = new TicTacToe(); - f.setSize((fensterGroesse + KORREKTUR_X), (fensterGroesse + KORREKTUR_Y)); // Fenster Breite und Höhe - f.setLocationRelativeTo(null); - f.setLayout(null); - f.setResizable(false); - f.setTitle("Tic Tac Toe"); // Fenster Titeltext - f.setVisible(true); // Fenster anzeigen - f.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - try { - Speicher.spielstaendeSpeichern(); - } catch (IOException ex) { - ex.printStackTrace(); - } - System.exit(0); // sofortiges Programmende - } - }); - - spielfeld = new Spielfeld(f); - spiel = new Spiel(f, spielfeld); + f.newSpielfeld(); + spiel = new Spiel(f); nochEinSpiel = spiel.spielen(); // aufräumen - spielfeld.aufraeumen(); Gewinner.setSpieler(null); - spiel = null; - spielfeld = null; Zug.setZugNummer(0); - f.setVisible(false); - f = null; + spiel = null; } } catch (InterruptedException ie) { System.err.println("Da ist was schief gelaufen!"); @@ -80,37 +41,8 @@ public class TicTacToe extends JFrame { } - public static Spielfeld getSpielfeld() { - return spielfeld; - } - - public static Frame getF() { + public static Fenster getF() { return f; } - public void paint(Graphics g) { - - Graphics2D g2 = (Graphics2D) g; - - if (spielfeld != null) { - spielfeld.zeichneSpielfeld(g2); - spielfeld.setSpielfeldExistiert(true); - } - - if (spielfeld != null) { - for (Feld feld : spielfeld.getFelder()) { - feld.getKreuz().paintMe(g2); - feld.getKreis().paintMe(g2); - } - } - - if (spielfeld != null) { - for (Feld feld : spielfeld.getFelder()) { - feld.getRechteck().faerbeGruen(g2); - feld.getKreuz().paintMe(g2); - feld.getKreis().paintMe(g2); - } - } - } - } \ No newline at end of file diff --git a/src/gfn/marc/Zug.java b/src/gfn/marc/Zug.java index ac7bc12..2b6b052 100644 --- a/src/gfn/marc/Zug.java +++ b/src/gfn/marc/Zug.java @@ -1,30 +1,35 @@ package gfn.marc; -import java.awt.*; +import gfn.marc.gui.Fenster; + +import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; public class Zug { - private static Frame f; - private static Spielfeld spielfeld; + private static Fenster f = TicTacToe.getF(); + private static Spielfeld spielfeld = f.getSpielfeld(); private static int zugNummer = 0; + private static Spieler spieler; private static boolean zugLaeuft; private static CustomMouseListener[] cmls = new CustomMouseListener[9]; public Zug() { - Zug.spielfeld = TicTacToe.getSpielfeld(); - Zug.f = TicTacToe.getF(); createMouseListeners(); } + public static void setZugNummer(int zugNummer) { + Zug.zugNummer = zugNummer; + } + // Zuganzahl hochzählen und Titelleiste setzen public static void macheZug(Spieler spieler) { + Zug.spieler = spieler; if (zugNummer == 9) { Zug.zugNummer = 0; } Zug.zugNummer++; - f.setTitle(spieler.getName() + " ist dran!"); + Zug.f.setzeTitel(spieler.getName() + " ist dran!"); Zug.setZugLaeuft(true); @@ -58,6 +63,11 @@ public class Zug { } } + public static void restartZug() { + macheZug(Zug.spieler); + Zug.zugNummer--; + } + public static int getZugNummer() { return zugNummer; } @@ -70,31 +80,15 @@ public class Zug { Zug.zugLaeuft = zugLaeuft; } - public static void setF(Frame f) { - Zug.f = f; - } - - public static void setSpielfeld(Spielfeld spielfeld) { - Zug.spielfeld = spielfeld; - } - - public static void setZugNummer(int zugNummer) { - Zug.zugNummer = zugNummer; - } - - public static void setCmls(CustomMouseListener[] cmls) { - Zug.cmls = cmls; - } } +class CustomMouseListener extends MouseAdapter { -class CustomMouseListener implements MouseListener { - - private Frame f; + private Fenster f; private Feld feld; private Spieler spieler; - public CustomMouseListener(Frame f, Feld feld) { + public CustomMouseListener(Fenster f, Feld feld) { this.f = f; this.feld = feld; } @@ -107,30 +101,8 @@ class CustomMouseListener implements MouseListener { @Override public void mouseClicked(MouseEvent mouseEvent) { this.feld.setZeichen(spieler.getForm()); - f.repaint(); Zug.setZugLaeuft(false); } - - // notwendige Implementierungen ohne weitere Funktion - @Override - public void mousePressed(MouseEvent mouseEvent) { - - } - - @Override - public void mouseReleased(MouseEvent mouseEvent) { - - } - - @Override - public void mouseEntered(MouseEvent mouseEvent) { - - } - - @Override - public void mouseExited(MouseEvent mouseEvent) { - - } } diff --git a/src/gfn/marc/gui/Fenster.java b/src/gfn/marc/gui/Fenster.java new file mode 100644 index 0000000..caa54ea --- /dev/null +++ b/src/gfn/marc/gui/Fenster.java @@ -0,0 +1,155 @@ +package gfn.marc.gui; + +import gfn.marc.Feld; +import gfn.marc.Speicher; +import gfn.marc.Spielfeld; +import gfn.marc.Zug; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.IOException; + +public class Fenster extends JPanel implements ActionListener { + + private final JFrame fenster; + private MyPanel myPanel; + private Spielfeld spielfeld; + private int fenstergroesse; + + // Menüleiste + private JMenuBar menue; + + // Menüleiste Elemente + private JMenu optionen; + + // Datei + private JMenuItem optionFenstergroesse; + private JMenuItem loescheSpielstaende; + + public Fenster() { + this.fenster = new JFrame("Tic Tac Toe"); + this.fenstergroesse = 600; + this.myPanel = new MyPanel(); + + // Menüleiste erzeugen + this.menue = new JMenuBar(); + + // Menüelemente erzeugen + this.optionen = new JMenu("Optionen"); + + // Untermenüelemente erzeugen + this.optionFenstergroesse = new JMenuItem("Fenstergröße"); + this.optionFenstergroesse.addActionListener(this); + this.loescheSpielstaende = new JMenuItem("Spielstände löschen"); + this.loescheSpielstaende.addActionListener(this); + + // Menüelemente hinzufügen + this.menue.add(optionen); + + // Untermenüelemente hinzufügen + this.optionen.add(optionFenstergroesse); + this.optionen.add(loescheSpielstaende); + + this.fenster.add(menue, BorderLayout.NORTH); + + this.fenster.setSize(fenstergroesse, fenstergroesse + 50); + this.fenster.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + try { + Speicher.spielstaendeSpeichern(); + } catch (IOException ex) { + ex.printStackTrace(); + } + System.exit(0); // sofortiges Programmende + } + }); + this.fenster.setLocationRelativeTo(null); + this.fenster.setResizable(false); + } + + public void hinzufuegen(Component c) { + myPanel.add(c); + } + + public void actionPerformed(ActionEvent object) { + if (object.getSource() == optionFenstergroesse) { + new Fenstergroesse(this); + } + if (object.getSource() == loescheSpielstaende) { + System.out.println("Lösche Spielstände wurde angeklickt"); + } + } + + public void newSpielfeld() { + this.myPanel = null; + this.spielfeld = null; + this.myPanel = new MyPanel(); + this.fenster.getContentPane().add(this.myPanel); + this.spielfeld = new Spielfeld(this); + } + + public void macheSichtbar(boolean sichtbar) { + this.fenster.setVisible(sichtbar); + } + + public void setzeTitel(String titel) { + this.fenster.setTitle(titel); + } + + public void setzeFenstergroesse(int fenstergroesse) { + this.fenstergroesse = fenstergroesse; + this.fenster.setSize(fenstergroesse, fenstergroesse + 50); + this.spielfeld.resizeFelder(fenstergroesse); + this.myPanel.repaint(); + } + + public MyPanel getMyPanel() { + return myPanel; + } + + public Spielfeld getSpielfeld() { + return spielfeld; + } + + public int getFenstergroesse() { + return this.fenstergroesse; + } + + class MyPanel extends JPanel { + + public MyPanel() { + super(); + } + + public void paintComponent(Graphics g) { + + Graphics2D g2 = (Graphics2D) g; + + if (spielfeld != null) { + spielfeld.zeichneSpielfeld(g2); + this.repaint(); + } + + if (spielfeld != null) { + for (Feld feld : spielfeld.getFelder()) { + feld.getKreuz().paintMe(g2); + feld.getKreis().paintMe(g2); + this.repaint(); + } + } + + if (spielfeld != null) { + for (Feld feld : spielfeld.getFelder()) { + feld.getRechteck().faerbeGruen(g2); + feld.getKreuz().paintMe(g2); + feld.getKreis().paintMe(g2); + this.repaint(); + } + } + } + } +} diff --git a/src/gfn/marc/gui/Fenstergroesse.java b/src/gfn/marc/gui/Fenstergroesse.java new file mode 100644 index 0000000..5337cc9 --- /dev/null +++ b/src/gfn/marc/gui/Fenstergroesse.java @@ -0,0 +1,126 @@ +package gfn.marc.gui; + +import gfn.marc.Zug; + +import java.awt.*; +import java.awt.event.*; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JSlider; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +public class Fenstergroesse extends JFrame { + + private JFrame frame; + private final Fenster hauptfenster; + private JSlider schiebereglerFenstergroesse; + private JLabel labelErgebnis; + private JButton buttonOkay; + private JButton buttonZuruecksetzen; + private ChangeListener schiebereglerListener; + private MouseListener schiebereglerMouseListener; + + public Fenstergroesse(Fenster hauptfenster) { + super("Fenstergröße"); + this.frame = this; + this.hauptfenster = hauptfenster; + + this.setSize(250, 150); + this.setLocationRelativeTo(hauptfenster); + this.setResizable(false); + this.setVisible(true); + this.initialisiereKomponenten(); + this.ordneKomponentenAn(); + this.registriereListener(); + } + + private void initialisiereKomponenten() { + this.labelErgebnis = new JLabel("600 × 600"); + this.schiebereglerFenstergroesse = this.erstelleSchieberegler(300, 900); + this.buttonOkay = new JButton("Okay"); + this.buttonZuruecksetzen = new JButton("zurücksetzen"); + this.schiebereglerListener = new SchiebereglerListener(); + this.schiebereglerMouseListener = new MouseAdapter() { + @Override + public void mouseReleased(MouseEvent e) { + super.mouseReleased(e); + hauptfenster.setzeFenstergroesse(schiebereglerFenstergroesse.getValue()); + } + }; + } + + private JSlider erstelleSchieberegler(int minimum, int maximum) { + JSlider schieberegler = new JSlider(minimum, maximum); + schieberegler.setPaintLabels(true); + schieberegler.setPaintTicks(true); + schieberegler.setMinorTickSpacing(50); + schieberegler.setMajorTickSpacing(100); + schieberegler.setSnapToTicks(true); + return schieberegler; + } + + private void ordneKomponentenAn() { + this.getContentPane().setLayout(new GridBagLayout()); + GridBagConstraints c = new GridBagConstraints(); + c.fill = GridBagConstraints.HORIZONTAL; + c.insets = new Insets(4, 4, 4, 4); + + c.gridx = 1; + c.gridy = 0; + c.gridwidth = 1; + this.getContentPane().add(this.labelErgebnis, c); + + c.gridx = 0; + c.gridy = 1; + c.gridwidth = 3; + this.getContentPane().add(this.schiebereglerFenstergroesse, c); + + c.gridx = 0; + c.gridy = 2; + c.gridwidth = 1; + this.getContentPane().add(this.buttonOkay, c); + + c.gridx = 1; + c.gridy = 2; + c.gridwidth = 1; + this.getContentPane().add(this.buttonZuruecksetzen, c); + } + + private class SchiebereglerListener extends MouseAdapter implements ChangeListener { + @Override + public void stateChanged(ChangeEvent e) { + aktualisiereText(); + } + } + + private void aktualisiereText() { + StringBuilder text = new StringBuilder(); + text.append(String.valueOf(schiebereglerFenstergroesse.getValue())); + text.append(" × "); + text.append(String.valueOf(schiebereglerFenstergroesse.getValue())); + this.labelErgebnis.setText(text.toString()); + } + + private void registriereListener() { + this.schiebereglerFenstergroesse.addChangeListener(this.schiebereglerListener); + this.schiebereglerFenstergroesse.addMouseListener(this.schiebereglerMouseListener); + this.buttonOkay.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + frame.dispose(); + Zug.restartZug(); + } + }); + this.buttonZuruecksetzen.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + hauptfenster.setzeFenstergroesse(600); + schiebereglerFenstergroesse.setValue(600); + } + }); + } +} +