Files
chess/Chess.java
2026-05-12 09:38:47 -05:00

118 lines
3.2 KiB
Java

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<Position> 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) {}
}