Added themes & bugfixes
This commit is contained in:
parent
b9fe92d7ff
commit
09f8469af2
|
@ -137,7 +137,7 @@ public abstract class APiece {
|
|||
* @param objects painted objects
|
||||
*/
|
||||
public void paintObjects(Graphics2D g2, Shape[] objects) {
|
||||
g2.setStroke(new BasicStroke(7));
|
||||
g2.setStroke(new BasicStroke(8));
|
||||
for (Shape object : objects) {
|
||||
g2.setColor(color.draw);
|
||||
g2.draw(object);
|
||||
|
@ -333,7 +333,7 @@ public abstract class APiece {
|
|||
double currentX = 0;
|
||||
double currentY = 0;
|
||||
public void run() {
|
||||
chessboard.getRootPane().repaint(getRepaintRectangle());
|
||||
chessboard.repaintRootPane(getRepaintRectangle());
|
||||
if(i > 100) {
|
||||
timer.cancel();
|
||||
setOverride(0, 0);
|
||||
|
@ -342,7 +342,7 @@ public abstract class APiece {
|
|||
currentY = i * stepY + startY;
|
||||
setOverride(currentX, currentY);
|
||||
}
|
||||
chessboard.getRootPane().repaint(getRepaintRectangle());
|
||||
chessboard.repaintRootPane(getRepaintRectangle());
|
||||
i++;
|
||||
}
|
||||
}, 5, 5);
|
||||
|
@ -362,7 +362,7 @@ public abstract class APiece {
|
|||
timer.cancel();
|
||||
scale = 0;
|
||||
}
|
||||
chessboard.getRootPane().repaint(getRepaintRectangle());
|
||||
chessboard.repaintRootPane(getRepaintRectangle());
|
||||
}
|
||||
}, 10, 10);
|
||||
}
|
||||
|
|
|
@ -58,8 +58,17 @@ public class Chess {
|
|||
public static JMenuBar createMenuBar() {
|
||||
menuBar = new JMenuBar();
|
||||
|
||||
menuBar.add(createMenuGame());
|
||||
menuBar.add(createMenuTheme());
|
||||
menuBar.add(createMenuCPU());
|
||||
menuBar.add(createMenuExport());
|
||||
|
||||
return menuBar;
|
||||
}
|
||||
|
||||
public static JMenu createMenuGame() {
|
||||
|
||||
JMenu menuGame = new JMenu("Game");
|
||||
JMenu menuExport = new JMenu("Export");
|
||||
|
||||
JMenuItem startNewGame = new JMenuItem("Start new game");
|
||||
startNewGame.addActionListener(l -> newGame(Chessboard.fromFEN(DEFAULT_FEN)));
|
||||
|
@ -85,19 +94,39 @@ public class Chess {
|
|||
});
|
||||
menuGame.add(toggleBlindMode);
|
||||
|
||||
JMenuItem exportAsSvg = new JMenuItem("Export as SVG");
|
||||
exportAsSvg.addActionListener(l -> exportSVG());
|
||||
menuExport.add(exportAsSvg);
|
||||
return menuGame;
|
||||
|
||||
JMenuItem exportAsPng = new JMenuItem("Export as PNG");
|
||||
exportAsPng.addActionListener(l -> exportPNG());
|
||||
menuExport.add(exportAsPng);
|
||||
}
|
||||
|
||||
menuBar.add(menuGame);
|
||||
menuBar.add(createMenuCPU());
|
||||
menuBar.add(menuExport);
|
||||
public static JMenu createMenuTheme() {
|
||||
|
||||
JMenu menuTheme = new JMenu("Theme");
|
||||
|
||||
Theme[] themes = new Theme[]{Theme.CLASSIC, Theme.GREEN};
|
||||
String[] themeNames = new String[]{"Classic", "Green"};
|
||||
JRadioButtonMenuItem[] items = new JRadioButtonMenuItem[themes.length];
|
||||
|
||||
Runnable deselectRadios = () -> {
|
||||
for (JRadioButtonMenuItem item : items) {
|
||||
item.setSelected(false);
|
||||
}
|
||||
};
|
||||
|
||||
for (int i = 0; i < themes.length; i++) {
|
||||
items[i] = new JRadioButtonMenuItem(themeNames[i]);
|
||||
int themeIndex = i;
|
||||
items[i].addActionListener(l -> {
|
||||
Theme.setTheme(themes[themeIndex]);
|
||||
deselectRadios.run();
|
||||
items[themeIndex].setSelected(true);
|
||||
chessboard.repaintRootPane();
|
||||
});
|
||||
menuTheme.add(items[i]);
|
||||
if(themes[i] == Theme.activeTheme) items[i].setSelected(true);
|
||||
}
|
||||
|
||||
return menuTheme;
|
||||
|
||||
return menuBar;
|
||||
}
|
||||
|
||||
public static JMenu createMenuCPU() {
|
||||
|
@ -162,6 +191,23 @@ public class Chess {
|
|||
updateBlack.run();
|
||||
|
||||
return menuCPU;
|
||||
|
||||
}
|
||||
|
||||
public static JMenu createMenuExport() {
|
||||
|
||||
JMenu menuExport = new JMenu("Export");
|
||||
|
||||
JMenuItem exportAsSvg = new JMenuItem("Export as SVG");
|
||||
exportAsSvg.addActionListener(l -> exportSVG());
|
||||
menuExport.add(exportAsSvg);
|
||||
|
||||
JMenuItem exportAsPng = new JMenuItem("Export as PNG");
|
||||
exportAsPng.addActionListener(l -> exportPNG());
|
||||
menuExport.add(exportAsPng);
|
||||
|
||||
return menuExport;
|
||||
|
||||
}
|
||||
|
||||
public static void setCPU(Player player, String mode, Runnable update) {
|
||||
|
@ -188,6 +234,7 @@ public class Chess {
|
|||
public static void newGame(Chessboard newChessboard) {
|
||||
window.remove(chessboard);
|
||||
chessboard = newChessboard;
|
||||
window.setJMenuBar(createMenuBar());
|
||||
window.add(chessboard, BorderLayout.CENTER);
|
||||
repaintWindow();
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ import java.awt.*;
|
|||
import java.awt.geom.AffineTransform;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
/**
|
||||
* Chessboard class
|
||||
|
@ -64,6 +63,8 @@ public class Chessboard extends JPanel {
|
|||
|
||||
public boolean blindMode = false;
|
||||
|
||||
static private Theme theme = Theme.activeTheme;
|
||||
|
||||
/**
|
||||
* Constructor of the chessboard
|
||||
*/
|
||||
|
@ -311,8 +312,8 @@ public class Chessboard extends JPanel {
|
|||
}
|
||||
|
||||
private void paintSquare(Graphics g, boolean isBlack) {
|
||||
if(isBlack) g.setColor(Color.LIGHT_GRAY);
|
||||
else g.setColor(Color.WHITE);
|
||||
if(isBlack) g.setColor(theme.darkSquare);
|
||||
else g.setColor(theme.lightSquare);
|
||||
g.fillRect(0, 0, SQUARE_SIZE+1, SQUARE_SIZE+1);
|
||||
}
|
||||
|
||||
|
@ -340,6 +341,22 @@ public class Chessboard extends JPanel {
|
|||
piece.paint(g2);
|
||||
}
|
||||
|
||||
public void repaintRootPane() {
|
||||
repaintRootPane(null);
|
||||
}
|
||||
|
||||
public void repaintRootPane(Rectangle r) {
|
||||
JComponent pane = getRootPane();
|
||||
if(pane != null) {
|
||||
if (r != null) pane.repaint(r);
|
||||
else pane.repaint();
|
||||
}
|
||||
}
|
||||
|
||||
public static void setTheme(Theme newTheme) {
|
||||
theme = newTheme;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup Graphics2D with anti-aliasing
|
||||
* @param g Graphics instance
|
||||
|
@ -492,8 +509,8 @@ public class Chessboard extends JPanel {
|
|||
}
|
||||
|
||||
public void changeActivePlayer() {
|
||||
activePlayer = activePlayer == player1 ? player2 : player1;
|
||||
getRootPane().repaint();
|
||||
activePlayer = getOtherPlayer();
|
||||
repaintRootPane();
|
||||
activePlayer.play();
|
||||
}
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ public class ChessboardMouseAdapter extends MouseAdapter {
|
|||
if (piece != null && piece.getPlayer() == c.getActivePlayer() && selectedPiece != piece) {
|
||||
c.setSelectedPiece(piece);
|
||||
c.showPossibleMoves(piece.getPossibleMoves());
|
||||
c.getRootPane().repaint();
|
||||
c.repaintRootPane();
|
||||
} else if(selectedPiece != null) {
|
||||
if(selectedPiece.getPossibleMoves()[pos.y][pos.x]) {
|
||||
selectedPiece.move(pos);
|
||||
|
@ -60,7 +60,7 @@ public class ChessboardMouseAdapter extends MouseAdapter {
|
|||
c.changeActivePlayer();
|
||||
if(c.getActivePlayer().inCheck()) System.out.println("Active player in check!");
|
||||
} else {
|
||||
c.getRootPane().repaint();
|
||||
c.repaintRootPane();
|
||||
}
|
||||
c.showPossibleMoves(null);
|
||||
c.setSelectedPiece(null);
|
||||
|
@ -74,7 +74,7 @@ public class ChessboardMouseAdapter extends MouseAdapter {
|
|||
if (piece != null && piece.getPlayer() == c.getActivePlayer()) {
|
||||
c.setSelectedPiece(piece);
|
||||
c.showPossibleMoves(piece.getPossibleMoves());
|
||||
c.getRootPane().repaint();
|
||||
c.repaintRootPane();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -82,11 +82,11 @@ public class ChessboardMouseAdapter extends MouseAdapter {
|
|||
Chessboard c = (Chessboard) me.getSource();
|
||||
APiece piece = c.getSelectedPiece();
|
||||
if (piece != null) {
|
||||
c.getRootPane().repaint(piece.getRepaintRectangle());
|
||||
c.repaintRootPane(piece.getRepaintRectangle());
|
||||
double pieceX = me.getX() - c.SQUARE_SIZE/2 * c.boardScale;
|
||||
double pieceY = me.getY() - c.SQUARE_SIZE/2 * c.boardScale;
|
||||
piece.setOverride(pieceX, pieceY);
|
||||
c.getRootPane().repaint(piece.getRepaintRectangle());
|
||||
c.repaintRootPane(piece.getRepaintRectangle());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,7 @@ public class ChessboardMouseAdapter extends MouseAdapter {
|
|||
c.changeActivePlayer();
|
||||
if(c.getActivePlayer().inCheck()) System.out.println("Active player in check!");
|
||||
} else {
|
||||
c.getRootPane().repaint();
|
||||
c.repaintRootPane();
|
||||
}
|
||||
c.setSelectedPiece(null);
|
||||
}
|
||||
|
|
|
@ -31,8 +31,17 @@ public enum PieceColor {
|
|||
* @param drawColor draw color
|
||||
*/
|
||||
PieceColor(Color fillColor, Color drawColor) {
|
||||
setColors(fillColor, drawColor);
|
||||
}
|
||||
|
||||
public void setColors(Color fillColor, Color drawColor) {
|
||||
fill = fillColor;
|
||||
draw = drawColor;
|
||||
}
|
||||
|
||||
public static void setTheme(Theme theme) {
|
||||
PieceColor.WHITE.setColors(theme.whiteFill, theme.whiteBorder);
|
||||
PieceColor.BLACK.setColors(theme.blackFill, theme.blackBorder);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,11 +30,12 @@ public class Player {
|
|||
}
|
||||
|
||||
public void play() {
|
||||
if(cpu == null) return;
|
||||
Timer t = new Timer();
|
||||
t.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(cpu != null) {
|
||||
if (cpu != null) {
|
||||
if (cpu.equals("random")) randomMove();
|
||||
if (cpu.equals("smart")) smartMove();
|
||||
}
|
||||
|
@ -140,6 +141,7 @@ public class Player {
|
|||
|
||||
public void setCPU(String cpu) {
|
||||
this.cpu = cpu;
|
||||
if(cpu != null && chessboard.getActivePlayer() == this) play();
|
||||
}
|
||||
|
||||
public String getCPU() {
|
||||
|
|
37
src/Theme.java
Normal file
37
src/Theme.java
Normal file
|
@ -0,0 +1,37 @@
|
|||
import java.awt.*;
|
||||
|
||||
public enum Theme {
|
||||
|
||||
CLASSIC(
|
||||
Color.WHITE, Color.BLACK, Color.BLACK, Color.WHITE, Color.WHITE, Color.LIGHT_GRAY
|
||||
),
|
||||
GREEN(
|
||||
Color.decode("#f9f9f9"), Color.decode("#333333"), Color.decode("#686563"), Color.decode("#000000"),
|
||||
Color.decode("#ebecd0"), Color.decode("#779556")
|
||||
);
|
||||
|
||||
public static Theme activeTheme = Theme.CLASSIC;
|
||||
|
||||
public static void setTheme(Theme theme) {
|
||||
activeTheme = theme;
|
||||
Chessboard.setTheme(theme);
|
||||
PieceColor.setTheme(theme);
|
||||
}
|
||||
|
||||
Color whiteFill;
|
||||
Color whiteBorder;
|
||||
Color blackFill;
|
||||
Color blackBorder;
|
||||
Color lightSquare;
|
||||
Color darkSquare;
|
||||
|
||||
Theme(Color whiteFill, Color whiteBorder, Color blackFill, Color blackBorder, Color lightSquare, Color darkSquare) {
|
||||
this.whiteFill = whiteFill;
|
||||
this.whiteBorder = whiteBorder;
|
||||
this.blackFill = blackFill;
|
||||
this.blackBorder = blackBorder;
|
||||
this.lightSquare = lightSquare;
|
||||
this.darkSquare = darkSquare;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue