diff --git a/chess/src/chess/Board.java b/chess/src/chess/Board.java index c67a436..7602610 100644 --- a/chess/src/chess/Board.java +++ b/chess/src/chess/Board.java @@ -14,8 +14,7 @@ class Board { Board() { this.board = new HashMap(); } 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; } diff --git a/chess/src/chess/Game.java b/chess/src/chess/Game.java index 3dc24d4..9629888 100644 --- a/chess/src/chess/Game.java +++ b/chess/src/chess/Game.java @@ -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) + ); + } } diff --git a/chess/src/chess/Main.java b/chess/src/chess/Main.java index 77d2452..6762b09 100644 --- a/chess/src/chess/Main.java +++ b/chess/src/chess/Main.java @@ -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); diff --git a/chess/src/chess/Piece.java b/chess/src/chess/Piece.java index 1051c35..82c5fd1 100644 --- a/chess/src/chess/Piece.java +++ b/chess/src/chess/Piece.java @@ -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" ); } } diff --git a/chess/src/chess/Util.java b/chess/src/chess/Util.java index ec0a15b..3a96b28 100644 --- a/chess/src/chess/Util.java +++ b/chess/src/chess/Util.java @@ -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 } }