JMenueBar hinzugefügt

This commit is contained in:
Marc Koch 2020-04-26 22:03:28 +02:00
parent 4bd7f0fdb1
commit c81536f941
Signed by: marc
GPG Key ID: AC2D4E00990A6767
9 changed files with 422 additions and 217 deletions

View File

@ -84,4 +84,12 @@ public class Feld {
public boolean isGesetzt() { public boolean isGesetzt() {
return gesetzt; return gesetzt;
} }
public void setGesetzt(boolean gesetzt) {
this.gesetzt = gesetzt;
}
public void setFeldId(int feldId) {
this.feldId = feldId;
}
} }

View File

@ -37,6 +37,22 @@ public abstract class Form {
return para4; 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() { public boolean isSichtbar() {
return sichtbar; return sichtbar;
} }

View File

@ -8,93 +8,93 @@ public class Gewinner {
// Prüfe Horizontale // Prüfe Horizontale
for (int i = 0; i <= 8; i += 3) { for (int i = 0; i <= 8; i += 3) {
if (spiel.getSpielfeld().getFelder()[i].getKreuz().isSichtbar() && if (spiel.getF().getSpielfeld().getFelder()[i].getKreuz().isSichtbar() &&
spiel.getSpielfeld().getFelder()[i + 1].getKreuz().isSichtbar() && spiel.getF().getSpielfeld().getFelder()[i + 1].getKreuz().isSichtbar() &&
spiel.getSpielfeld().getFelder()[i + 2].getKreuz().isSichtbar()) { spiel.getF().getSpielfeld().getFelder()[i + 2].getKreuz().isSichtbar()) {
Gewinner.spieler = spiel.getSpieler1(); Gewinner.spieler = spiel.getSpieler1();
spiel.getSpieler1().setPunktestand(); spiel.getSpieler1().setPunktestand();
spiel.getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[i + 1].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i + 1].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[i + 2].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i + 2].getRechteck().setGewinnerFeld(true);
break; break;
} }
if (spiel.getSpielfeld().getFelder()[i].getKreis().isSichtbar() && if (spiel.getF().getSpielfeld().getFelder()[i].getKreis().isSichtbar() &&
spiel.getSpielfeld().getFelder()[i + 1].getKreis().isSichtbar() && spiel.getF().getSpielfeld().getFelder()[i + 1].getKreis().isSichtbar() &&
spiel.getSpielfeld().getFelder()[i + 2].getKreis().isSichtbar()) { spiel.getF().getSpielfeld().getFelder()[i + 2].getKreis().isSichtbar()) {
Gewinner.spieler = spiel.getSpieler2(); Gewinner.spieler = spiel.getSpieler2();
spiel.getSpieler2().setPunktestand(); spiel.getSpieler2().setPunktestand();
spiel.getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[i + 1].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i + 1].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[i + 2].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i + 2].getRechteck().setGewinnerFeld(true);
} }
} }
// Prüfe Vertikale // Prüfe Vertikale
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
if (spiel.getSpielfeld().getFelder()[i].getKreuz().isSichtbar() && if (spiel.getF().getSpielfeld().getFelder()[i].getKreuz().isSichtbar() &&
spiel.getSpielfeld().getFelder()[i + 3].getKreuz().isSichtbar() && spiel.getF().getSpielfeld().getFelder()[i + 3].getKreuz().isSichtbar() &&
spiel.getSpielfeld().getFelder()[i + 6].getKreuz().isSichtbar()) { spiel.getF().getSpielfeld().getFelder()[i + 6].getKreuz().isSichtbar()) {
Gewinner.spieler = spiel.getSpieler1(); Gewinner.spieler = spiel.getSpieler1();
spiel.getSpieler1().setPunktestand(); spiel.getSpieler1().setPunktestand();
spiel.getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[i + 3].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i + 3].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[i + 6].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i + 6].getRechteck().setGewinnerFeld(true);
break; break;
} }
if (spiel.getSpielfeld().getFelder()[i].getKreis().isSichtbar() && if (spiel.getF().getSpielfeld().getFelder()[i].getKreis().isSichtbar() &&
spiel.getSpielfeld().getFelder()[i + 3].getKreis().isSichtbar() && spiel.getF().getSpielfeld().getFelder()[i + 3].getKreis().isSichtbar() &&
spiel.getSpielfeld().getFelder()[i + 6].getKreis().isSichtbar()) { spiel.getF().getSpielfeld().getFelder()[i + 6].getKreis().isSichtbar()) {
Gewinner.spieler = spiel.getSpieler2(); Gewinner.spieler = spiel.getSpieler2();
spiel.getSpieler2().setPunktestand(); spiel.getSpieler2().setPunktestand();
spiel.getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[i + 3].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i + 3].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[i + 6].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[i + 6].getRechteck().setGewinnerFeld(true);
} }
} }
// Prüfe Diagonale // Prüfe Diagonale
if (spiel.getSpielfeld().getFelder()[0].getKreuz().isSichtbar() && if (spiel.getF().getSpielfeld().getFelder()[0].getKreuz().isSichtbar() &&
spiel.getSpielfeld().getFelder()[4].getKreuz().isSichtbar() && spiel.getF().getSpielfeld().getFelder()[4].getKreuz().isSichtbar() &&
spiel.getSpielfeld().getFelder()[8].getKreuz().isSichtbar()) { spiel.getF().getSpielfeld().getFelder()[8].getKreuz().isSichtbar()) {
Gewinner.spieler = spiel.getSpieler1(); Gewinner.spieler = spiel.getSpieler1();
spiel.getSpieler1().setPunktestand(); spiel.getSpieler1().setPunktestand();
spiel.getSpielfeld().getFelder()[0].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[0].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[8].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[8].getRechteck().setGewinnerFeld(true);
} }
if (spiel.getSpielfeld().getFelder()[0].getKreis().isSichtbar() && if (spiel.getF().getSpielfeld().getFelder()[0].getKreis().isSichtbar() &&
spiel.getSpielfeld().getFelder()[4].getKreis().isSichtbar() && spiel.getF().getSpielfeld().getFelder()[4].getKreis().isSichtbar() &&
spiel.getSpielfeld().getFelder()[8].getKreis().isSichtbar()) { spiel.getF().getSpielfeld().getFelder()[8].getKreis().isSichtbar()) {
Gewinner.spieler = spiel.getSpieler2(); Gewinner.spieler = spiel.getSpieler2();
spiel.getSpieler2().setPunktestand(); spiel.getSpieler2().setPunktestand();
spiel.getSpielfeld().getFelder()[0].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[0].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[8].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[8].getRechteck().setGewinnerFeld(true);
} }
if (spiel.getSpielfeld().getFelder()[2].getKreuz().isSichtbar() && if (spiel.getF().getSpielfeld().getFelder()[2].getKreuz().isSichtbar() &&
spiel.getSpielfeld().getFelder()[4].getKreuz().isSichtbar() && spiel.getF().getSpielfeld().getFelder()[4].getKreuz().isSichtbar() &&
spiel.getSpielfeld().getFelder()[6].getKreuz().isSichtbar()) { spiel.getF().getSpielfeld().getFelder()[6].getKreuz().isSichtbar()) {
Gewinner.spieler = spiel.getSpieler1(); Gewinner.spieler = spiel.getSpieler1();
spiel.getSpieler1().setPunktestand(); spiel.getSpieler1().setPunktestand();
spiel.getSpielfeld().getFelder()[2].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[2].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[6].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[6].getRechteck().setGewinnerFeld(true);
} }
if (spiel.getSpielfeld().getFelder()[2].getKreis().isSichtbar() && if (spiel.getF().getSpielfeld().getFelder()[2].getKreis().isSichtbar() &&
spiel.getSpielfeld().getFelder()[4].getKreis().isSichtbar() && spiel.getF().getSpielfeld().getFelder()[4].getKreis().isSichtbar() &&
spiel.getSpielfeld().getFelder()[6].getKreis().isSichtbar()) { spiel.getF().getSpielfeld().getFelder()[6].getKreis().isSichtbar()) {
Gewinner.spieler = spiel.getSpieler2(); Gewinner.spieler = spiel.getSpieler2();
spiel.getSpieler2().setPunktestand(); spiel.getSpieler2().setPunktestand();
spiel.getSpielfeld().getFelder()[2].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[2].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[4].getRechteck().setGewinnerFeld(true);
spiel.getSpielfeld().getFelder()[6].getRechteck().setGewinnerFeld(true); spiel.getF().getSpielfeld().getFelder()[6].getRechteck().setGewinnerFeld(true);
} }
return Gewinner.spieler; return Gewinner.spieler;

View File

@ -1,17 +1,17 @@
package gfn.marc; package gfn.marc;
import gfn.marc.gui.Fenster;
import javax.swing.*; import javax.swing.*;
import java.awt.*;
public class Spiel { public class Spiel {
private static Spieler spieler1; private static Spieler spieler1;
private static Spieler spieler2; private static Spieler spieler2;
private Frame f; private final Fenster f;
private Spielfeld spielfeld;
Spiel(Frame f, Spielfeld spielfeld) throws InterruptedException { Spiel(Fenster f) throws InterruptedException {
this.f = f; this.f = f;
@ -106,18 +106,14 @@ public class Spiel {
} }
} }
// Neues Spielfeld anlegen
this.spielfeld =spielfeld;
} }
public boolean spielen() { public boolean spielen() {
// Züge durchführen // Züge durchführen
try { try {
Zug zug = new Zug();
// Zufälliger Spieler startet // Zufälliger Spieler startet
new Zug();
double startSpieler = Math.random(); double startSpieler = Math.random();
while (Gewinner.ermittleGewinner(this) == null && Zug.getZugNummer() < 9) { while (Gewinner.ermittleGewinner(this) == null && Zug.getZugNummer() < 9) {
if (Zug.getZugNummer() % 2 == 0) { if (Zug.getZugNummer() % 2 == 0) {
@ -136,7 +132,7 @@ public class Spiel {
} }
f.repaint(); f.repaint();
Thread.sleep(500); 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()); Spiel.spieler2.getName() + ": " + Spiel.spieler2.getPunktestand());
if (Gewinner.getSpieler() == null) { if (Gewinner.getSpieler() == null) {
// Noch ein Spiel? // Noch ein Spiel?
@ -155,11 +151,6 @@ public class Spiel {
return false; return false;
} }
public Spielfeld getSpielfeld() {
return spielfeld;
}
public Spieler getSpieler1() { public Spieler getSpieler1() {
return spieler1; return spieler1;
} }
@ -167,4 +158,8 @@ public class Spiel {
public Spieler getSpieler2() { public Spieler getSpieler2() {
return spieler2; return spieler2;
} }
public Fenster getF() {
return f;
}
} }

View File

@ -1,28 +1,28 @@
package gfn.marc; package gfn.marc;
import gfn.marc.gui.Fenster;
import java.awt.*; import java.awt.*;
import static gfn.marc.TicTacToe.fensterGroesse;
import static gfn.marc.TicTacToe.DEBUG; import static gfn.marc.TicTacToe.DEBUG;
public class Spielfeld { public class Spielfeld {
final static int KORREKTUR_X = 0; // Korrektur der Spielfeldposition auf X Achse 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 final Fenster f;
private Frame f;
private Feld[] felder = new Feld[9]; private Feld[] felder = new Feld[9];
private boolean spielfeldExistiert;
// Unterteilung des Spielfelds in rechteckige Felder // Unterteilung des Spielfelds in rechteckige Felder
public Spielfeld(Frame f) { public Spielfeld(Fenster f) {
this.f = f; this.f = f;
int quadrant = (f.getFenstergroesse() / 3);
int k = 0; int k = 0;
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) { for (int j = 0; j < 3; j++) {
felder[k] = new Feld(new Rechteck(((this.quadrant * j) + KORREKTUR_X), (KORREKTUR_Y + (this.quadrant * i)), felder[k] = new Feld(new Rechteck(((quadrant * j) + KORREKTUR_X), (KORREKTUR_Y + (quadrant * i)),
this.quadrant, this.quadrant)); quadrant, quadrant));
k++; k++;
} }
} }
@ -35,35 +35,36 @@ public class Spielfeld {
feld.getRechteck().setSichtbar(true); feld.getRechteck().setSichtbar(true);
feld.getRechteck().paintMe(g); feld.getRechteck().paintMe(g);
// Zahlen auf Felder einblenden, wenn Debug-Mode aktiviert ist // Zahlen auf Felder einblenden, wenn Debug-Mode aktiviert ist
this.f.add(feld.getLabel()); this.f.hinzufuegen(feld.getLabel());
if (DEBUG) { if (DEBUG) {
feld.getRechteck().paintId(g, feld.getFeldId()); feld.getRechteck().paintId(g, feld.getFeldId());
} }
} }
} }
// Spielfeld äufräumen
public void aufraeumen() {
felder = null;
this.f = null;
}
public Feld[] getFelder() { public Feld[] getFelder() {
return felder; return felder;
} }
public Frame getF() { public void resizeFelder(int spielfeldgroesse) {
return f; Feld[] felderNeu = new Feld[9];
} int quadrant = (spielfeldgroesse / 3);
int k = 0;
public boolean isSpielfeldExistiert() { for (int i = 0; i < 3; i++) {
return spielfeldExistiert; for (int j = 0; j < 3; j++) {
} felderNeu[k] = new Feld(new Rechteck(((quadrant * j) + KORREKTUR_X), (KORREKTUR_Y + (quadrant * i)),
quadrant, quadrant));
public void setSpielfeldExistiert(boolean spielfeldExistiert) { k++;
this.spielfeldExistiert = spielfeldExistiert; }
}
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;
} }
} }

View File

@ -1,76 +1,37 @@
package gfn.marc; package gfn.marc;
import javax.swing.*; import gfn.marc.gui.Fenster;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException; 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 Fenster f;
static Frame f;
static int fensterGroesse;
static Spielfeld spielfeld;
static Spiel spiel; static Spiel spiel;
static boolean DEBUG = false; static boolean DEBUG = true;
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
// Laden der Spielstände // Laden der Spielstände
Speicher.spielstaendeEinlesen(); Speicher.spielstaendeEinlesen();
// Eingabedialog: Fenstergröße f = new Fenster();
String eingabe = ""; f.macheSichtbar(true);
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!");
}
}
// Spiel starten // Spiel starten
try { try {
boolean nochEinSpiel = true; boolean nochEinSpiel = true;
while (nochEinSpiel) { while (nochEinSpiel) {
f = new TicTacToe(); f.newSpielfeld();
f.setSize((fensterGroesse + KORREKTUR_X), (fensterGroesse + KORREKTUR_Y)); // Fenster Breite und Höhe spiel = new Spiel(f);
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);
nochEinSpiel = spiel.spielen(); nochEinSpiel = spiel.spielen();
// aufräumen // aufräumen
spielfeld.aufraeumen();
Gewinner.setSpieler(null); Gewinner.setSpieler(null);
spiel = null;
spielfeld = null;
Zug.setZugNummer(0); Zug.setZugNummer(0);
f.setVisible(false); spiel = null;
f = null;
} }
} catch (InterruptedException ie) { } catch (InterruptedException ie) {
System.err.println("Da ist was schief gelaufen!"); System.err.println("Da ist was schief gelaufen!");
@ -80,37 +41,8 @@ public class TicTacToe extends JFrame {
} }
public static Spielfeld getSpielfeld() { public static Fenster getF() {
return spielfeld;
}
public static Frame getF() {
return f; 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);
}
}
}
} }

View File

@ -1,30 +1,35 @@
package gfn.marc; 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.MouseEvent;
import java.awt.event.MouseListener;
public class Zug { public class Zug {
private static Frame f; private static Fenster f = TicTacToe.getF();
private static Spielfeld spielfeld; private static Spielfeld spielfeld = f.getSpielfeld();
private static int zugNummer = 0; private static int zugNummer = 0;
private static Spieler spieler;
private static boolean zugLaeuft; private static boolean zugLaeuft;
private static CustomMouseListener[] cmls = new CustomMouseListener[9]; private static CustomMouseListener[] cmls = new CustomMouseListener[9];
public Zug() { public Zug() {
Zug.spielfeld = TicTacToe.getSpielfeld();
Zug.f = TicTacToe.getF();
createMouseListeners(); createMouseListeners();
} }
public static void setZugNummer(int zugNummer) {
Zug.zugNummer = zugNummer;
}
// Zuganzahl hochzählen und Titelleiste setzen // Zuganzahl hochzählen und Titelleiste setzen
public static void macheZug(Spieler spieler) { public static void macheZug(Spieler spieler) {
Zug.spieler = spieler;
if (zugNummer == 9) { if (zugNummer == 9) {
Zug.zugNummer = 0; Zug.zugNummer = 0;
} }
Zug.zugNummer++; Zug.zugNummer++;
f.setTitle(spieler.getName() + " ist dran!"); Zug.f.setzeTitel(spieler.getName() + " ist dran!");
Zug.setZugLaeuft(true); Zug.setZugLaeuft(true);
@ -58,6 +63,11 @@ public class Zug {
} }
} }
public static void restartZug() {
macheZug(Zug.spieler);
Zug.zugNummer--;
}
public static int getZugNummer() { public static int getZugNummer() {
return zugNummer; return zugNummer;
} }
@ -70,31 +80,15 @@ public class Zug {
Zug.zugLaeuft = zugLaeuft; 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 Fenster f;
private Frame f;
private Feld feld; private Feld feld;
private Spieler spieler; private Spieler spieler;
public CustomMouseListener(Frame f, Feld feld) { public CustomMouseListener(Fenster f, Feld feld) {
this.f = f; this.f = f;
this.feld = feld; this.feld = feld;
} }
@ -107,30 +101,8 @@ class CustomMouseListener implements MouseListener {
@Override @Override
public void mouseClicked(MouseEvent mouseEvent) { public void mouseClicked(MouseEvent mouseEvent) {
this.feld.setZeichen(spieler.getForm()); this.feld.setZeichen(spieler.getForm());
f.repaint();
Zug.setZugLaeuft(false); 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) {
}
} }

View File

@ -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();
}
}
}
}
}

View File

@ -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);
}
});
}
}