Feld rotieren funktioniert

devFeldRotieren
Matias Mas Viehl 2025-06-24 16:06:35 +02:00
parent 6d1aa274ac
commit 82a10a46fc
3 changed files with 91 additions and 75 deletions

View File

@ -42,6 +42,11 @@ public class ButtonMovePieceListener implements ActionListener {
} }
this.sf.setBoardMode(BoardMode.normal); this.sf.setBoardMode(BoardMode.normal);
this.sf.setCursor(null); this.sf.setCursor(null);
//hier rotieren markieren
if(game.isRotieren())sf.setWechsel(!sf.isWechsel());
this.sf.erstelleBrett(); this.sf.erstelleBrett();
if (game.getLastMove() != null) { if (game.getLastMove() != null) {

View File

@ -13,7 +13,6 @@ import com.github.bhlangonijr.chesslib.Side;
import com.github.bhlangonijr.chesslib.Square; import com.github.bhlangonijr.chesslib.Square;
import com.github.bhlangonijr.chesslib.move.Move; import com.github.bhlangonijr.chesslib.move.Move;
import com.github.bhlangonijr.chesslib.move.MoveList; import com.github.bhlangonijr.chesslib.move.MoveList;
import com.github.bhlangonijr.chesslib.pgn.PgnHolder;
import de.mannheim.th.chess.App; import de.mannheim.th.chess.App;
import de.mannheim.th.chess.ui.SpielFrame; import de.mannheim.th.chess.ui.SpielFrame;

View File

@ -54,6 +54,7 @@ public class SpielFrame extends JFrame {
private Game game; private Game game;
private Clock clock; private Clock clock;
private ArrayList<String> anzeigeMoves = new ArrayList<String>(); private ArrayList<String> anzeigeMoves = new ArrayList<String>();
private boolean wechsel = false;
private BoardMode mode; private BoardMode mode;
private Square selectedSquare; private Square selectedSquare;
@ -87,10 +88,6 @@ public class SpielFrame extends JFrame {
erstelleBrett(); erstelleBrett();
if(game.isRotieren()) {
}
// Rechtes Panel für Steuerung oder zusätzliche Eingaben // Rechtes Panel für Steuerung oder zusätzliche Eingaben
panelRechts = new JPanel(); panelRechts = new JPanel();
panelRechts.setBackground(new Color(90, 90, 90)); panelRechts.setBackground(new Color(90, 90, 90));
@ -141,32 +138,36 @@ public class SpielFrame extends JFrame {
* holt sich FEN-Zeichenkette und extrahiert daraus die Positionen der Figuren * holt sich FEN-Zeichenkette und extrahiert daraus die Positionen der Figuren
*/ */
private void ladeBrett() { private void ladeBrett() {
// System.out.println(game.toFEN());
char[] fen = game.toFEN().replaceAll("/", "").split(" ")[0].toCharArray(); char[] fen = game.toFEN().replaceAll("/", "").split(" ")[0].toCharArray();
int i = 0; int i = 0;
for (int j = 0; j < fen.length; j++) { for (int j = 0; j < fen.length; j++) {
if (Character.isDigit(fen[j])) { if (Character.isDigit(fen[j])) {
int leerfelder = Character.getNumericValue(fen[j]); int leerfelder = Character.getNumericValue(fen[j]);
for (int k = 0; k < leerfelder; k++) { for (int k = 0; k < leerfelder; k++) {
belegungen.put(buttons.get(i), "n-n"); int idx;
// buttons.get(i).setEnabled(false); // erstmal deaktivieren, weil leere Felder if(game.isRotieren()) idx = wechsel ? mirrowedGrid(i) : i;
// nicht ckickbar sein sollten. else idx = i;
belegungen.put(buttons.get(idx), "n-n");
i++; i++;
} }
continue; continue;
} else if (fen[j] >= 65 && fen[j] <= 90) { // ein Großbuchstabe, also } else if (fen[j] >= 65 && fen[j] <= 90) { // Großbuchstabe = weiß
belegungen.put(buttons.get(i), "w-" + fen[j]); int idx;
} else if (fen[j] >= 97 && fen[j] <= 122) { // ein Kleinbuchstabe, also if(game.isRotieren()) idx = wechsel ? mirrowedGrid(i) : i;
belegungen.put(buttons.get(i), "b-" + fen[j]); else idx = i;
// buttons.get(i).setEnabled(false); // erstmal deaktivieren, damit weiß belegungen.put(buttons.get(idx), "w-" + fen[j]);
// beginnen kann } else if (fen[j] >= 97 && fen[j] <= 122) { // Kleinbuchstabe = schwarz
int idx;
if(game.isRotieren()) idx = wechsel ? mirrowedGrid(i) : i;
else idx = i;
belegungen.put(buttons.get(idx), "b-" + fen[j]);
} }
buttons.get(i).setIcon(new ImageIcon("src/main/resources/" + (int) fen[j] + ".png")); int idx;
buttons.get(i).setDisabledIcon(new ImageIcon("src/main/resources/" + (int) fen[j] + ".png")); if(game.isRotieren()) idx = wechsel ? mirrowedGrid(i) : i;
else idx = i;
buttons.get(idx).setIcon(new ImageIcon("src/main/resources/" + (int) fen[j] + ".png"));
buttons.get(idx).setDisabledIcon(new ImageIcon("src/main/resources/" + (int) fen[j] + ".png"));
i++; i++;
} }
} }
@ -216,60 +217,63 @@ public class SpielFrame extends JFrame {
* Switches the button actions depending on the boardmode * Switches the button actions depending on the boardmode
*/ */
public void setButtonsActions() { public void setButtonsActions() {
List<Square> selectables;
List<Square> selectables; switch (this.mode) {
case normal:
selectables = game.getAllLegalMoveableSquares();
for (Square square : selectables) {
int idx;
switch (this.mode) { if(game.isRotieren()) idx = wechsel ? square.ordinal() : mirrowedGrid(square.ordinal());
case BoardMode.normal: else idx = this.mirrowedGrid(square.ordinal());
selectables = game.getAllLegalMoveableSquares(); JButton b = buttons.get(idx);
b.setEnabled(true);
b.addActionListener(new ButtonSelectPieceListener(this, square));
}
break;
for (Square square : selectables) { case pieceSelected:
JButton b = buttons.get(mirrowedGrid(square.ordinal())); int idxSelected;
b.setEnabled(true);
// b.setBackground(Color.green);
b.addActionListener(new ButtonSelectPieceListener(this, square));
}
break; if(game.isRotieren())idxSelected = wechsel ? selectedSquare.ordinal() : mirrowedGrid(selectedSquare.ordinal());
else idxSelected = mirrowedGrid(selectedSquare.ordinal());
case BoardMode.pieceSelected: JButton s = buttons.get(idxSelected);
s.setEnabled(true);
s.setBackground(new Color(165, 42, 42));
s.addActionListener(new ButtonToNormalListener(this));
JButton s = buttons.get(mirrowedGrid(selectedSquare.ordinal())); selectables = game.getLegalMoveableSquares(selectedSquare);
s.setEnabled(true); for (Square square : selectables) {
s.setBackground(new Color(165, 42, 42)); int idx;
s.addActionListener(new ButtonToNormalListener(this)); if(game.isRotieren()) idx = wechsel ? square.ordinal() : mirrowedGrid(square.ordinal());
else idx = mirrowedGrid(square.ordinal());
final Move move = new Move(selectedSquare, square);
JButton b = buttons.get(idx);
b.setEnabled(true);
b.setBackground(new Color(230, 100, 100));
b.addActionListener(new ButtonMovePieceListener(this, this.game, move));
}
break;
selectables = game.getLegalMoveableSquares(selectedSquare); case finished:
clearButtons();
break;
for (Square square : selectables) { case gameEnd:
JButton b = buttons.get(mirrowedGrid(square.ordinal())); panelLinks.setEnabled(false);
final Move move = new Move(selectedSquare, square); panelRechts.setEnabled(false);
b.setEnabled(true); break;
b.setBackground(new Color(230, 100, 100));
b.addActionListener(new ButtonMovePieceListener(this, this.game, move));
}
break;
case finished:
clearButtons();
break; default:
case gameEnd: break;
}
//alle Eingabemöglichkeiten deaktivieren for (JButton b : buttons) {
panelLinks.setEnabled(false); panelLinks.add(b);
panelRechts.setEnabled(false); }
break;
default:
break;
}
for (JButton b : buttons) {
panelLinks.add(b);
}
} }
public void showWin(int player) { public void showWin(int player) {
@ -289,7 +293,7 @@ public class SpielFrame extends JFrame {
ausgabe.setFont(new Font("Calibri", Font.BOLD, 40)); ausgabe.setFont(new Font("Calibri", Font.BOLD, 40));
ausgabe.setForeground(new Color(178, 34, 34)); ausgabe.setForeground(new Color(178, 34, 34));
ausgabe.setText(" "+res); ausgabe.setText(" " + res);
} }
@ -554,4 +558,12 @@ public class SpielFrame extends JFrame {
this.aufgeben2 = aufgeben2; this.aufgeben2 = aufgeben2;
} }
public void setWechsel(boolean wechsel) {
this.wechsel = wechsel;
}
public boolean isWechsel() {
return wechsel;
}
} }