This commit is contained in:
Jacob Signorovitch
2025-05-05 14:58:47 -04:00
parent be47db6361
commit fd75827c7a
5 changed files with 143 additions and 11 deletions

View File

@@ -14,8 +14,7 @@ class Board {
Board() { this.board = new HashMap<Coord, Piece>(); }
WorldScene draw() {
WorldScene scene =
new WorldScene(Util.boardW * Util.scale, Util.boardW * Util.scale);
WorldScene scene = new WorldScene(Util.size, Util.size);
for (int i = 0; i < Util.boardW; i++)
for (int j = 0; j < Util.boardW; j++) {
Piece piece = this.board.get(new Coord(i, j));
@@ -24,11 +23,12 @@ class Board {
(piece == null) ? new EmptyImage() : piece.draw(),
new RectangleImage(
Util.scale, Util.scale, OutlineMode.SOLID,
(i + j) % 2 == 0 ? Color.BLACK : Color.WHITE
(i + j) % 2 == 0 ? Color.DARK_GRAY
: Color.LIGHT_GRAY
)
),
i * Util.scale + Util.scale / 2,
j * Util.scale + Util.scale / 2
i * Util.scale + Util.halfScale,
j * Util.scale + Util.halfScale
);
}
@@ -51,8 +51,8 @@ class Coord {
// Return coordinates relative to the selected color's position on the
// board. White on top, black on bottom.
Coord rel(Util.Col col) {
return col.equals(Util.Col.BLACK)
? new Coord(this.x, Util.boardW - this.y)
return col.equals(Util.Col.WHITE)
? new Coord(this.x, Util.boardW - this.y - 1)
: this;
}

View File

@@ -1,5 +1,6 @@
package chess;
import chess.Util.Col;
import javalib.impworld.*;
class Game extends World {
@@ -18,6 +19,8 @@ class Game extends World {
this(
new Player(Util.Col.WHITE), new Player(Util.Col.BLACK), new Board()
);
this.setup();
}
public WorldScene makeScene() {
@@ -30,4 +33,72 @@ class Game extends World {
this.bigBang(Util.boardW * Util.scale, Util.boardW * Util.scale, 0.01);
}
void draw() { this.scene = this.board.draw(); }
void setup() {
this.board.board.put(new Coord(0, 0), new Rook(Util.Col.BLACK));
this.board.board.put(new Coord(1, 0), new Knight(Util.Col.BLACK));
this.board.board.put(new Coord(2, 0), new Bishop(Util.Col.BLACK));
this.board.board.put(new Coord(3, 0), new King(Util.Col.BLACK));
this.board.board.put(new Coord(4, 0), new Queen(Util.Col.BLACK));
this.board.board.put(new Coord(5, 0), new Bishop(Util.Col.BLACK));
this.board.board.put(new Coord(6, 0), new Knight(Util.Col.BLACK));
this.board.board.put(new Coord(7, 0), new Rook(Util.Col.BLACK));
this.board.board.put(new Coord(0, 1), new Pawn(Util.Col.BLACK));
this.board.board.put(new Coord(1, 1), new Pawn(Util.Col.BLACK));
this.board.board.put(new Coord(2, 1), new Pawn(Util.Col.BLACK));
this.board.board.put(new Coord(3, 1), new Pawn(Util.Col.BLACK));
this.board.board.put(new Coord(4, 1), new Pawn(Util.Col.BLACK));
this.board.board.put(new Coord(5, 1), new Pawn(Util.Col.BLACK));
this.board.board.put(new Coord(6, 1), new Pawn(Util.Col.BLACK));
this.board.board.put(new Coord(7, 1), new Pawn(Util.Col.BLACK));
this.board.board.put(
new Coord(0, 0).rel(Util.Col.WHITE), new Rook(Util.Col.WHITE)
);
this.board.board.put(
new Coord(1, 0).rel(Util.Col.WHITE), new Knight(Util.Col.WHITE)
);
this.board.board.put(
new Coord(2, 0).rel(Util.Col.WHITE), new Bishop(Util.Col.WHITE)
);
this.board.board.put(
new Coord(3, 0).rel(Util.Col.WHITE), new King(Util.Col.WHITE)
);
this.board.board.put(
new Coord(4, 0).rel(Util.Col.WHITE), new Queen(Util.Col.WHITE)
);
this.board.board.put(
new Coord(5, 0).rel(Util.Col.WHITE), new Bishop(Util.Col.WHITE)
);
this.board.board.put(
new Coord(6, 0).rel(Util.Col.WHITE), new Knight(Util.Col.WHITE)
);
this.board.board.put(
new Coord(7, 0).rel(Util.Col.WHITE), new Rook(Util.Col.WHITE)
);
this.board.board.put(
new Coord(0, 1).rel(Util.Col.WHITE), new Pawn(Util.Col.WHITE)
);
this.board.board.put(
new Coord(1, 1).rel(Util.Col.WHITE), new Pawn(Util.Col.WHITE)
);
this.board.board.put(
new Coord(2, 1).rel(Util.Col.WHITE), new Pawn(Util.Col.WHITE)
);
this.board.board.put(
new Coord(3, 1).rel(Util.Col.WHITE), new Pawn(Util.Col.WHITE)
);
this.board.board.put(
new Coord(4, 1).rel(Util.Col.WHITE), new Pawn(Util.Col.WHITE)
);
this.board.board.put(
new Coord(5, 1).rel(Util.Col.WHITE), new Pawn(Util.Col.WHITE)
);
this.board.board.put(
new Coord(6, 1).rel(Util.Col.WHITE), new Pawn(Util.Col.WHITE)
);
this.board.board.put(
new Coord(7, 1).rel(Util.Col.WHITE), new Pawn(Util.Col.WHITE)
);
}
}

View File

@@ -15,7 +15,7 @@ class Examples {
}
void testBoard(Tester t) {
Piece pawn = new Pawn();
Piece pawn = new Pawn(Util.Col.BLACK);
Board board = new Board();
board.set(new Coord(0, 0), pawn);
t.checkExpect(board.get(new Coord(0, 0)), pawn);

View File

@@ -8,16 +8,71 @@ enum PieceType { PAWN, ROOK, KNIGHT, BISHOP, POPE, QUEEN, KING }
// A chess piece.
abstract class Piece {
PieceType type;
Util.Col col;
Piece(PieceType type) { this.type = type; }
Piece(PieceType type, Util.Col col) {
this.type = type;
this.col = col;
}
WorldImage draw() { return new EmptyImage(); };
}
class Pawn extends Piece {
Pawn() { super(PieceType.PAWN); }
Pawn(Util.Col col) { super(PieceType.PAWN, col); }
WorldImage draw() {
return new FromFileImage(
"/home/jacob/Projects/CS3/chess/imgs/whitePawn.png"
"chess/imgs/" + (this.col == Util.Col.WHITE ? "white" : "black") +
"Pawn.png"
);
}
}
class Rook extends Piece {
Rook(Util.Col col) { super(PieceType.ROOK, col); }
WorldImage draw() {
return new FromFileImage(
"chess/imgs/" + (this.col == Util.Col.WHITE ? "white" : "black") +
"Rook.png"
);
}
}
class Knight extends Piece {
Knight(Util.Col col) { super(PieceType.KNIGHT, col); }
WorldImage draw() {
return new FromFileImage(
"chess/imgs/" + (this.col == Util.Col.WHITE ? "white" : "black") +
"Knight.png"
);
}
}
class Bishop extends Piece {
Bishop(Util.Col col) { super(PieceType.BISHOP, col); }
WorldImage draw() {
return new FromFileImage(
"chess/imgs/" + (this.col == Util.Col.WHITE ? "white" : "black") +
"Bishop.png"
);
}
}
class Queen extends Piece {
Queen(Util.Col col) { super(PieceType.QUEEN, col); }
WorldImage draw() {
return new FromFileImage(
"chess/imgs/" + (this.col == Util.Col.WHITE ? "white" : "black") +
"Queen.png"
);
}
}
class King extends Piece {
King(Util.Col col) { super(PieceType.KING, col); }
WorldImage draw() {
return new FromFileImage(
"chess/imgs/" + (this.col == Util.Col.WHITE ? "white" : "black") +
"King.png"
);
}
}

View File

@@ -8,6 +8,12 @@ class Util {
// Scale of the drawn chessboard.
static int scale = 64;
// Half the scale.
static int halfScale = 32;
// The number of pixels.
static int size = 64 * 8;
// The color a piece can be.
enum Col { WHITE, BLACK }
}