Skip to content

Commit

Permalink
Merge pull request #54 from emprestes/feature/35-chesspiece-unicode-h…
Browse files Browse the repository at this point in the history
…tml-decimal

[FEATURE] Chess pieces supporting unicode and html code
  • Loading branch information
emprestes authored Apr 27, 2020
2 parents f6bd030 + 48a7e11 commit 085e32b
Show file tree
Hide file tree
Showing 29 changed files with 241 additions and 68 deletions.
2 changes: 1 addition & 1 deletion core-java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>br.opensource.game.chessgame</groupId>
<artifactId>chessgame</artifactId>
<version>1.0.0.RELEASE</version>
<version>1.1-SNAPSHOT</version>
</parent>

<artifactId>chessgame-core-java</artifactId>
Expand Down
4 changes: 4 additions & 0 deletions core-java/src/main/java/chessgame/domain/Piece.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ public interface Piece extends Serializable {
*/
BoardPosition getPosition();

String getUniCode();

String getHtmlCode();

/**
* Recovery available positions of a piece.
*
Expand Down
55 changes: 28 additions & 27 deletions core-java/src/main/java/chessgame/domain/factory/PieceFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,25 @@

import chessgame.domain.Piece;
import chessgame.domain.exception.PieceException;
import chessgame.domain.model.Bishop;
import chessgame.domain.model.BlackBishop;
import chessgame.domain.model.BlackKing;
import chessgame.domain.model.BlackKnight;
import chessgame.domain.model.BlackPawn;
import chessgame.domain.model.BlackQueen;
import chessgame.domain.model.BlackRook;
import chessgame.domain.model.Board;
import chessgame.domain.model.BoardPosition;
import chessgame.domain.model.King;
import chessgame.domain.model.Knight;
import chessgame.domain.model.Pawn;
import chessgame.domain.model.PieceColor;
import chessgame.domain.model.Queen;
import chessgame.domain.model.Rook;
import chessgame.domain.model.WhiteBishop;
import chessgame.domain.model.WhiteKing;
import chessgame.domain.model.WhiteKnight;
import chessgame.domain.model.WhitePawn;
import chessgame.domain.model.WhiteQueen;
import chessgame.domain.model.WhiteRook;

import static chessgame.domain.model.BoardPosition.D1;
import static chessgame.domain.model.BoardPosition.D8;
import static chessgame.domain.model.BoardPosition.E1;
import static chessgame.domain.model.BoardPosition.E8;
import static chessgame.domain.model.PieceColor.BLACK;
import static chessgame.domain.model.PieceColor.WHITE;

/**
* Factory to create chess pieces.
Expand All @@ -41,7 +44,7 @@ private PieceFactory() {
* @return King
*/
public static Piece createBlackKing(Board board) {
return create(board, E8, BLACK, King.class);
return create(board, E8, BlackKing.class);
}

/**
Expand All @@ -51,7 +54,7 @@ public static Piece createBlackKing(Board board) {
* @return Queen
*/
public static Piece createBlackQueen(Board board) {
return create(board, D8, BLACK, Queen.class);
return create(board, D8, BlackQueen.class);
}

/**
Expand All @@ -62,7 +65,7 @@ public static Piece createBlackQueen(Board board) {
* @return Bishop
*/
public static Piece createBlackBishop(Board board, BoardPosition position) {
return create(board, position, BLACK, Bishop.class);
return create(board, position, BlackBishop.class);
}

/**
Expand All @@ -73,7 +76,7 @@ public static Piece createBlackBishop(Board board, BoardPosition position) {
* @return Knight
*/
public static Piece createBlackKnight(Board board, BoardPosition position) {
return create(board, position, BLACK, Knight.class);
return create(board, position, BlackKnight.class);
}

/**
Expand All @@ -84,7 +87,7 @@ public static Piece createBlackKnight(Board board, BoardPosition position) {
* @return Rook
*/
public static Piece createBlackRook(Board board, BoardPosition position) {
return create(board, position, BLACK, Rook.class);
return create(board, position, BlackRook.class);
}

/**
Expand All @@ -95,7 +98,7 @@ public static Piece createBlackRook(Board board, BoardPosition position) {
* @return Pawn
*/
public static Piece createBlackPawn(Board board, BoardPosition position) {
return create(board, position, BLACK, Pawn.class);
return create(board, position, BlackPawn.class);
}

/**
Expand All @@ -105,7 +108,7 @@ public static Piece createBlackPawn(Board board, BoardPosition position) {
* @return King
*/
public static Piece createWhiteKing(Board board) {
return create(board, E1, WHITE, King.class);
return create(board, E1, WhiteKing.class);
}

/**
Expand All @@ -115,7 +118,7 @@ public static Piece createWhiteKing(Board board) {
* @return Queen
*/
public static Piece createWhiteQueen(Board board) {
return create(board, D1, WHITE, Queen.class);
return create(board, D1, WhiteQueen.class);
}

/**
Expand All @@ -126,7 +129,7 @@ public static Piece createWhiteQueen(Board board) {
* @return Bishop
*/
public static Piece createWhiteBishop(Board board, BoardPosition position) {
return create(board, position, WHITE, Bishop.class);
return create(board, position, WhiteBishop.class);
}

/**
Expand All @@ -137,7 +140,7 @@ public static Piece createWhiteBishop(Board board, BoardPosition position) {
* @return Knight
*/
public static Piece createWhiteKnight(Board board, BoardPosition position) {
return create(board, position, WHITE, Knight.class);
return create(board, position, WhiteKnight.class);
}

/**
Expand All @@ -148,7 +151,7 @@ public static Piece createWhiteKnight(Board board, BoardPosition position) {
* @return Rook
*/
public static Piece createWhiteRook(Board board, BoardPosition position) {
return create(board, position, WHITE, Rook.class);
return create(board, position, WhiteRook.class);
}

/**
Expand All @@ -159,26 +162,24 @@ public static Piece createWhiteRook(Board board, BoardPosition position) {
* @return Pawn
*/
public static Piece createWhitePawn(Board board, BoardPosition position) {
return create(board, position, WHITE, Pawn.class);
return create(board, position, WhitePawn.class);
}

/**
* @param board Board informed.
* @param position Board position informed.
* @param color Piece color informed.
* @param classs Piece class informed.
* @return Piece
* @return Piece Piece instance
* @throws PieceException Throw this exception in a cause of instantiation problems.
* @see Board
* @see BoardPosition
* @see PieceColor
* @see Piece
*/
private static Piece create(Board board, BoardPosition position, PieceColor color, Class<? extends Piece> classs)
private static Piece create(Board board, BoardPosition position, Class<? extends Piece> classs)
throws PieceException {
try {
Piece piece = classs.getConstructor(Board.class, PieceColor.class)
.newInstance(board, color)
Piece piece = classs.getConstructor(Board.class)
.newInstance(board)
.moveTo(position);
board.put(position, piece);
return piece;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,20 @@
* @see chessgame.domain.Piece
* @since September 2016
*/
public class Bishop extends AbstractPiece {
abstract class AbstractBishop extends AbstractPiece {

/**
* Bishop's constructor.
*
* @param board Board informed.
* @param color Color informed.
* @param uniCode Unicode.
* @param htmlCode HTML code (decimal).
* @see BoardPosition
* @see PieceColor
*/
public Bishop(Board board, PieceColor color) {
super(board, color);
AbstractBishop(Board board, PieceColor color, String uniCode, String htmlCode) {
super(board, color, uniCode, htmlCode);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,20 @@
* @see chessgame.domain.Piece
* @since September 2016
*/
public class King extends AbstractPiece {
abstract class AbstractKing extends AbstractPiece {

/**
* King's constructor.
*
* @param board Board informed.
* @param color Color informed.
* @param uniCode Unicode.
* @param htmlCode HTML code (decimal).
* @see BoardPosition
* @see PieceColor
*/
public King(Board board, PieceColor color) {
super(board, color);
AbstractKing(Board board, PieceColor color, String uniCode, String htmlCode) {
super(board, color, uniCode, htmlCode);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,20 @@
* @see chessgame.domain.Piece
* @since September 2016
*/
public class Knight extends AbstractPiece {
abstract class AbstractKnight extends AbstractPiece {

/**
* Knight's constructor.
*
* @param board Board informed.
* @param color Color informed.
* @param uniCode Unicode.
* @param htmlCode HTML code (decimal).
* @see BoardPosition
* @see PieceColor
*/
public Knight(Board board, PieceColor color) {
super(board, color);
AbstractKnight(Board board, PieceColor color, String uniCode, String htmlCode) {
super(board, color, uniCode, htmlCode);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* @see chessgame.domain.Piece
* @since September 2016
*/
public class Pawn extends AbstractPiece {
abstract class AbstractPawn extends AbstractPiece {

private final Map<PieceColor, Function<BoardPosition, BoardPosition>> map;

Expand All @@ -25,11 +25,13 @@ public class Pawn extends AbstractPiece {
*
* @param board Board informed.
* @param color Color informed.
* @param uniCode Unicode.
* @param htmlCode HTML code (decimal).
* @see BoardPosition
* @see PieceColor
*/
public Pawn(Board board, PieceColor color) {
super(board, color);
AbstractPawn(Board board, PieceColor color, String uniCode, String htmlCode) {
super(board, color, uniCode, htmlCode);

map = Map.of(
WHITE, BoardPosition::nextRow,
Expand All @@ -45,7 +47,7 @@ public Set<BoardPosition> getAvailablePositions() {

map.forEach((color, positionFunction) -> Optional.of(this)
.filter(piece -> color.equals(piece.getColor()))
.map(Pawn::getPosition)
.map(AbstractPawn::getPosition)
.map(positionFunction)
.filter(this::isEmptyBoardPosition)
.filter(availablePositions::add)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@
*/
abstract class AbstractPiece implements Piece {

private String uniCode;

private String htmlCode;

private final Board board;

private final PieceColor color;
Expand All @@ -33,11 +37,29 @@ abstract class AbstractPiece implements Piece {
* @param board Board informed.
* @param color Color informed.
*/
AbstractPiece(Board board, PieceColor color) {
AbstractPiece(Board board, PieceColor color, String uniCode, String htmlCode) {
super();

this.board = board;
this.color = color;
this.uniCode = uniCode;
this.htmlCode = htmlCode;
}

/**
* {@inheritDoc}
*/
@Override
public String getUniCode() {
return uniCode;
}

/**
* {@inheritDoc}
*/
@Override
public String getHtmlCode() {
return htmlCode;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,20 @@
* @see chessgame.domain.Piece
* @since September 2016
*/
public class Queen extends AbstractPiece {
abstract class AbstractQueen extends AbstractPiece {

/**
* Queen's constructor.
*
* @param board Board informed.
* @param color Color informed.
* @param uniCode Unicode.
* @param htmlCode HTML code (decimal).
* @see BoardPosition
* @see PieceColor
*/
public Queen(Board board, PieceColor color) {
super(board, color);
AbstractQueen(Board board, PieceColor color, String uniCode, String htmlCode) {
super(board, color, uniCode, htmlCode);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,20 @@
* @see chessgame.domain.Piece
* @since September 2016
*/
public class Rook extends AbstractPiece {
abstract class AbstractRook extends AbstractPiece {

/**
* Rook's constructor.
*
* @param board Board informed.
* @param color Color informed.
* @param uniCode Unicode.
* @param htmlCode HTML code (decimal).
* @see BoardPosition
* @see PieceColor
*/
public Rook(Board board, PieceColor color) {
super(board, color);
AbstractRook(Board board, PieceColor color, String uniCode, String htmlCode) {
super(board, color, uniCode, htmlCode);
}

/**
Expand Down
10 changes: 10 additions & 0 deletions core-java/src/main/java/chessgame/domain/model/BlackBishop.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package chessgame.domain.model;

import static chessgame.domain.model.PieceColor.BLACK;

public class BlackBishop extends AbstractBishop {

public BlackBishop(Board board) {
super(board, BLACK, "\u265D", "&#9821;");
}
}
Loading

0 comments on commit 085e32b

Please sign in to comment.