Browse Source
Merge commit 'a98367671dcc5a3a4acd5d4bb7a6979fe9673c0d' into HEAD
Merge commit 'a98367671dcc5a3a4acd5d4bb7a6979fe9673c0d' into HEAD
Jenkins
3 years ago
7 changed files with 1033 additions and 0 deletions
-
5src/main/java/Application/App.java
-
247src/main/java/Game/Chess.java
-
195src/main/java/Game/ChessObj/ChessBoard.java
-
115src/main/java/Game/ChessObj/ChessFigure.java
-
228src/test/java/Game/ChessObj/ChessBoardTest.java
-
111src/test/java/Game/ChessObj/ChessFigureTest.java
-
132src/test/java/Game/ChessTest.java
@ -0,0 +1,247 @@ |
|||
package Game; |
|||
|
|||
import Game.ChessObj.ChessBoard; |
|||
import Game.ChessObj.ChessFigure; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
public class Chess extends Game { |
|||
|
|||
private int[] firstTurn; |
|||
private ChessFigure.Team currentTeam; |
|||
|
|||
private ArrayList<ChessFigure> destroyedWhiteFigures; |
|||
private ArrayList<ChessFigure> destroyedBlackFigures; |
|||
|
|||
private ChessBoard.MoveFeedback lastFeedback; |
|||
|
|||
private ChessBoard chessBoard; |
|||
|
|||
public Chess() { |
|||
init(); |
|||
} |
|||
|
|||
private void init() { |
|||
resetGame(); |
|||
} |
|||
|
|||
@Override |
|||
public void update(String input) { |
|||
outputBuffer.clear(); |
|||
ArrayList<String> footer = new ArrayList<>(); |
|||
|
|||
if (isFinished()) { |
|||
resetGame(); |
|||
return; |
|||
} |
|||
|
|||
int[] coords = convertInput(input); |
|||
|
|||
if (coords == null) { |
|||
footer.add("Invalid Input!"); |
|||
firstTurn = null; |
|||
} else { |
|||
if (firstTurn == null) { |
|||
firstTurn = coords; |
|||
if (getChessBoard().getBoard()[firstTurn[1]][firstTurn[0]] != null) { |
|||
if (getChessBoard().getBoard()[firstTurn[1]][firstTurn[0]].getTeam() == currentTeam) { |
|||
String firstCoords = (char) (firstTurn[0] + 97) + "" + (firstTurn[1] + 1); |
|||
footer.add("Currently selected cell: " + firstCoords); |
|||
} else { |
|||
footer.add("It's " + currentTeam.name() + "'s turn "); |
|||
firstTurn = null; |
|||
} |
|||
} else { |
|||
footer.add("Can't select empty cell"); |
|||
firstTurn = null; |
|||
} |
|||
} else { |
|||
footer = makeMove(firstTurn, coords); |
|||
if(lastFeedback != ChessBoard.MoveFeedback.INVALID && lastFeedback != ChessBoard.MoveFeedback.OUTSIDEOFBOARD) |
|||
switchCurrentTeam(); |
|||
firstTurn = null; |
|||
} |
|||
} |
|||
|
|||
if (chessBoard.scanForOccurringFigure(ChessFigure.Type.KING, ChessFigure.Team.WHITE) == 0) { |
|||
footer.add("Black has Won!"); |
|||
footer.add("Press any key to restart game"); |
|||
setFinished(true); |
|||
} |
|||
if (chessBoard.scanForOccurringFigure(ChessFigure.Type.KING, ChessFigure.Team.BLACK) == 0) { |
|||
footer.add("White has Won!"); |
|||
footer.add("Press any key to restart game"); |
|||
setFinished(true); |
|||
} |
|||
|
|||
outputBuffer.addAll(getHeader()); |
|||
outputBuffer.addAll(getUpdatedOutputBoard(destroyedWhiteFigures, destroyedBlackFigures)); |
|||
outputBuffer.addAll(footer); |
|||
|
|||
} |
|||
|
|||
private ArrayList<String> getHeader() { |
|||
ArrayList<String> header = new ArrayList<>(); |
|||
|
|||
header.add("Welcome to the good old game Chess!"); |
|||
header.add("First select one cell like: 'e7', than confirm it with an enter."); |
|||
header.add("After that, select a second cell and also confirm it with an enter."); |
|||
header.add("The Goal is to defeat the other teams King(K)."); |
|||
header.add(""); |
|||
header.add("It's your Turn " + currentTeam.name().toLowerCase() + "."); |
|||
|
|||
return header; |
|||
} |
|||
|
|||
//int[0] = x, int[1] = y; |
|||
public int[] convertInput(String input) { |
|||
int[] temp = new int[2]; |
|||
|
|||
//input is not 2 chars big |
|||
if (input.length() != 2) |
|||
return null; |
|||
char[] symbols = input.toCharArray(); |
|||
int counterDigit = 0; |
|||
int counterChar = 0; |
|||
//input contains one number and one char |
|||
for (char x : symbols) { |
|||
if (Character.isDigit(x)) { |
|||
counterDigit++; |
|||
temp[1] = Character.getNumericValue(x) - 1; |
|||
} |
|||
if (Character.isAlphabetic(x)) { |
|||
counterChar++; |
|||
temp[0] = x; |
|||
} |
|||
} |
|||
if (counterChar != 1 || counterDigit != 1) |
|||
return null; |
|||
|
|||
temp[0] = Character.toLowerCase(temp[0]) - 97; |
|||
if (!chessBoard.isCellInBoard(temp[0], temp[1])) |
|||
return null; |
|||
else |
|||
return temp; |
|||
} |
|||
|
|||
public ArrayList<String> makeMove(int[] source, int[] target) { |
|||
ArrayList<String> result = new ArrayList<>(); |
|||
ChessFigure sourceFigure = chessBoard.getBoard()[source[1]][source[0]]; |
|||
ChessFigure targetFigure = chessBoard.getBoard()[target[1]][target[0]]; |
|||
String sourceFigureName = "<NOT FOUND>"; |
|||
String targetFigureName = "<NOT FOUND>"; |
|||
String sourceCoords = (char) (source[0] + 97) + "" + (source[1] + 1); |
|||
String targetCoords = (char) (target[0] + 97) + "" + (target[1] + 1); |
|||
|
|||
ChessBoard.MoveFeedback moveFeedback = chessBoard.moveFigure(source[0], source[1], target[0], target[1]); |
|||
lastFeedback = moveFeedback; |
|||
|
|||
if (sourceFigure != null) |
|||
sourceFigureName = sourceFigure.getTeam().name().toCharArray()[0] + sourceFigure.getTeam().name().substring(1).toLowerCase() + " " + sourceFigure.getType().name().toLowerCase(); |
|||
if (targetFigure != null) |
|||
targetFigureName = targetFigure.getTeam().name().toLowerCase() + " " + targetFigure.getType().name().toLowerCase(); |
|||
|
|||
if (moveFeedback == ChessBoard.MoveFeedback.MOVE) { |
|||
result.add("Successfully moved " + sourceFigureName.toLowerCase() + " from " + sourceCoords + " to " + targetCoords); |
|||
} else if (moveFeedback == ChessBoard.MoveFeedback.ENEMYBEATEN) { |
|||
result.add(sourceFigureName + " successfully beat " + targetFigureName.toLowerCase() + " at " + targetCoords); |
|||
if (targetFigure.getTeam() == ChessFigure.Team.WHITE) |
|||
getDestroyedWhiteFigures().add(targetFigure); |
|||
else |
|||
getDestroyedBlackFigures().add(targetFigure); |
|||
} else { |
|||
result.add("Invalid input!"); |
|||
switch (moveFeedback) { |
|||
case INVALID: |
|||
if (targetFigure != null) |
|||
if (targetFigure.getTeam() == sourceFigure.getTeam()) |
|||
result.add("You are on the same Team! [" + getCurrentTeam().name() + "]"); |
|||
break; |
|||
case OUTSIDEOFBOARD: |
|||
result.add("Input is not inside the board!"); |
|||
break; |
|||
default: |
|||
} |
|||
} |
|||
|
|||
return result; |
|||
} |
|||
|
|||
private ArrayList<String> getUpdatedOutputBoard(ArrayList<ChessFigure> whiteFigures, ArrayList<ChessFigure> blackFigures) { |
|||
ArrayList<String> updatedOutputBoard = chessBoard.getOutputBoard(); |
|||
ArrayList<String> sidebarWhiteFigures = getSidebarFigures(whiteFigures, 5); |
|||
ArrayList<String> sidebarBlackFigures = getSidebarFigures(blackFigures, 5); |
|||
|
|||
for (int i = 0; i < sidebarWhiteFigures.size(); i++) { |
|||
int index = i + 3; |
|||
updatedOutputBoard.set(index, updatedOutputBoard.get(index) + sidebarWhiteFigures.get(i)); |
|||
} |
|||
|
|||
for (int i = 0; i < sidebarBlackFigures.size(); i++) { |
|||
int index = updatedOutputBoard.size() - (i + 3); |
|||
updatedOutputBoard.set(index, updatedOutputBoard.get(index) + sidebarBlackFigures.get(i)); |
|||
} |
|||
|
|||
|
|||
return updatedOutputBoard; |
|||
} |
|||
|
|||
public ArrayList<String> getSidebarFigures(ArrayList<ChessFigure> chessFigureArrayList, int maxPerLine) { |
|||
ArrayList<String> result = new ArrayList<>(); |
|||
String line = ""; |
|||
int counter = 0; |
|||
|
|||
for (int i = 0; i < chessFigureArrayList.size(); i++) { |
|||
if (i == chessFigureArrayList.size() - 1) { |
|||
line += chessFigureArrayList.get(i).getSymbol() + ""; |
|||
result.add(line); |
|||
return result; |
|||
} |
|||
line += chessFigureArrayList.get(i).getSymbol() + ","; |
|||
counter++; |
|||
if (counter >= maxPerLine) { |
|||
result.add(line); |
|||
line = ""; |
|||
counter = 0; |
|||
} |
|||
} |
|||
|
|||
return result; |
|||
} |
|||
|
|||
private void switchCurrentTeam() { |
|||
if (currentTeam == ChessFigure.Team.WHITE) |
|||
currentTeam = ChessFigure.Team.BLACK; |
|||
else |
|||
currentTeam = ChessFigure.Team.WHITE; |
|||
} |
|||
|
|||
public void resetGame() { |
|||
chessBoard = new ChessBoard(); |
|||
firstTurn = null; |
|||
currentTeam = ChessFigure.Team.WHITE; |
|||
destroyedWhiteFigures = new ArrayList<>(); |
|||
destroyedBlackFigures = new ArrayList<>(); |
|||
setFinished(false); |
|||
outputBuffer.clear(); |
|||
outputBuffer.addAll(getHeader()); |
|||
outputBuffer.addAll(chessBoard.getOutputBoard()); |
|||
} |
|||
|
|||
public ChessBoard getChessBoard() { |
|||
return this.chessBoard; |
|||
} |
|||
|
|||
public ChessFigure.Team getCurrentTeam() { |
|||
return this.currentTeam; |
|||
} |
|||
|
|||
public ArrayList<ChessFigure> getDestroyedWhiteFigures() { |
|||
return destroyedWhiteFigures; |
|||
} |
|||
|
|||
public ArrayList<ChessFigure> getDestroyedBlackFigures() { |
|||
return destroyedBlackFigures; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,195 @@ |
|||
package Game.ChessObj; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
public class ChessBoard { |
|||
|
|||
public enum MoveFeedback { |
|||
ENEMYBEATEN, |
|||
MOVE, |
|||
OUTSIDEOFBOARD, |
|||
INVALID |
|||
} |
|||
|
|||
private ChessFigure[][] board; |
|||
|
|||
public ChessBoard() { |
|||
board = new ChessFigure[8][8]; |
|||
initBoard(); |
|||
} |
|||
|
|||
protected void initBoard() { |
|||
ChessFigure.Type[] order = { |
|||
ChessFigure.Type.CASTLE, ChessFigure.Type.KNIGHT, ChessFigure.Type.BISHOP, ChessFigure.Type.QUEEN, ChessFigure.Type.KING, ChessFigure.Type.BISHOP, ChessFigure.Type.KNIGHT, ChessFigure.Type.CASTLE |
|||
}; |
|||
for (int x = 0; x < board[0].length; x++) { |
|||
//sets all pawns |
|||
board[1][x] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK); |
|||
board[6][x] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE); |
|||
|
|||
//sets all others |
|||
board[0][x] = new ChessFigure(order[x], ChessFigure.Team.BLACK); |
|||
board[7][x] = new ChessFigure(order[x], ChessFigure.Team.WHITE); |
|||
} |
|||
} |
|||
|
|||
/* |
|||
a b c d e f g h |
|||
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ |
|||
1 │ |T| │ |Z| │ |I| │ |Q| │ |K| │ |I| │ |Z| │ |T| │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
2 │ |o| │ |o| │ |o| │ |o| │ |o| │ |o| │ |o| │ |o| │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
3 │ │ │ │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
4 │ │ │ │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
5 │ │ │ │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
6 │ │ │ │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
7 │ o │ o │ o │ o │ o │ o │ o │ o │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
8 │ T │ Z │ I │ Q │ K │ I │ Z │ T │ |
|||
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ |
|||
*/ |
|||
|
|||
public ArrayList<String> getOutputBoard() { |
|||
ArrayList<String> outputBoard = new ArrayList<>(); |
|||
String[][] cellSymbol = getCellSymbols(); |
|||
outputBoard.add(" a b c d e f g h"); |
|||
outputBoard.add(" ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐"); |
|||
for (int y = 0; y < board.length; y++) { |
|||
String line = ""; |
|||
line += " " + (y + 1) + " │ "; |
|||
for (int x = 0; x < board[0].length; x++) { |
|||
line += (cellSymbol[y][x] + " │ "); |
|||
} |
|||
outputBoard.add(line); |
|||
if (y < 7) |
|||
outputBoard.add(" ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤"); |
|||
} |
|||
outputBoard.add(" └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘"); |
|||
return outputBoard; |
|||
} |
|||
|
|||
public String[][] getCellSymbols() { |
|||
String[][] cellSymbol = new String[8][8]; |
|||
for (int y = 0; y < board.length; y++) { |
|||
for (int x = 0; x < board[0].length; x++) { |
|||
cellSymbol[y][x] = (board[y][x] == null) ? " " : board[y][x].getSymbol(); |
|||
} |
|||
} |
|||
return cellSymbol; |
|||
} |
|||
|
|||
public boolean isCellInBoard(int x, int y) { |
|||
if (x >= 0 && x < board[0].length && y >= 0 && y < board.length) |
|||
return true; |
|||
return false; |
|||
} |
|||
|
|||
public boolean validateMove(int sourceX, int sourceY, int destX, int destY) { |
|||
//Destination not in board range |
|||
if (!isCellInBoard(sourceX, sourceY) || !isCellInBoard(destX, destY)) |
|||
return false; |
|||
ChessFigure figure = board[sourceY][sourceX]; |
|||
//Destination has same Team |
|||
if (board[destY][destX] != null) |
|||
if (board[destY][destX].getTeam() == figure.getTeam()) |
|||
return false; |
|||
int deltaX = destX - sourceX; |
|||
int deltaY = sourceY - destY; |
|||
//Pawn special case |
|||
if (figure.getType() == ChessFigure.Type.PAWN) { |
|||
if (board[destY][destX] != null) { |
|||
if (board[destY][destX].getTeam() == figure.getTeam()) |
|||
return false; |
|||
if (figure.getTeam() == ChessFigure.Team.WHITE && board[destY][destX].getTeam() != figure.getTeam() && (deltaX == -1 || deltaX == 1) && deltaY == 1) |
|||
return true; |
|||
if (figure.getTeam() == ChessFigure.Team.BLACK && board[destY][destX].getTeam() != figure.getTeam() && (deltaX == -1 || deltaX == 1) && deltaY == -1) |
|||
return true; |
|||
} |
|||
if (figure.isRelativeMoveValid(deltaX, deltaY)) |
|||
return true; |
|||
} |
|||
if (figure.isRelativeMoveValid(deltaX, deltaY)) { |
|||
if (figure.getType() == ChessFigure.Type.KNIGHT) |
|||
return true; |
|||
if (validateCleanPath(sourceX, sourceY, destX, destY)) |
|||
return true; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
protected boolean validateCleanPath(int sourceX, int sourceY, final int destX, final int destY) { |
|||
int deltaX = destX - sourceX; |
|||
int deltaY = destY - sourceY; |
|||
|
|||
int stepX = getStepWidth(deltaX); |
|||
int stepY = getStepWidth(deltaY); |
|||
sourceX += stepX; |
|||
sourceY += stepY; |
|||
if (!isCellInBoard(sourceX, sourceY) || !isCellInBoard(destX, destY)) |
|||
return false; |
|||
if (Math.abs(deltaX) <= 1 && Math.abs(deltaY) <= 1) |
|||
return true; |
|||
while (!(sourceX == destX && sourceY == destY)) { |
|||
if (board[sourceY][sourceX] != null) |
|||
return false; |
|||
sourceX += stepX; |
|||
sourceY += stepY; |
|||
if (sourceX == destX && sourceY == destY) |
|||
return true; |
|||
if (sourceX > 7 || sourceY > 7) |
|||
return false; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
public MoveFeedback moveFigure(int sourceX, int sourceY, final int destX, final int destY) { |
|||
if (!isCellInBoard(sourceX, sourceY) || !isCellInBoard(destX, destY)) |
|||
return MoveFeedback.OUTSIDEOFBOARD; |
|||
if (validateMove(sourceX, sourceY, destX, destY)) { |
|||
MoveFeedback feedback = MoveFeedback.INVALID; |
|||
if (board[destY][destX] == null) |
|||
feedback = MoveFeedback.MOVE; |
|||
else |
|||
feedback = MoveFeedback.ENEMYBEATEN; |
|||
board[destY][destX] = board[sourceY][sourceX]; |
|||
board[sourceY][sourceX] = null; |
|||
return feedback; |
|||
} |
|||
return MoveFeedback.INVALID; |
|||
} |
|||
|
|||
private int getStepWidth(int delta) { |
|||
if (delta == 0) |
|||
return 0; |
|||
else if (delta > 0) |
|||
return 1; |
|||
else |
|||
return -1; |
|||
} |
|||
|
|||
public int scanForOccurringFigure(ChessFigure.Type type, ChessFigure.Team team){ |
|||
int count = 0; |
|||
ChessFigure template = new ChessFigure(type, team); |
|||
|
|||
for(int y = 0; y < board.length; y++) |
|||
for(int x = 0; x < board[0].length; x++) |
|||
count += (template.equals(board[y][x]))?1:0; |
|||
|
|||
return count; |
|||
} |
|||
|
|||
public ChessFigure[][] getBoard() { |
|||
return this.board; |
|||
} |
|||
|
|||
public void setChessBoard(ChessFigure[][] board) { |
|||
this.board = board; |
|||
} |
|||
} |
@ -0,0 +1,115 @@ |
|||
package Game.ChessObj; |
|||
|
|||
public class ChessFigure { |
|||
|
|||
public enum Type { |
|||
KING, |
|||
QUEEN, |
|||
CASTLE, |
|||
BISHOP, |
|||
KNIGHT, |
|||
PAWN |
|||
} |
|||
|
|||
public enum Team { |
|||
WHITE, |
|||
BLACK |
|||
} |
|||
|
|||
private final Type type; |
|||
private final Team team; |
|||
|
|||
public ChessFigure(Type type, Team team) { |
|||
this.type = type; |
|||
this.team = team; |
|||
} |
|||
|
|||
public Type getType() { |
|||
return this.type; |
|||
} |
|||
|
|||
public Team getTeam() { |
|||
return this.team; |
|||
} |
|||
|
|||
public String getSymbol() { |
|||
String symbol = ""; |
|||
switch (getType()) { |
|||
case KING: |
|||
symbol = "K"; |
|||
break; |
|||
case QUEEN: |
|||
symbol = "Q"; |
|||
break; |
|||
case CASTLE: |
|||
symbol = "T"; |
|||
break; |
|||
case BISHOP: |
|||
symbol = "I"; |
|||
break; |
|||
case KNIGHT: |
|||
symbol = "Z"; |
|||
break; |
|||
case PAWN: |
|||
symbol = "o"; |
|||
break; |
|||
default: |
|||
} |
|||
|
|||
symbol = ((this.getTeam() == Team.WHITE) ? " " : "|") + symbol + ((this.getTeam() == Team.WHITE) ? " " : "|"); |
|||
|
|||
return symbol; |
|||
} |
|||
|
|||
public boolean isRelativeMoveValid(int dx, int dy) { |
|||
if (dx == 0 && dy == 0) |
|||
return false; |
|||
switch (getType()) { |
|||
case KING: |
|||
if (Math.abs(dx) == 1 && Math.abs(dy) == 1) |
|||
return true; |
|||
break; |
|||
case QUEEN: |
|||
if ((Math.abs(dx) == Math.abs(dy)) || (dx == 0 ^ dy == 0)) |
|||
return true; |
|||
break; |
|||
case CASTLE: |
|||
if (dx == 0 ^ dy == 0) |
|||
return true; |
|||
break; |
|||
case BISHOP: |
|||
if (Math.abs(dx) == Math.abs(dy)) |
|||
return true; |
|||
break; |
|||
case KNIGHT: |
|||
if ((dy == 2 && (dx == -1 || dx == 1)) || (dy == -2 && (dx == -1 || dx == 1)) || (dx == 2 && (dy == -1 || dy == 1)) || (dx == -2 && (dy == -1 || dy == 1))) |
|||
return true; |
|||
break; |
|||
case PAWN: |
|||
if (dx != 0) |
|||
return false; |
|||
if (getTeam() == Team.WHITE && (dy == 1)) |
|||
return true; |
|||
if (getTeam() == Team.BLACK && (dy == -1)) |
|||
return true; |
|||
break; |
|||
default: |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(Object o) { |
|||
if (!(o instanceof ChessFigure)) { |
|||
return false; |
|||
} |
|||
|
|||
ChessFigure x = (ChessFigure) o; |
|||
if (this.getType() != x.getType() || this.getTeam() != x.getTeam()) |
|||
return false; |
|||
|
|||
return true; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,228 @@ |
|||
package Game.ChessObj; |
|||
|
|||
import org.junit.jupiter.api.AfterEach; |
|||
import org.junit.jupiter.api.BeforeEach; |
|||
import org.junit.jupiter.api.Test; |
|||
|
|||
import static org.junit.jupiter.api.Assertions.*; |
|||
import static org.mockito.Mockito.mock; |
|||
|
|||
class ChessBoardTest { |
|||
|
|||
ChessFigure.Type[] startOrder = { |
|||
ChessFigure.Type.CASTLE, ChessFigure.Type.KNIGHT, ChessFigure.Type.BISHOP, ChessFigure.Type.QUEEN, ChessFigure.Type.KING, ChessFigure.Type.BISHOP, ChessFigure.Type.KNIGHT, ChessFigure.Type.CASTLE |
|||
}; |
|||
|
|||
ChessBoard chessBoard; |
|||
|
|||
@BeforeEach |
|||
void setUp() { |
|||
chessBoard = new ChessBoard(); |
|||
} |
|||
|
|||
@AfterEach |
|||
void tearDown() { |
|||
} |
|||
|
|||
@Test |
|||
void initBoard() { |
|||
ChessFigure[][] board = chessBoard.getBoard(); |
|||
for (int x = 0; x < board[0].length; x++) { |
|||
for (int y = 0; y < board.length; y++) { |
|||
//test pawns |
|||
if (y == 1) { |
|||
assertEquals(new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK), board[y][x]); |
|||
continue; |
|||
} |
|||
if (y == 6) { |
|||
assertEquals(new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE), board[y][x]); |
|||
continue; |
|||
} |
|||
|
|||
if (y == 0) { |
|||
assertEquals(new ChessFigure(startOrder[x], ChessFigure.Team.BLACK), board[y][x]); |
|||
continue; |
|||
} |
|||
if (y == 7) { |
|||
assertEquals(new ChessFigure(startOrder[x], ChessFigure.Team.WHITE), board[y][x]); |
|||
continue; |
|||
} |
|||
//rest should be empty(null) |
|||
assertNull(board[y][x]); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@Test |
|||
void getCellSymbols() { |
|||
String[][] expectedArray = { |
|||
{"|T|", "|Z|", "|I|", "|Q|", "|K|", "|I|", "|Z|", "|T|"}, |
|||
{"|o|", "|o|", "|o|", "|o|", "|o|", "|o|", "|o|", "|o|"}, |
|||
{" ", " ", " ", " ", " ", " ", " ", " "}, |
|||
{" ", " ", " ", " ", " ", " ", " ", " "}, |
|||
{" ", " ", " ", " ", " ", " ", " ", " "}, |
|||
{" ", " ", " ", " ", " ", " ", " ", " "}, |
|||
{" o ", " o ", " o ", " o ", " o ", " o ", " o ", " o "}, |
|||
{" T ", " Z ", " I ", " Q ", " K ", " I ", " Z ", " T "} |
|||
}; |
|||
assertArrayEquals(expectedArray, chessBoard.getCellSymbols()); |
|||
} |
|||
|
|||
@Test |
|||
void isCellInBoard() { |
|||
assertTrue(chessBoard.isCellInBoard(0, 0)); |
|||
assertTrue(chessBoard.isCellInBoard(7, 7)); |
|||
assertTrue(chessBoard.isCellInBoard(2, 1)); |
|||
assertTrue(chessBoard.isCellInBoard(5, 7)); |
|||
assertFalse(chessBoard.isCellInBoard(-1, 0)); |
|||
assertFalse(chessBoard.isCellInBoard(4, 8)); |
|||
assertFalse(chessBoard.isCellInBoard(10, 20)); |
|||
} |
|||
|
|||
@Test |
|||
void validateCleanPath() { |
|||
ChessFigure[][] tempBoard = chessBoard.getBoard(); |
|||
|
|||
tempBoard[3][0] = mock(ChessFigure.class); |
|||
tempBoard[3][5] = mock(ChessFigure.class); |
|||
chessBoard.setChessBoard(tempBoard); |
|||
|
|||
assertFalse(chessBoard.validateCleanPath(-2, 0, 1, 4)); |
|||
assertTrue(chessBoard.validateCleanPath(0, 3, 5, 3)); |
|||
assertFalse(chessBoard.validateCleanPath(0, 3, 6, 3)); |
|||
assertFalse(chessBoard.validateCleanPath(0, 3, 7, 3)); |
|||
assertFalse(chessBoard.validateCleanPath(0, 3, 5, 5)); |
|||
assertFalse(chessBoard.validateCleanPath(0, 3, 4, 7)); |
|||
assertTrue(chessBoard.validateCleanPath(0, 3, 2, 5)); |
|||
assertTrue(chessBoard.validateCleanPath(7, 3, 5, 5)); |
|||
assertFalse(chessBoard.validateCleanPath(7, 3, 6, 6)); |
|||
} |
|||
|
|||
/* |
|||
0 1 2 3 4 5 6 7 |
|||
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ |
|||
0 │ │ │ │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
1 │ │ │ │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
2 │ │ │ │ │ o │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
3 │ │ │ │ |o| │ │ |o| │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
4 │ │ │ o │ │ o │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
5 │ │ │ │ |o| │ │ │ |T| │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
6 │ │ │ │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
7 │ │ │ T │ │ B │ │ │ │ |
|||
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ |
|||
*/ |
|||
@Test |
|||
void validateMove() { |
|||
ChessFigure[][] tempBoard = new ChessFigure[8][8]; |
|||
|
|||
tempBoard[4][2] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE); |
|||
tempBoard[4][4] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE); |
|||
tempBoard[2][4] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE); |
|||
tempBoard[3][3] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK); |
|||
tempBoard[3][5] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK); |
|||
tempBoard[5][3] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK); |
|||
tempBoard[7][2] = new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.WHITE); |
|||
tempBoard[7][4] = new ChessFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE); |
|||
tempBoard[5][6] = new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.BLACK); |
|||
|
|||
chessBoard.setChessBoard(tempBoard); |
|||
|
|||
//White pawn normal move |
|||
assertTrue(chessBoard.validateMove(4, 2, 4, 1)); |
|||
assertFalse(chessBoard.validateMove(4, 2, 4, 3)); |
|||
assertFalse(chessBoard.validateMove(4, 2, 3, 1)); |
|||
assertFalse(chessBoard.validateMove(4, 2, 5, 1)); |
|||
//White pawn beats Black |
|||
assertTrue(chessBoard.validateMove(4, 4, 3, 3)); |
|||
assertTrue(chessBoard.validateMove(4, 4, 5, 3)); |
|||
//Black pawn normal move |
|||
assertTrue(chessBoard.validateMove(3, 5, 3, 6)); |
|||
assertFalse(chessBoard.validateMove(3, 5, 3, 4)); |
|||
assertFalse(chessBoard.validateMove(3, 5, 2, 6)); |
|||
assertFalse(chessBoard.validateMove(3, 5, 6, 6)); |
|||
//Black pawn beats White |
|||
assertTrue(chessBoard.validateMove(3, 3, 2, 4)); |
|||
assertTrue(chessBoard.validateMove(3, 3, 4, 4)); |
|||
|
|||
//CastleMoves for testing global rules |
|||
assertTrue(chessBoard.validateMove(2, 7, 2, 5)); |
|||
assertFalse(chessBoard.validateMove(2, 7, 2, 4)); |
|||
assertFalse(chessBoard.validateMove(2, 7, 2, 2)); |
|||
|
|||
//Bishop Moves for testing global moves |
|||
assertTrue(chessBoard.validateMove(4, 7, 5, 6)); |
|||
assertTrue(chessBoard.validateMove(4, 7, 6, 5)); |
|||
assertFalse(chessBoard.validateMove(4, 7, 7, 4)); |
|||
} |
|||
|
|||
/* |
|||
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 |
|||
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ |
|||
0 │ │ │ │ │ │ │ │ │ 0 │ │ │ │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
1 │ │ │ │ T │ │ │ │ K │ 1 │ │ │ │ │ │ │ │ K │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
2 │ │ │ │ │ │ │ │ │ 2 │ │ │ │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
3 │ │ │ │ │ │ Z │ │ │ 3 │ │ │ │ │ │ Z │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ --> ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
4 │ │ │ │ │ │ │ │ │ 4 │ │ │ │ │ B │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
5 │ │ │ |Q| │ │ │ │ │ │ 5 │ │ │ T │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
6 │ │ │ │ │ │ │ B │ │ 6 │ │ │ │ │ │ │ │ │ |
|||
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |
|||
7 │ │ │ │ │ │ │ │ │ 7 │ │ │ │ │ │ │ │ │ |
|||
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ |
|||
*/ |
|||
@Test |
|||
void moveFigure() { |
|||
ChessFigure[][] tempBoard = new ChessFigure[8][8]; |
|||
ChessFigure[][] resultBoard = new ChessFigure[8][8]; |
|||
|
|||
tempBoard[1][3] = new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.WHITE); |
|||
tempBoard[1][7] = new ChessFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE); |
|||
tempBoard[6][6] = new ChessFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE); |
|||
tempBoard[3][5] = new ChessFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE); |
|||
tempBoard[5][2] = new ChessFigure(ChessFigure.Type.QUEEN, ChessFigure.Team.BLACK); |
|||
|
|||
resultBoard[5][2] = new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.WHITE); |
|||
resultBoard[1][7] = new ChessFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE); |
|||
resultBoard[4][4] = new ChessFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE); |
|||
resultBoard[3][5] = new ChessFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE); |
|||
|
|||
chessBoard.setChessBoard(tempBoard); |
|||
|
|||
assertEquals(chessBoard.moveFigure(3, 1, 2, 1), ChessBoard.MoveFeedback.MOVE); |
|||
assertEquals(chessBoard.moveFigure(2, 1, 2, 5), ChessBoard.MoveFeedback.ENEMYBEATEN); |
|||
assertEquals(chessBoard.moveFigure(6, 6, 4, 4), ChessBoard.MoveFeedback.MOVE); |
|||
assertEquals(chessBoard.moveFigure(7, 1, 8, 1), ChessBoard.MoveFeedback.OUTSIDEOFBOARD); |
|||
assertEquals(chessBoard.moveFigure(5, 3, 4, 2), ChessBoard.MoveFeedback.INVALID); |
|||
|
|||
assertArrayEquals(resultBoard, chessBoard.getBoard()); |
|||
} |
|||
|
|||
@Test |
|||
void scanForOccurringFigure() { |
|||
assertEquals(8, chessBoard.scanForOccurringFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE)); |
|||
assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.WHITE)); |
|||
assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE)); |
|||
assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE)); |
|||
assertEquals(1, chessBoard.scanForOccurringFigure(ChessFigure.Type.QUEEN, ChessFigure.Team.WHITE)); |
|||
assertEquals(1, chessBoard.scanForOccurringFigure(ChessFigure.Type.KING, ChessFigure.Team.WHITE)); |
|||
|
|||
assertEquals(8, chessBoard.scanForOccurringFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK)); |
|||
assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.BLACK)); |
|||
assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.BLACK)); |
|||
assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.BLACK)); |
|||
assertEquals(1, chessBoard.scanForOccurringFigure(ChessFigure.Type.QUEEN, ChessFigure.Team.BLACK)); |
|||
assertEquals(1, chessBoard.scanForOccurringFigure(ChessFigure.Type.KING, ChessFigure.Team.BLACK)); |
|||
} |
|||
} |
@ -0,0 +1,111 @@ |
|||
package Game.ChessObj; |
|||
|
|||
import org.junit.jupiter.api.AfterEach; |
|||
import org.junit.jupiter.api.BeforeEach; |
|||
import org.junit.jupiter.api.Test; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
import static org.junit.jupiter.api.Assertions.*; |
|||
|
|||
class ChessFigureTest { |
|||
|
|||
@BeforeEach |
|||
void setUp() { |
|||
} |
|||
|
|||
@AfterEach |
|||
void tearDown() { |
|||
} |
|||
|
|||
@Test |
|||
void getSymbol() { |
|||
assertEquals(" K ", new ChessFigure(ChessFigure.Type.KING, ChessFigure.Team.WHITE).getSymbol()); |
|||
assertEquals(" Q ", new ChessFigure(ChessFigure.Type.QUEEN, ChessFigure.Team.WHITE).getSymbol()); |
|||
assertEquals(" I ", new ChessFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE).getSymbol()); |
|||
assertEquals(" T ", new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.WHITE).getSymbol()); |
|||
assertEquals(" Z ", new ChessFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE).getSymbol()); |
|||
assertEquals(" o ", new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE).getSymbol()); |
|||
assertEquals("|K|", new ChessFigure(ChessFigure.Type.KING, ChessFigure.Team.BLACK).getSymbol()); |
|||
assertEquals("|Q|", new ChessFigure(ChessFigure.Type.QUEEN, ChessFigure.Team.BLACK).getSymbol()); |
|||
assertEquals("|I|", new ChessFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.BLACK).getSymbol()); |
|||
assertEquals("|T|", new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.BLACK).getSymbol()); |
|||
assertEquals("|Z|", new ChessFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.BLACK).getSymbol()); |
|||
assertEquals("|o|", new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK).getSymbol()); |
|||
} |
|||
|
|||
@Test |
|||
void testEquals() { |
|||
ChessFigure kw1 = new ChessFigure(ChessFigure.Type.KING, ChessFigure.Team.WHITE); |
|||
ChessFigure kw2 = new ChessFigure(ChessFigure.Type.KING, ChessFigure.Team.WHITE); |
|||
ChessFigure kb1 = new ChessFigure(ChessFigure.Type.KING, ChessFigure.Team.BLACK); |
|||
ChessFigure pw1 = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE); |
|||
|
|||
assertEquals(kw1, kw2); |
|||
assertNotEquals(kw2, kb1); |
|||
assertNotEquals(pw1, kb1); |
|||
} |
|||
|
|||
@Test |
|||
void isRelativeMoveValid() { |
|||
ArrayList<ChessFigure> array = new ArrayList<>(); |
|||
for (ChessFigure.Type type : ChessFigure.Type.values()) |
|||
for (ChessFigure.Team team : ChessFigure.Team.values()) |
|||
array.add(new ChessFigure(type, team)); |
|||
|
|||
for (ChessFigure figure : array) { |
|||
for (int x = -4; x <= 4; x++) { |
|||
for (int y = -4; y <= 4; y++) { |
|||
if (x == 0 && y == 0) { |
|||
assertFalse(figure.isRelativeMoveValid(x, y)); |
|||
continue; |
|||
} |
|||
switch (figure.getType()) { |
|||
case KING: |
|||
if (x * x == 1 && y * y == 1) { |
|||
assertTrue(figure.isRelativeMoveValid(x, y)); |
|||
continue; |
|||
} |
|||
break; |
|||
case QUEEN: |
|||
if (Math.abs(x) == Math.abs(y) || (x == 0 ^ y == 0)) { |
|||
assertTrue(figure.isRelativeMoveValid(x, y)); |
|||
continue; |
|||
} |
|||
break; |
|||
case CASTLE: |
|||
if (x == 0 ^ y == 0) { |
|||
assertTrue(figure.isRelativeMoveValid(x, y)); |
|||
continue; |
|||
} |
|||
break; |
|||
case BISHOP: |
|||
if (Math.abs(x) == Math.abs(y)) { |
|||
assertTrue(figure.isRelativeMoveValid(x, y)); |
|||
continue; |
|||
} |
|||
break; |
|||
case KNIGHT: |
|||
if ((y == 2 && (x == -1 || x == 1)) || (y == -2 && (x == -1 || x == 1)) || (x == 2 && (y == -1 || y == 1)) || (x == -2 && (y == -1 || y == 1))) { |
|||
assertTrue(figure.isRelativeMoveValid(x, y)); |
|||
continue; |
|||
} |
|||
break; |
|||
case PAWN: |
|||
if (figure.getTeam() == ChessFigure.Team.WHITE && (y == 1) && x == 0) { |
|||
assertTrue(figure.isRelativeMoveValid(x, y)); |
|||
continue; |
|||
} |
|||
if (figure.getTeam() == ChessFigure.Team.BLACK && (y == -1) && x == 0) { |
|||
assertTrue(figure.isRelativeMoveValid(x, y)); |
|||
continue; |
|||
} |
|||
break; |
|||
default: |
|||
} |
|||
assertFalse(figure.isRelativeMoveValid(x, y), "Type: " + figure.getType() + " X: " + x + " Y: " + y + " should be false"); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,132 @@ |
|||
package Game; |
|||
|
|||
import Game.ChessObj.ChessFigure; |
|||
import org.junit.jupiter.api.AfterEach; |
|||
import org.junit.jupiter.api.BeforeEach; |
|||
import org.junit.jupiter.api.Test; |
|||
|
|||
import java.util.ArrayList; |
|||
|
|||
import static org.junit.jupiter.api.Assertions.*; |
|||
|
|||
class ChessTest { |
|||
|
|||
Chess chess; |
|||
|
|||
@BeforeEach |
|||
void setUp() { |
|||
chess = new Chess(); |
|||
} |
|||
|
|||
@AfterEach |
|||
void tearDown() { |
|||
} |
|||
|
|||
@Test |
|||
void convertInput() { |
|||
int[] test1 = {0, 0}; |
|||
int[] test2 = {7, 7}; |
|||
int[] test3 = {6, 2}; |
|||
|
|||
assertNull(chess.convertInput("0g2")); |
|||
assertNull(chess.convertInput("25")); |
|||
assertNull(chess.convertInput("bg")); |
|||
assertNull(chess.convertInput("9b")); |
|||
assertNull(chess.convertInput("2i")); |
|||
|
|||
assertArrayEquals(chess.convertInput("1a"), test1); |
|||
assertArrayEquals((chess.convertInput("a1")), test1); |
|||
assertArrayEquals((chess.convertInput("8h")), test2); |
|||
assertArrayEquals((chess.convertInput("h8")), test2); |
|||
|
|||
assertArrayEquals((chess.convertInput("3G")), test3); |
|||
assertArrayEquals((chess.convertInput("G3")), test3); |
|||
} |
|||
|
|||
@Test |
|||
void getSidebarFigures() { |
|||
ArrayList<ChessFigure> array1 = new ArrayList<>(); |
|||
ArrayList<ChessFigure> array2 = new ArrayList<>(); |
|||
ArrayList<ChessFigure> array3 = new ArrayList<>(); |
|||
ArrayList<String> expectedArray2 = new ArrayList<>(); |
|||
ArrayList<String> expectedArray3 = new ArrayList<>(); |
|||
|
|||
array2.add(new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE)); |
|||
array2.add(new ChessFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE)); |
|||
array2.add(new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE)); |
|||
array2.add(new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE)); |
|||
array2.add(new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.WHITE)); |
|||
array2.add(new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE)); |
|||
|
|||
expectedArray2.add(" o , I , o , o , T ,"); |
|||
expectedArray2.add(" o "); |
|||
|
|||
array3.add(new ChessFigure(ChessFigure.Type.QUEEN, ChessFigure.Team.BLACK)); |
|||
array3.add(new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK)); |
|||
array3.add(new ChessFigure(ChessFigure.Type.KING, ChessFigure.Team.BLACK)); |
|||
array3.add(new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK)); |
|||
|
|||
expectedArray3.add("|Q|,|o|,|K|,|o|"); |
|||
|
|||
assertEquals(0, chess.getSidebarFigures(array1, 5).size()); |
|||
assertEquals(expectedArray2, chess.getSidebarFigures(array2, 5)); |
|||
assertEquals(expectedArray3, chess.getSidebarFigures(array3, 5)); |
|||
} |
|||
|
|||
@Test |
|||
void makeMove() { |
|||
int countBlackPawns = chess.getChessBoard().scanForOccurringFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK); |
|||
int countWhiteBishops = chess.getChessBoard().scanForOccurringFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE); |
|||
chess.makeMove(chess.convertInput("a2"), chess.convertInput("a3")); |
|||
chess.makeMove(chess.convertInput("e7"), chess.convertInput("e6")); |
|||
chess.makeMove(chess.convertInput("f8"), chess.convertInput("a3")); |
|||
chess.makeMove(chess.convertInput("b2"), chess.convertInput("a3")); |
|||
|
|||
assertEquals(countBlackPawns - 1, chess.getChessBoard().scanForOccurringFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK)); |
|||
assertEquals(countWhiteBishops - 1, chess.getChessBoard().scanForOccurringFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE)); |
|||
} |
|||
|
|||
@Test |
|||
void update() { |
|||
//starting team = White |
|||
assertEquals(chess.getCurrentTeam(), ChessFigure.Team.WHITE); |
|||
|
|||
//Emtpy cell |
|||
chess.update("d7"); |
|||
chess.update("g5"); |
|||
assertEquals(chess.getCurrentTeam(), ChessFigure.Team.WHITE); |
|||
|
|||
chess.update("7b"); |
|||
chess.update("6b"); |
|||
assertEquals(chess.getCurrentTeam(), ChessFigure.Team.BLACK); |
|||
|
|||
chess.update("e2"); |
|||
chess.update("e3"); |
|||
assertEquals(chess.getCurrentTeam(), ChessFigure.Team.WHITE); |
|||
|
|||
chess.update("6b"); |
|||
chess.update("5b"); |
|||
assertEquals(chess.getCurrentTeam(), ChessFigure.Team.BLACK); |
|||
|
|||
//Defeat enemy |
|||
chess.update("f1"); |
|||
chess.update("b5"); |
|||
assertEquals(7, chess.getChessBoard().scanForOccurringFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE)); |
|||
assertEquals(chess.getCurrentTeam(), ChessFigure.Team.WHITE); |
|||
|
|||
chess.update("d7"); |
|||
chess.update("d6"); |
|||
assertEquals(chess.getCurrentTeam(), ChessFigure.Team.BLACK); |
|||
|
|||
//Invalid Move |
|||
chess.update("5b"); |
|||
chess.update("a5"); |
|||
assertEquals(chess.getCurrentTeam(), ChessFigure.Team.BLACK); |
|||
|
|||
//King defeated |
|||
chess.update("5b"); |
|||
chess.update("e8"); |
|||
|
|||
assertTrue(chess.isFinished()); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue