118 lines
3.2 KiB
Java
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) {}
|
|
}
|