diff --git a/src/main/java/de/mannheim/th/chess/controller/ButtonMovePieceListener.java b/src/main/java/de/mannheim/th/chess/controller/ButtonMovePieceListener.java index 4468265..8c4b687 100644 --- a/src/main/java/de/mannheim/th/chess/controller/ButtonMovePieceListener.java +++ b/src/main/java/de/mannheim/th/chess/controller/ButtonMovePieceListener.java @@ -44,6 +44,11 @@ public class ButtonMovePieceListener implements ActionListener { } this.sf.setCursor(null); + + //hier rotieren markieren + + if(game.isRotieren())sf.setWechsel(!sf.isWechsel()); + this.sf.erstelleBrett(); if (game.getLastMove() != null) { diff --git a/src/main/java/de/mannheim/th/chess/domain/Game.java b/src/main/java/de/mannheim/th/chess/domain/Game.java index d26f6cd..9f85710 100644 --- a/src/main/java/de/mannheim/th/chess/domain/Game.java +++ b/src/main/java/de/mannheim/th/chess/domain/Game.java @@ -13,7 +13,6 @@ import com.github.bhlangonijr.chesslib.Side; import com.github.bhlangonijr.chesslib.Square; import com.github.bhlangonijr.chesslib.move.Move; 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.utl.Clock; @@ -335,4 +334,9 @@ public class Game { this.board.doMove(this.movelist.get(i)); } } + + public boolean isRotieren() { + return rotieren; + } + } diff --git a/src/main/java/de/mannheim/th/chess/ui/SpielFrame.java b/src/main/java/de/mannheim/th/chess/ui/SpielFrame.java index b0a7d80..8eb6624 100644 --- a/src/main/java/de/mannheim/th/chess/ui/SpielFrame.java +++ b/src/main/java/de/mannheim/th/chess/ui/SpielFrame.java @@ -61,12 +61,13 @@ public class SpielFrame extends JFrame { private Game game; private Clock clock; private ArrayList anzeigeMoves = new ArrayList(); + private boolean wechsel = false; private BoardMode mode; private Square selectedSquare; public enum BoardMode { - normal, pieceSelected, finished + normal, pieceSelected, finished, gameEnd } /** @@ -143,37 +144,45 @@ public class SpielFrame extends JFrame { * holt sich FEN-Zeichenkette und extrahiert daraus die Positionen der Figuren */ public void ladeBrett() { - // System.out.println(game.toFEN()); - char[] fen = game.toFEN().replaceAll("/", "").split(" ")[0].toCharArray(); int i = 0; for (int j = 0; j < fen.length; j++) { if (Character.isDigit(fen[j])) { int leerfelder = Character.getNumericValue(fen[j]); for (int k = 0; k < leerfelder; k++) { - belegungen.put(buttons.get(i), "n-n"); - // buttons.get(i).setEnabled(false); // erstmal deaktivieren, weil leere Felder - // nicht ckickbar sein sollten. + int idx; + if (game.isRotieren()) + idx = wechsel ? mirrowedGrid(i) : i; + else + idx = i; + belegungen.put(buttons.get(idx), "n-n"); i++; } continue; - } else if (fen[j] >= 65 && fen[j] <= 90) { // ein Großbuchstabe, also - belegungen.put(buttons.get(i), "w-" + fen[j]); - } else if (fen[j] >= 97 && fen[j] <= 122) { // ein Kleinbuchstabe, also - belegungen.put(buttons.get(i), "b-" + fen[j]); - // buttons.get(i).setEnabled(false); // erstmal deaktivieren, damit weiß - // beginnen kann + } else if (fen[j] >= 65 && fen[j] <= 90) { // Großbuchstabe = weiß + int idx; + if (game.isRotieren()) + idx = wechsel ? mirrowedGrid(i) : i; + else + idx = i; + belegungen.put(buttons.get(idx), "w-" + fen[j]); + } 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")); - buttons.get(i).setDisabledIcon(new ImageIcon("src/main/resources/" + (int) fen[j] + ".png")); - + int idx; + 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++; - } - - panelLinks.revalidate(); - panelLinks.repaint(); - } /** @@ -233,47 +242,60 @@ public class SpielFrame extends JFrame { List selectables; switch (this.mode) { - case BoardMode.normal: - + case normal: selectables = game.getAllLegalMoveableSquares(); - for (Square square : selectables) { - JButton b = buttons.get(mirrowedGrid(square.ordinal())); + int idx; + + if (game.isRotieren()) + idx = wechsel ? square.ordinal() : mirrowedGrid(square.ordinal()); + else + idx = this.mirrowedGrid(square.ordinal()); + + JButton b = buttons.get(idx); b.setEnabled(true); - // b.setBackground(Color.green); b.addActionListener(new ButtonSelectPieceListener(this, square)); } - break; - case BoardMode.pieceSelected: + case pieceSelected: + int idxSelected; - JButton s = buttons.get(mirrowedGrid(selectedSquare.ordinal())); + if (game.isRotieren()) + idxSelected = wechsel ? selectedSquare.ordinal() : mirrowedGrid(selectedSquare.ordinal()); + else + idxSelected = mirrowedGrid(selectedSquare.ordinal()); + + JButton s = buttons.get(idxSelected); s.setEnabled(true); s.setBackground(new Color(165, 42, 42)); s.addActionListener(new ButtonToNormalListener(this)); selectables = game.getLegalMoveableSquares(selectedSquare); - for (Square square : selectables) { - JButton b = buttons.get(mirrowedGrid(square.ordinal())); + int idx; + 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; + case finished: - // this.enableControlPanelButtons(); - // this.viewPointer = this.game.getMoveList().size() - 1; + clearButtons(); break; + + case gameEnd: + + break; + default: break; - - } - - for (JButton b : buttons) { - panelLinks.add(b); } } @@ -632,4 +654,12 @@ public class SpielFrame extends JFrame { this.aufgeben2 = aufgeben2; } + public void setWechsel(boolean wechsel) { + this.wechsel = wechsel; + } + + public boolean isWechsel() { + return wechsel; + } + }