package UI;
import javax.swing.*;
import GC.Move;
import GC.Position;
import java.awt.*;
import java.awt.event.*;
public class GUI_chess extends JApplet {
private static final long serialVersionUID = 1L;
private JPanel jContentPane;
private JLabel title, labelBW;
private boolean black;// true = black spieler, false = white spieler
private JButton currentPiece;
static private int fieldNumber;// für feldnummerierung
static int zahl, farbe, zahl2;
static int feld[][] = new int[4][4];
static Position from;
static Position to;
public Move bewegung = new Move(from, to);
public GUI_chess(int player) {
switch (player) {
case 1:
this.black = false;
break;
case 2:
this.black = true;
break;
default:
System.out.println("Ungültig");
}
}
public void welcherSpieler(int player) {
switch (player) {
case 1:
this.black = false;
break;
case 2:
this.black = true;
break;
default:
System.out.println("Ungültig");
}
}
@Override
public void init() {
// Feldinitialisierung Anfangswert
feld[3][0] = 2;
feld[3][1] = 2;
feld[3][2] = 2;
feld[3][3] = 2;
feld[2][0] = 0;
feld[2][1] = 0;
feld[2][2] = 0;
feld[2][3] = 0;
feld[1][0] = 0;
feld[1][1] = 0;
feld[1][2] = 0;
feld[1][3] = 0;
feld[0][0] = 1;
feld[0][1] = 1;
feld[0][2] = 1;
feld[0][3] = 1;
try {
// applet mit "invokeAndWait" aufgerufen
// um probleme im browser zu umgehen:
EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
private JButton getPiece(final int x, final int y, final boolean bl) {
final JButton piece = new JButton();
piece.setBounds(new Rectangle(x, y, 20, 20));
if (bl) {
piece.setIcon(new ImageIcon("bauerb.jpg"));
piece.setName("black");// farbe der figur in attribut name
// gespeichert
} else {
piece.setIcon(new ImageIcon("bauerw.jpg"));
piece.setName("white");
}
piece.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(final MouseEvent e) {
// gib den namen der figur zurück (farbe):
String pieceColor = piece.getName();
if ((black && pieceColor.equals("white"))
|| (!black && pieceColor.equals("black"))) {
// falls der spieler auf eine figur der jeweiligen farbe
// klickt,
// der event wird auf das näcshte feld weitergeleitet
piece.getParent().dispatchEvent(e);
} else {
// falls der spieler auf eine figur derselben farbe klickt,
// wird die figur in currentpiece gespeichert
currentPiece = piece;
// zeige spielertext mit aktueller feldnummer
// JComponent currentField = (JComponent) currentPiece
// .getParent();
labelBW.setText(black ? "Schwarz am Zug! "
: "Weiß am Zug! ");
}
}
});
return piece;
}
private JPanel getField(final int x, final int y, final Color color) {
final JPanel toField = new JPanel(null);
toField.setBounds(new Rectangle(x, y, 40, 40));
toField.setBackground(color);
fieldNumber++; // nächste feldnummer
// speichere die feldnummer in dem namensattribut der vairable toField
toField.setName(String.valueOf(fieldNumber));
toField.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(final MouseEvent e) {
if (currentPiece != null) {
JComponent fromField = (JComponent) currentPiece
.getParent();
// falls durch isMoveAllowed ein zug gestattet ist, bewege
// figur
if (isMoveAllowed(fromField, toField)) {
move(fromField, toField);
}
}
}
private boolean isMoveAllowed(final JComponent fromField,
final JPanel toField) {
String currentPieceColor = currentPiece.getName();
JComponent toPiece = null;
boolean allowed = false;
int y, y2;
// Koordinaten des zuletzt angeklickten feldes
y = toField.getLocation().y;
// Koordinaten des zuvor zuletzt angeklickten feldes
y2 = fromField.getLocation().y;
if (toField.getComponentCount() > 0) {
toPiece = (JComponent) toField.getComponent(0);
}
// ein zug ist erlaubt wenn fromField nicht identisch mit
// toField ist
// currentPiece hat die gleiche farbe wie Spieler (black oder
// white)
// toField ist nicht belegt mit einer figur derselben farbe
if ((fromField != toField)
// regeln um nich zurück zu springen
&& ((y > y2 && black) || (y < y2 && !black))
&& ((black && currentPieceColor.equals("black")) || (!black && currentPieceColor
.equals("white")))
&& (toPiece == null || !toPiece.getName().equals(
currentPieceColor))) {
// distanz zwischen letzten und jetztigen feld
int distance = (int) fromField.getLocation().distance(
toField.getLocation());
// int zahl der aktuellen feldnummer
int zahl2 = Integer.valueOf(toField.getName());
int color = 0;
// überprüfung welches feld angewählt wird
if (zahl2 == 1)
color = feld[3][0];
if (zahl2 == 2)
color = feld[3][1];
if (zahl2 == 3)
color = feld[3][2];
if (zahl2 == 4)
color = feld[3][3];
if (zahl2 == 5)
color = feld[2][0];
if (zahl2 == 6)
color = feld[2][1];
if (zahl2 == 7)
color = feld[2][2];
if (zahl2 == 8)
color = feld[2][3];
if (zahl2 == 9)
color = feld[1][0];
if (zahl2 == 10)
color = feld[1][1];
if (zahl2 == 11)
color = feld[1][2];
if (zahl2 == 12)
color = feld[1][3];
if (zahl2 == 13)
color = feld[0][0];
if (zahl2 == 14)
color = feld[0][1];
if (zahl2 == 15)
color = feld[0][2];
if (zahl2 == 16)
color = feld[0][3];
// regeln zum sprung diagonal zum schlagen , oder um nach
// vorne zu springen
if (black && distance == 56 && color == 1) {
allowed = true;
} else if (!black && distance == 56 && color == 2) {
allowed = true;
} else if (black && distance == 40 && color != 2
&& color != 1) {
allowed = true;
} else if (!black && distance == 40 && color != 2
&& color != 1) {
allowed = true;
} else {
allowed = false;
labelBW.setText("ungültiger Zug!!!");
}
}
return allowed;
}
@SuppressWarnings("deprecation")
private void move(final JComponent fromField, final JPanel toField) {
// aktionen die bei zug getätigt werden
fromField.remove(currentPiece); // damit beim letzten feld keine
// figur steht
toField.removeAll();
toField.add(currentPiece); // jetztiges feld bekommt figur des
// letzten feldes
// wechsel spieler
black = !black;// true = black spieler, false = white spieler
labelBW.setText(black ? "Schwarz am Zug! " : "Weiß am Zug! ");
// zeige spieler text
fromField.repaint();
toField.repaint();
// zugriff auf Situation UI und rückgabe der zug-bewegung
SituationUI obbi = new SituationUI();
int x = 0, y = 0;
int x2 = 0, y2 = 0;
switch (Integer.valueOf(fromField.getName())) {
case 1:
x = 0;
y = 3;
break;
case 2:
x = 1;
y = 3;
break;
case 3:
x = 2;
y = 3;
break;
case 4:
x = 3;
y = 3;
break;
case 5:
x = 0;
y = 2;
break;
case 6:
x = 1;
y = 2;
break;
case 7:
x = 2;
y = 2;
break;
case 8:
x = 3;
y = 2;
break;
case 9:
x = 0;
y = 1;
break;
case 10:
x = 1;
y = 1;
break;
case 11:
x = 2;
y = 1;
break;
case 12:
x = 3;
y = 1;
break;
case 13:
x = 0;
y = 0;
break;
case 14:
x = 1;
y = 0;
break;
case 15:
x = 2;
y = 0;
break;
case 16:
x = 3;
y = 0;
break;
default:
}
switch (Integer.valueOf(toField.getName())) {
case 1:
x2 = 0;
y2 = 3;
break;
case 2:
x2 = 1;
y2 = 3;
break;
case 3:
x2 = 2;
y2 = 3;
break;
case 4:
x2 = 3;
y2 = 3;
break;
case 5:
x2 = 0;
y2 = 2;
break;
case 6:
x2 = 1;
y2 = 2;
break;
case 7:
x2 = 2;
y2 = 2;
break;
case 8:
x2 = 3;
y2 = 2;
break;
case 9:
x2 = 0;
y2 = 1;
break;
case 10:
x2 = 1;
y2 = 1;
break;
case 11:
x2 = 2;
y2 = 1;
break;
case 12:
x2 = 3;
y2 = 1;
break;
case 13:
x2 = 0;
y2 = 0;
break;
case 14:
x2 = 1;
y2 = 0;
break;
case 15:
x2 = 2;
y2 = 0;
break;
case 16:
x2 = 3;
y2 = 0;
break;
default:
}
from = new Position(x, y);
to = new Position(x2, y2);
// methode SpielerBewegungFestlegen wird aufgerufen und from und
// to übergeben
// aktuelle int feldnummern von letzten und aktuellen feld
zahl = Integer.valueOf(toField.getName());
zahl2 = Integer.valueOf(fromField.getName());
// überprüfung ob aktuelle angewählte figur weiss oder schwarz
// oder nichts ist
if (currentPiece.getName().equals("white")) {
farbe = 1;
} else if (currentPiece.getName().equals("black")) {
farbe = 2;
} else
farbe = 0;
// fromField bekommt bei zug 0 wert
if (zahl2 == 1)
feld[3][0] = 0;
if (zahl2 == 2)
feld[3][1] = 0;
if (zahl2 == 3)
feld[3][2] = 0;
if (zahl2 == 4)
feld[3][3] = 0;
if (zahl2 == 5)
feld[2][0] = 0;
if (zahl2 == 6)
feld[2][1] = 0;
if (zahl2 == 7)
feld[2][2] = 0;
if (zahl2 == 8)
feld[2][3] = 0;
if (zahl2 == 9)
feld[1][0] = 0;
if (zahl2 == 10)
feld[1][1] = 0;
if (zahl2 == 11)
feld[1][2] = 0;
if (zahl2 == 12)
feld[1][3] = 0;
if (zahl2 == 13)
feld[0][0] = 0;
if (zahl2 == 14)
feld[0][1] = 0;
if (zahl2 == 15)
feld[0][2] = 0;
if (zahl2 == 16)
feld[0][3] = 0;
// ////////////////////////////////////////////////////////////////////
// farbe für die aktuellen feldern
if (zahl == 1)
feld[3][0] = farbe;
if (zahl == 2)
feld[3][1] = farbe;
if (zahl == 3)
feld[3][2] = farbe;
if (zahl == 4)
feld[3][3] = farbe;
if (zahl == 5)
feld[2][0] = farbe;
if (zahl == 6)
feld[2][1] = farbe;
if (zahl == 7)
feld[2][2] = farbe;
if (zahl == 8)
feld[2][3] = farbe;
if (zahl == 9)
feld[1][0] = farbe;
if (zahl == 10)
feld[1][1] = farbe;
if (zahl == 11)
feld[1][2] = farbe;
if (zahl == 12)
feld[1][3] = farbe;
if (zahl == 13)
feld[0][0] = farbe;
if (zahl == 14)
feld[0][1] = farbe;
if (zahl == 15)
feld[0][2] = farbe;
if (zahl == 16)
feld[0][3] = farbe;
}
});
return toField;
}
public int[][] Spielfeld() {
// Wert 0 = Spielfeld leer
// Wert 1 = Weißer Bauer auf Feld
// Wert 2 = Schwarzer Bauer auf Feld
return feld;
}
private void initComponents() {
labelBW = new JLabel();
labelBW.setBounds(new Rectangle(71, 268, 158, 16));
labelBW.setHorizontalAlignment(SwingConstants.CENTER);
labelBW.setHorizontalTextPosition(SwingConstants.CENTER);
labelBW.setText("Weiß am Zug!");
title = new JLabel();
title.setBounds(new Rectangle(68, 39, 161, 16));
title.setHorizontalAlignment(SwingConstants.CENTER);
title.setHorizontalTextPosition(SwingConstants.CENTER);
title.setFont(new Font("Dialog", Font.BOLD | Font.ITALIC, 14));
title.setText("Mini-Chess");
// anstatt ein neues contentpane zu machen,
// nehmen wir das im applet bereits vorhandene:
jContentPane = (JPanel) getContentPane();
jContentPane.setLayout(null);
jContentPane.setSize(new Dimension(282, 303));
// die ersten 4 felder:
JPanel field1 = getField(70, 96, Color.WHITE);
JPanel field2 = getField(110, 96, Color.BLACK);
JPanel field3 = getField(150, 96, Color.WHITE);
JPanel field4 = getField(190, 96, Color.BLACK);
// hinzufügen der schwarzen figuren zu den ersten 4 feldern
field1.add(getPiece(10, 10, true));// true = black
field2.add(getPiece(10, 10, true));// true = black
field3.add(getPiece(10, 10, true));// true = black
field4.add(getPiece(10, 10, true));// true = black
// die ersten 4 felder zum contenpane hinzufügen
jContentPane.add(field1);
jContentPane.add(field2);
jContentPane.add(field3);
jContentPane.add(field4);
// hinzufügen der leeren felder zum contentpane:
jContentPane.add(getField(70, 136, Color.BLACK));
jContentPane.add(getField(110, 136, Color.WHITE));
jContentPane.add(getField(150, 136, Color.BLACK));
jContentPane.add(getField(190, 136, Color.WHITE));
jContentPane.add(getField(70, 176, Color.WHITE));
jContentPane.add(getField(110, 176, Color.BLACK));
jContentPane.add(getField(150, 176, Color.WHITE));
jContentPane.add(getField(190, 176, Color.BLACK));
// die letzten 4 felder:
JPanel field1a = getField(70, 216, Color.BLACK);
JPanel field2a = getField(110, 216, Color.WHITE);
JPanel field3a = getField(150, 216, Color.BLACK);
JPanel field4a = getField(190, 216, Color.WHITE);
// hinzufügen der weissen figuren zu den letzten 4 feldern:
field1a.add(getPiece(10, 10, false));// false = white
field2a.add(getPiece(10, 10, false));// false = white
field3a.add(getPiece(10, 10, false));// false = white
field4a.add(getPiece(10, 10, false));// false = white
// füge dem ContentPane die 4 figuren zu:
jContentPane.add(field1a);
jContentPane.add(field2a);
jContentPane.add(field3a);
jContentPane.add(field4a);
// hinzufügen vom titel label und spieler label zum ContentPane:
jContentPane.add(title);
jContentPane.add(labelBW);
jContentPane.setVisible(true);
setSize(300, 300);
}
}