diff --git a/src/dev/kske/chess/board/Board.java b/src/dev/kske/chess/board/Board.java
index 2b114ab..c8f8e2b 100644
--- a/src/dev/kske/chess/board/Board.java
+++ b/src/dev/kske/chess/board/Board.java
@@ -480,39 +480,18 @@ public class Board implements Cloneable {
// Piece placement (from white's perspective)
for (int i = 0; i < 8; i++) {
int emptyCount = 0;
- for (int j = 0; j < 8; j++)
- if (boardArr[j][i] == null) ++emptyCount;
+ for (int j = 0; j < 8; j++) {
+ final Piece piece = boardArr[j][i];
+ if (piece == null) ++emptyCount;
else {
if (emptyCount != 0) {
sb.append(emptyCount);
emptyCount = 0;
}
- char piece;
- switch (boardArr[j][i].getType()) {
- case KING:
- piece = 'K';
- break;
- case QUEEN:
- piece = 'Q';
- break;
- case ROOK:
- piece = 'R';
- break;
- case KNIGHT:
- piece = 'N';
- break;
- case BISHOP:
- piece = 'B';
- break;
- case PAWN:
- piece = 'P';
- break;
- default:
- piece = '-';
- }
- if (boardArr[j][i].getColor() == Color.BLACK) piece = Character.toLowerCase(piece);
- sb.append(piece);
+ char p = boardArr[j][i].getType().firstChar();
+ sb.append(piece.getColor() == Color.WHITE ? Character.toUpperCase(p) : p);
}
+ }
if (emptyCount != 0) sb.append(emptyCount);
if (i < 7) sb.append('/');
}
diff --git a/src/dev/kske/chess/board/Piece.java b/src/dev/kske/chess/board/Piece.java
index d768f0a..aa5082c 100644
--- a/src/dev/kske/chess/board/Piece.java
+++ b/src/dev/kske/chess/board/Piece.java
@@ -85,7 +85,14 @@ public abstract class Piece implements Cloneable {
}
public static enum Type {
- KING, QUEEN, ROOK, KNIGHT, BISHOP, PAWN
+ KING, QUEEN, ROOK, KNIGHT, BISHOP, PAWN;
+
+ /**
+ * @return The first character of this {@link Type} in algebraic notation and lower case
+ */
+ public char firstChar() {
+ return this == KNIGHT ? 'n' : Character.toLowerCase(this.toString().charAt(0));
+ }
}
public static enum Color {
diff --git a/src/dev/kske/chess/ui/FENDropTarget.java b/src/dev/kske/chess/ui/FENDropTarget.java
index 9d913ea..9d8fd2d 100644
--- a/src/dev/kske/chess/ui/FENDropTarget.java
+++ b/src/dev/kske/chess/ui/FENDropTarget.java
@@ -36,7 +36,7 @@ public class FENDropTarget extends DropTargetAdapter {
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
final GamePane gamePane = mainWindow.addGamePane();
final String fen = br.readLine();
- new GameConfigurationDialog((whiteName, blackName) -> {
+ GameConfigurationDialog.show((whiteName, blackName) -> {
final Game game = new Game(gamePane.getBoardPane(), whiteName, blackName, fen);
gamePane.setGame(game);
game.start();
diff --git a/src/dev/kske/chess/ui/GameConfigurationDialog.java b/src/dev/kske/chess/ui/GameConfigurationDialog.java
index 45494dc..a9cc9eb 100644
--- a/src/dev/kske/chess/ui/GameConfigurationDialog.java
+++ b/src/dev/kske/chess/ui/GameConfigurationDialog.java
@@ -4,6 +4,7 @@ import java.awt.Font;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.function.BiConsumer;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
@@ -17,61 +18,59 @@ import javax.swing.JLabel;
* Created: 24.07.2019
* Author: Kai S. K. Engelbart
*/
-public class GameConfigurationDialog extends JDialog {
+public class GameConfigurationDialog {
- private static final long serialVersionUID = 9080577278529876972L;
+ private GameConfigurationDialog() {}
- /**
- * Create the dialog.
- */
- public GameConfigurationDialog(ActionWithConfiguration action) {
- setTitle("Game Configuration");
- setBounds(100, 100, 281, 142);
- setModal(true);
- setLocationRelativeTo(null);
- getContentPane().setLayout(null);
+ public static void show(BiConsumer action) {
+ new JDialog() {
- List options = new ArrayList<>(Arrays.asList("Natural Player", "AI Player"));
- EngineUtil.getEngineInfos().forEach(info -> options.add(info.name));
+ private static final long serialVersionUID = -5768339760489440385L;
- JLabel lblWhite = new JLabel("White:");
- lblWhite.setFont(new Font("Tahoma", Font.PLAIN, 14));
- lblWhite.setBounds(10, 11, 49, 14);
- getContentPane().add(lblWhite);
+ {
+ setTitle("Game Configuration");
+ setBounds(100, 100, 281, 142);
+ setModal(true);
+ setLocationRelativeTo(null);
+ getContentPane().setLayout(null);
- JComboBox