import java.awt.*; import java.awt.Color; import java.awt.event.*; import java.util.ArrayList; import javax.swing.*; public class Chess extends JPanel implements ActionListener, MouseListener { // pieces stuff Board board; // game vars int boardWidth, boardHeight; Timer gameTimer; Color creme = new Color(254, 245, 218); Color brown = new Color(121, 92, 50); Piece selected; ArrayList legalMoves; Image hover; String turnColor; public Chess(int boardWidth, int boardHeight) { this.boardWidth = boardWidth; this.boardHeight = boardHeight; setPreferredSize(new Dimension(this.boardWidth, this.boardHeight)); setBackground(Color.WHITE); setFocusable(true); addMouseListener(this); board = new Board(); selected = null; legalMoves = null; turnColor = "White"; gameTimer = new Timer(200, this); hover = new ImageIcon("sprites/hover.png").getImage(); gameTimer.start(); repaint(); } public void gameLoop() {} public void draw(Graphics g) { // draw board for (int i = 1; i <= 8; i++) { for (int j = 1; j <= 8; j++) { g.setColor((i % 2 == 1 && j % 2 == 1) || (i % 2 == 0 && j % 2 == 0) ? creme : brown); g.fillRect(i * 40, j * 40, 40, 40); } } // draw pieces board.draw(g); // draw legalMoves if (legalMoves != null) { for (Position p : legalMoves) { g.drawImage(hover, (p.x + 1) * 40, (p.y + 1) * 40, null); } } } public void paintComponent(Graphics g) { super.paintComponent(g); draw(g); } public void actionPerformed(ActionEvent e) { gameLoop(); repaint(); } public void mouseEntered(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseClicked(MouseEvent e) { int col = (e.getX() / 40) - 1; int row = (e.getY() / 40) - 1; Position pos = new Position(col, row); Piece newSelected = board.getPiece(col, row); // if selecting one of our own pieces if (newSelected != null && newSelected.color.equals(turnColor)) { legalMoves = newSelected.getLegalMoves(board); selected = newSelected; return; } // if selecting an enemy piece -- must have one of ours selected else if (newSelected != null && selected != null && selected.color.equals(turnColor) && !newSelected.color.equals(turnColor) && legalMoves.contains(pos)) { board.capture(selected, newSelected); selected = null; legalMoves = null; turnColor = turnColor.equals("White") ? "Black" : "White"; } // if selecting a blank square -- must have one of ours selected else if (selected != null && selected.color.equals(turnColor) && legalMoves.contains(pos)) { if (selected instanceof King && Math.abs(pos.x - selected.pos.x) == 2) { board.castle((King) selected, pos.x > selected.pos.x); } else { board.move(selected, pos); } selected = null; legalMoves = null; turnColor = turnColor.equals("White") ? "Black" : "White"; } } public void mouseExited(MouseEvent e) {} }