Compare commits
25 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
006b75777b | |
|
|
ab82d1e3df | |
|
|
840548bc0e | |
|
|
e7b4516428 | |
|
|
41d8b740cf | |
|
|
2a81a0342e | |
|
|
89438dc9f3 | |
|
|
ec98c10687 | |
|
|
e2933504b9 | |
|
|
69f04e1aac | |
|
|
29a3c3e279 | |
|
|
963cf53470 | |
|
|
0544bb3195 | |
|
|
83904c8ab3 | |
|
|
c938905f13 | |
|
|
a1eec972b4 | |
|
|
27064ad61f | |
|
|
7b868e4d40 | |
|
|
15f1618fcf | |
|
|
736a0712db | |
|
|
bd5c773204 | |
|
|
2f2365a025 | |
|
|
cd12f97073 | |
|
|
c81536f941 | |
|
|
4bd7f0fdb1 |
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 Marc Michalsky
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
Binary file not shown.
|
|
@ -1,6 +1,8 @@
|
||||||
package gfn.marc;
|
package gfn.marc;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
public class Feld {
|
public class Feld {
|
||||||
private static int feldAnzahl = 0;
|
private static int feldAnzahl = 0;
|
||||||
|
|
@ -39,6 +41,17 @@ public class Feld {
|
||||||
((int) (rechteck.getPara3() * 0.8)),
|
((int) (rechteck.getPara3() * 0.8)),
|
||||||
((int) (rechteck.getPara4() * 0.8)));
|
((int) (rechteck.getPara4() * 0.8)));
|
||||||
|
|
||||||
|
this.label.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
super.mouseClicked(e);
|
||||||
|
if (!gesetzt && Zug.isZugLaeuft()) {
|
||||||
|
setZeichen(Spiel.getZug().getSpieler().getForm());
|
||||||
|
Zug.setZugLaeuft(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setZeichen(Form form) {
|
public void setZeichen(Form form) {
|
||||||
|
|
@ -61,6 +74,10 @@ public class Feld {
|
||||||
return rechteck;
|
return rechteck;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRechteck(Rechteck rechteck) {
|
||||||
|
this.rechteck = rechteck;
|
||||||
|
}
|
||||||
|
|
||||||
public Kreuz getKreuz() {
|
public Kreuz getKreuz() {
|
||||||
return kreuz;
|
return kreuz;
|
||||||
}
|
}
|
||||||
|
|
@ -84,4 +101,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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,18 @@
|
||||||
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;
|
private static Zug zug;
|
||||||
|
|
||||||
|
|
||||||
Spiel(Frame f, Spielfeld spielfeld) throws InterruptedException {
|
Spiel(Fenster f) throws InterruptedException {
|
||||||
|
|
||||||
this.f = f;
|
this.f = f;
|
||||||
|
|
||||||
|
|
@ -106,37 +107,35 @@ 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
|
||||||
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 == null || !Zug.isZugLaeuft()) {
|
||||||
|
zug = new Zug();
|
||||||
|
}
|
||||||
if (Zug.getZugNummer() % 2 == 0) {
|
if (Zug.getZugNummer() % 2 == 0) {
|
||||||
if (startSpieler <= 0.5d) {
|
if (startSpieler <= 0.5d) {
|
||||||
Zug.macheZug(spieler1);
|
zug.macheZug(spieler1);
|
||||||
} else {
|
} else {
|
||||||
Zug.macheZug(spieler2);
|
zug.macheZug(spieler2);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (startSpieler > 0.5d) {
|
if (startSpieler > 0.5d) {
|
||||||
Zug.macheZug(spieler1);
|
zug.macheZug(spieler1);
|
||||||
} else {
|
} else {
|
||||||
Zug.macheZug(spieler2);
|
zug.macheZug(spieler2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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 +154,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 +161,12 @@ public class Spiel {
|
||||||
public Spieler getSpieler2() {
|
public Spieler getSpieler2() {
|
||||||
return spieler2;
|
return spieler2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Fenster getF() {
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Zug getZug() {
|
||||||
|
return Spiel.zug;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,57 @@ 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 reset() {
|
||||||
return f;
|
for (int i = 0; i < felder.length; i++) {
|
||||||
|
felder[i].setGesetzt(false);
|
||||||
|
felder[i].getRechteck().setGewinnerFeld(false);
|
||||||
|
felder[i].getKreuz().setSichtbar(false);
|
||||||
|
felder[i].getKreis().setSichtbar(false);
|
||||||
|
f.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSpielfeldExistiert() {
|
|
||||||
return spielfeldExistiert;
|
|
||||||
}
|
}
|
||||||
|
public void resizeFelder(int spielfeldgroesse) {
|
||||||
public void setSpielfeldExistiert(boolean spielfeldExistiert) {
|
int quadrant = (spielfeldgroesse / 3);
|
||||||
this.spielfeldExistiert = spielfeldExistiert;
|
int k = 0;
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
for (int j = 0; j < 3; j++) {
|
||||||
|
felder[k].setRechteck(new Rechteck(((quadrant * j) + KORREKTUR_X), (KORREKTUR_Y + (quadrant * i)),
|
||||||
|
quadrant, quadrant));
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < felder.length; i++) {
|
||||||
|
felder[i].getLabel().setBounds((felder[i].getRechteck().getPara1() - Spielfeld.KORREKTUR_X),
|
||||||
|
(felder[i].getRechteck().getPara2() - Spielfeld.KORREKTUR_Y),
|
||||||
|
felder[i].getRechteck().getPara3(), felder[i].getRechteck().getPara4());
|
||||||
|
felder[i].getKreis().setPara1((int) (felder[i].getRechteck().getPara1() +
|
||||||
|
(0.1 * felder[i].getRechteck().getPara3())));
|
||||||
|
felder[i].getKreis().setPara2((int) (felder[i].getRechteck().getPara2() +
|
||||||
|
(0.1 * felder[i].getRechteck().getPara4())));
|
||||||
|
felder[i].getKreis().setPara3((int) (felder[i].getRechteck().getPara3() * 0.8));
|
||||||
|
felder[i].getKreis().setPara4((int) (felder[i].getRechteck().getPara4() * 0.8));
|
||||||
|
|
||||||
|
felder[i].getKreuz().setPara1((int)(felder[i].getRechteck().getPara1() +
|
||||||
|
(felder[i].getRechteck().getPara3() * 0.1)));
|
||||||
|
felder[i].getKreuz().setPara2((int) (felder[i].getRechteck().getPara2() +
|
||||||
|
(felder[i].getRechteck().getPara4() * 0.1)));
|
||||||
|
felder[i].getKreuz().setPara3((int) (felder[i].getRechteck().getPara1() +
|
||||||
|
(felder[i].getRechteck().getPara3() * 0.9)));
|
||||||
|
felder[i].getKreuz().setPara4((int) (felder[i].getRechteck().getPara2() +
|
||||||
|
(felder[i].getRechteck().getPara4() * 0.9)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,116 +1,50 @@
|
||||||
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 boolean DEBUG = true;
|
||||||
static Frame f;
|
static Thread spiel = new Thread(new Runnable() {
|
||||||
static int fensterGroesse;
|
@Override
|
||||||
static Spielfeld spielfeld;
|
public void run() {
|
||||||
static Spiel spiel;
|
|
||||||
static boolean DEBUG = false;
|
|
||||||
|
|
||||||
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!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Spiel starten
|
|
||||||
try {
|
try {
|
||||||
|
f = new Fenster();
|
||||||
boolean nochEinSpiel = true;
|
boolean nochEinSpiel = true;
|
||||||
while (nochEinSpiel) {
|
while (nochEinSpiel) {
|
||||||
|
|
||||||
f = new TicTacToe();
|
nochEinSpiel = new Spiel(f).spielen();
|
||||||
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);
|
|
||||||
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);
|
f.getSpielfeld().reset();
|
||||||
f = null;
|
|
||||||
}
|
}
|
||||||
} catch (InterruptedException ie) {
|
} catch (InterruptedException ie) {
|
||||||
System.err.println("Da ist was schief gelaufen!");
|
System.err.println("Da ist was schief gelaufen!");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException, InterruptedException {
|
||||||
|
|
||||||
|
// Laden der Spielstände
|
||||||
|
Speicher.spielstaendeEinlesen();
|
||||||
|
|
||||||
|
// Spiel starten
|
||||||
|
spiel.start();
|
||||||
|
spiel.join();
|
||||||
Speicher.spielstaendeSpeichern();
|
Speicher.spielstaendeSpeichern();
|
||||||
System.exit(0); // sofortiges Programmende
|
System.exit(0); // sofortiges Programmende
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,136 +1,57 @@
|
||||||
package gfn.marc;
|
package gfn.marc;
|
||||||
|
|
||||||
import java.awt.*;
|
import gfn.marc.gui.Fenster;
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.event.MouseListener;
|
|
||||||
|
|
||||||
public class Zug {
|
public class Zug {
|
||||||
|
|
||||||
private static Frame f;
|
private Fenster f = TicTacToe.getF();
|
||||||
private static Spielfeld spielfeld;
|
|
||||||
private static int zugNummer = 0;
|
private static int zugNummer = 0;
|
||||||
|
private Spieler spieler;
|
||||||
private static boolean zugLaeuft;
|
private static boolean zugLaeuft;
|
||||||
private static CustomMouseListener[] cmls = new CustomMouseListener[9];
|
|
||||||
|
|
||||||
public Zug() {
|
public Zug() {
|
||||||
Zug.spielfeld = TicTacToe.getSpielfeld();
|
|
||||||
Zug.f = TicTacToe.getF();
|
|
||||||
createMouseListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zuganzahl hochzählen und Titelleiste setzen
|
|
||||||
public static void macheZug(Spieler spieler) {
|
|
||||||
if (zugNummer == 9) {
|
if (zugNummer == 9) {
|
||||||
Zug.zugNummer = 0;
|
Zug.zugNummer = 0;
|
||||||
}
|
}
|
||||||
Zug.zugNummer++;
|
Zug.zugNummer++;
|
||||||
f.setTitle(spieler.getName() + " ist dran!");
|
}
|
||||||
|
|
||||||
|
public static void setZugNummer(int zugNummer) {
|
||||||
|
Zug.zugNummer = zugNummer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zuganzahl hochzählen und Titelleiste setzen
|
||||||
|
public void macheZug(Spieler spieler) {
|
||||||
|
this.spieler = spieler;
|
||||||
|
this.f.setzeTitel(spieler.getName() + " ist dran!");
|
||||||
Zug.setZugLaeuft(true);
|
Zug.setZugLaeuft(true);
|
||||||
|
|
||||||
|
|
||||||
// Mouselistener auf Felder setzen, die noch nicht gesetzt wurden
|
|
||||||
for (int i = 0; i < spielfeld.getFelder().length; i++) {
|
|
||||||
if (!spielfeld.getFelder()[i].isGesetzt()) {
|
|
||||||
cmls[i].setSpieler(spieler);
|
|
||||||
spielfeld.getFelder()[i].getLabel().addMouseListener(cmls[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Auf setzen eines Feldes warten
|
// Auf setzen eines Feldes warten
|
||||||
while (Zug.isZugLaeuft()) {
|
while (Zug.isZugLaeuft()) {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(200);
|
Thread.sleep(200);
|
||||||
} catch (InterruptedException ie) {
|
} catch (InterruptedException ie) {
|
||||||
break;
|
System.err.println("Schleife abgebrochen");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MouseListener von allen Feldern entfernen
|
|
||||||
for (int i = 0; i < spielfeld.getFelder().length; i++) {
|
|
||||||
spielfeld.getFelder()[i].getLabel().removeMouseListener(cmls[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void createMouseListeners() {
|
|
||||||
for (int i = 0; i < spielfeld.getFelder().length; i++) {
|
|
||||||
cmls[i] = new CustomMouseListener(f, spielfeld.getFelder()[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getZugNummer() {
|
public static int getZugNummer() {
|
||||||
return zugNummer;
|
return zugNummer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Spieler getSpieler() {
|
||||||
|
return spieler;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isZugLaeuft() {
|
public static boolean isZugLaeuft() {
|
||||||
return zugLaeuft;
|
return Zug.zugLaeuft;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setZugLaeuft(boolean zugLaeuft) {
|
public static void setZugLaeuft(boolean zugLaeuft) {
|
||||||
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 implements MouseListener {
|
|
||||||
|
|
||||||
private Frame f;
|
|
||||||
private Feld feld;
|
|
||||||
private Spieler spieler;
|
|
||||||
|
|
||||||
public CustomMouseListener(Frame f, Feld feld) {
|
|
||||||
this.f = f;
|
|
||||||
this.feld = feld;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSpieler(Spieler spieler) {
|
|
||||||
this.spieler = spieler;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Auf Setzen des Feldes prüfen und ggf. Form zeichnen lassen
|
|
||||||
@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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,136 @@
|
||||||
|
package gfn.marc.gui;
|
||||||
|
|
||||||
|
import gfn.marc.Feld;
|
||||||
|
import gfn.marc.Speicher;
|
||||||
|
import gfn.marc.Spielfeld;
|
||||||
|
|
||||||
|
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 JFrame implements ActionListener {
|
||||||
|
|
||||||
|
private final MyPanel myPanel;
|
||||||
|
private Spielfeld spielfeld;
|
||||||
|
private int fenstergroesse;
|
||||||
|
|
||||||
|
// Menüleiste
|
||||||
|
private JMenuBar menue;
|
||||||
|
|
||||||
|
// Menüleiste Elemente
|
||||||
|
private JMenu optionen;
|
||||||
|
|
||||||
|
// Datei
|
||||||
|
private final JMenuItem optionFenstergroesse;
|
||||||
|
private final JMenuItem loescheSpielstaende;
|
||||||
|
|
||||||
|
public Fenster() {
|
||||||
|
this.setzeTitel("Tic Tac Toe");
|
||||||
|
this.fenstergroesse = 600;
|
||||||
|
this.myPanel = new MyPanel();
|
||||||
|
this.getContentPane().add(this.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.add(menue, BorderLayout.NORTH);
|
||||||
|
|
||||||
|
this.setSize(fenstergroesse, fenstergroesse + 50);
|
||||||
|
this.addWindowListener(new WindowAdapter() {
|
||||||
|
public void windowClosing(WindowEvent e) {
|
||||||
|
try {
|
||||||
|
Speicher.spielstaendeSpeichern();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
System.exit(0); // sofortiges Programmende
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.setLocationRelativeTo(null);
|
||||||
|
this.setResizable(false);
|
||||||
|
this.spielfeld = new Spielfeld(this);
|
||||||
|
this.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 setzeTitel(String titel) {
|
||||||
|
this.setTitle(titel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setzeFenstergroesse(int fenstergroesse) {
|
||||||
|
this.fenstergroesse = fenstergroesse;
|
||||||
|
this.setSize(fenstergroesse, fenstergroesse + 50);
|
||||||
|
this.spielfeld.resizeFelder(fenstergroesse);
|
||||||
|
this.myPanel.repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Spielfeld getSpielfeld() {
|
||||||
|
return spielfeld;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFenstergroesse() {
|
||||||
|
return this.fenstergroesse;
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyPanel extends JPanel {
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,124 @@
|
||||||
|
package gfn.marc.gui;
|
||||||
|
|
||||||
|
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(hauptfenster.getFenstergroesse() + " × " + hauptfenster.getFenstergroesse());
|
||||||
|
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.setValue(hauptfenster.getFenstergroesse());
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.buttonZuruecksetzen.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
hauptfenster.setzeFenstergroesse(600);
|
||||||
|
schiebereglerFenstergroesse.setValue(600);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue