Added positional board evaluation
This commit is contained in:
parent
c3a787c3a7
commit
6d98d9a963
@ -21,6 +21,43 @@ public class Board implements Cloneable {
|
|||||||
private Map<Color, Position> kingPos;
|
private Map<Color, Position> kingPos;
|
||||||
private Log log;
|
private Log log;
|
||||||
|
|
||||||
|
private static final Map<Type, int[][]> positionScores;
|
||||||
|
|
||||||
|
static {
|
||||||
|
positionScores = new HashMap<>();
|
||||||
|
positionScores.put(Type.KING,
|
||||||
|
new int[][] { new int[] { -3, -4, -4, -5, -5, -4, -4, -3 },
|
||||||
|
new int[] { -3, -4, -4, -5, -4, -4, -4, -3 }, new int[] { -3, -4, -4, -5, -4, -4, -4, -3 },
|
||||||
|
new int[] { -3, -4, -4, -5, -4, -4, -4, -3 }, new int[] { -2, -3, -3, -2, -2, -2, -2, -1 },
|
||||||
|
new int[] { -1, -2, -2, -2, -2, -2, -2, -1 }, new int[] { 2, 2, 0, 0, 0, 0, 2, 2 },
|
||||||
|
new int[] { 2, 3, 1, 0, 0, 1, 3, 2 } });
|
||||||
|
positionScores.put(Type.QUEEN,
|
||||||
|
new int[][] { new int[] { -2, -1, -1, -1, -1, -1, -1, -2 }, new int[] { -1, 0, 0, 0, 0, 0, 0, -1 },
|
||||||
|
new int[] { -1, 0, 1, 1, 1, 1, 0, -1 }, new int[] { -1, 0, 1, 1, 1, 1, 0, -1 },
|
||||||
|
new int[] { 0, 0, 1, 1, 1, 1, 0, -1 }, new int[] { -1, 1, 1, 1, 1, 1, 0, -1 },
|
||||||
|
new int[] { -1, 0, 1, 0, 0, 0, 0, -1 }, new int[] { -2, -1, -1, -1, -1, -1, -1, -2 } });
|
||||||
|
positionScores.put(Type.ROOK,
|
||||||
|
new int[][] { new int[] { 0, 0, 0, 0, 0, 0, 0, 0 }, new int[] { 1, 1, 1, 1, 1, 1, 1, 1 },
|
||||||
|
new int[] { -1, 0, 0, 0, 0, 0, 0, -1 }, new int[] { -1, 0, 0, 0, 0, 0, 0, -1 },
|
||||||
|
new int[] { -1, 0, 0, 0, 0, 0, 0, -1 }, new int[] { -1, 0, 0, 0, 0, 0, 0, -1 },
|
||||||
|
new int[] { -1, 0, 0, 0, 0, 0, 0, -1 }, new int[] { 0, 0, 0, 1, 1, 0, 0, 0 } });
|
||||||
|
positionScores.put(Type.KNIGHT,
|
||||||
|
new int[][] { new int[] { -5, -4, -3, -3, -3, -3, -4, -5 }, new int[] { -4, -2, 0, 0, 0, 0, -2, -4 },
|
||||||
|
new int[] { -3, 0, 1, 2, 2, 1, 0, -3 }, new int[] { -3, 1, 2, 2, 2, 2, 1, -3 },
|
||||||
|
new int[] { -3, 0, 2, 2, 2, 2, 0, -1 }, new int[] { -3, 1, 1, 2, 2, 1, 1, -3 },
|
||||||
|
new int[] { -4, -2, 0, 1, 1, 0, -2, -4 }, new int[] { -5, -4, -3, -3, -3, -3, -4, -5 } });
|
||||||
|
positionScores.put(Type.BISHOP,
|
||||||
|
new int[][] { new int[] { -2, -1, -1, -1, -1, -1, -1, 2 }, new int[] { -1, 0, 0, 0, 0, 0, 0, -1 },
|
||||||
|
new int[] { -1, 0, 1, 1, 1, 1, 0, -1 }, new int[] { -1, 1, 1, 1, 1, 1, 1, -1 },
|
||||||
|
new int[] { -1, 0, 1, 1, 1, 1, 0, -1 }, new int[] { -1, 1, 1, 1, 1, 1, 1, -1 },
|
||||||
|
new int[] { -1, 1, 0, 0, 0, 0, 1, -1 }, new int[] { -2, -1, -1, -1, -1, -1, -2 } });
|
||||||
|
positionScores.put(Type.PAWN,
|
||||||
|
new int[][] { new int[] { 0, 0, 0, 0, 0, 0, 0, 0 }, new int[] { 5, 5, 5, 5, 5, 5, 5, 5 },
|
||||||
|
new int[] { 1, 1, 2, 3, 3, 2, 1, 1 }, new int[] { 0, 0, 1, 3, 3, 1, 0, 0 },
|
||||||
|
new int[] { 0, 0, 0, 2, 2, 0, 0, 0 }, new int[] { 0, 0, -1, 0, 0, -1, 0, 0 },
|
||||||
|
new int[] { 0, 1, 1, -2, -2, 1, 1, 0 }, new int[] { 0, 0, 0, 0, 0, 0, 0, 0 } });
|
||||||
|
}
|
||||||
|
|
||||||
public Board() {
|
public Board() {
|
||||||
boardArr = new Piece[8][8];
|
boardArr = new Piece[8][8];
|
||||||
kingPos = new HashMap<>();
|
kingPos = new HashMap<>();
|
||||||
@ -182,22 +219,26 @@ public class Board implements Cloneable {
|
|||||||
int score = 0;
|
int score = 0;
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
for (int j = 0; j < 8; j++)
|
for (int j = 0; j < 8; j++)
|
||||||
if (boardArr[i][j] != null && boardArr[i][j].getColor() == color) switch (boardArr[i][j].getType()) {
|
if (boardArr[i][j] != null && boardArr[i][j].getColor() == color) {
|
||||||
case QUEEN:
|
switch (boardArr[i][j].getType()) {
|
||||||
score += 8;
|
case QUEEN:
|
||||||
break;
|
score += 90;
|
||||||
case ROOK:
|
break;
|
||||||
score += 5;
|
case ROOK:
|
||||||
break;
|
score += 50;
|
||||||
case KNIGHT:
|
break;
|
||||||
score += 3;
|
case KNIGHT:
|
||||||
break;
|
score += 30;
|
||||||
case BISHOP:
|
break;
|
||||||
score += 3;
|
case BISHOP:
|
||||||
break;
|
score += 30;
|
||||||
case PAWN:
|
break;
|
||||||
score += 1;
|
case PAWN:
|
||||||
break;
|
score += 10;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (positionScores.containsKey(boardArr[i][j].getType()))
|
||||||
|
score += positionScores.get(boardArr[i][j].getType())[i][color == Color.WHITE ? j : 7 - j];
|
||||||
}
|
}
|
||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ public class GameModeDialog extends JDialog {
|
|||||||
btnAI.addActionListener((evt) -> {
|
btnAI.addActionListener((evt) -> {
|
||||||
Map<Color, Player> players = new HashMap<>();
|
Map<Color, Player> players = new HashMap<>();
|
||||||
players.put(Color.WHITE, new NaturalPlayer(board, Color.WHITE, overlayComponent));
|
players.put(Color.WHITE, new NaturalPlayer(board, Color.WHITE, overlayComponent));
|
||||||
players.put(Color.BLACK, new AIPlayer(board, Color.BLACK, 4));
|
players.put(Color.BLACK, new AIPlayer(board, Color.BLACK, 5));
|
||||||
new Game(players, boardComponent).start();
|
new Game(players, boardComponent).start();
|
||||||
dispose();
|
dispose();
|
||||||
});
|
});
|
||||||
@ -62,8 +62,8 @@ public class GameModeDialog extends JDialog {
|
|||||||
JButton btnAI2 = new JButton("AI against AI");
|
JButton btnAI2 = new JButton("AI against AI");
|
||||||
btnAI2.addActionListener((evt) -> {
|
btnAI2.addActionListener((evt) -> {
|
||||||
Map<Color, Player> players = new HashMap<>();
|
Map<Color, Player> players = new HashMap<>();
|
||||||
players.put(Color.WHITE, new AIPlayer(board, Color.WHITE, 4));
|
players.put(Color.WHITE, new AIPlayer(board, Color.WHITE, 5));
|
||||||
players.put(Color.BLACK, new AIPlayer(board, Color.BLACK, 3));
|
players.put(Color.BLACK, new AIPlayer(board, Color.BLACK, 4));
|
||||||
new Game(players, boardComponent).start();
|
new Game(players, boardComponent).start();
|
||||||
dispose();
|
dispose();
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user