|
@@ -160,8 +160,6 @@ fn king_safety(game: &Game, side: Side) -> PosValue {
|
|
|
let king = game.get_piece(KING, side);
|
|
|
let area = north_one(king)
|
|
|
| south_one(king)
|
|
|
- | east_one(king)
|
|
|
- | west_one(king)
|
|
|
| northeast_one(king)
|
|
|
| northwest_one(king)
|
|
|
| southwest_one(king)
|
|
@@ -170,6 +168,8 @@ fn king_safety(game: &Game, side: Side) -> PosValue {
|
|
|
let guards = game.get_all_side(side) & area;
|
|
|
let attackers = game.get_all_side(!side) & area;
|
|
|
|
|
|
+ let backrow = if king & (ROW_1 | ROW_8) != 0 { 50 } else { 0 };
|
|
|
+
|
|
|
let kneighbors = guards.count_ones() as PosValue * 5 - attackers.count_ones() as PosValue * 15;
|
|
|
|
|
|
let enemies = game.get_all_side(!side);
|
|
@@ -179,7 +179,7 @@ fn king_safety(game: &Game, side: Side) -> PosValue {
|
|
|
let dang_row_opponents = row_opponents & (ROW_1 | ROW_2 | ROW_7 | ROW_8);
|
|
|
let danger_value = (dang_row_opponents.count_ones() * 50) as PosValue;
|
|
|
|
|
|
- return kneighbors + danger_value;
|
|
|
+ return kneighbors + danger_value + backrow;
|
|
|
}
|
|
|
|
|
|
fn king_there(game: &Game, side: Side) -> PosValue {
|
|
@@ -226,11 +226,25 @@ pub fn game_lateness(game: &Game) -> i32 {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+fn rook_moves(game: &Game, side: Side) -> PosValue {
|
|
|
+ let rooks = game.rooks(side);
|
|
|
+ let rook_moves = count_sliding_move_bitboard(
|
|
|
+ game,
|
|
|
+ game.get_all_side(side),
|
|
|
+ game.get_all_side(!side),
|
|
|
+ rooks,
|
|
|
+ true, false,
|
|
|
+ false);
|
|
|
+
|
|
|
+ return rook_moves as _;
|
|
|
+}
|
|
|
+
|
|
|
pub fn late_game_eval(game: &Game) -> PosValue {
|
|
|
let pp = pawn_push_value(game, game.turn) - pawn_push_value(game, !game.turn);
|
|
|
let bp = blocked_pawns(game, game.turn) - blocked_pawns(game, !game.turn);
|
|
|
+ let rook_moves = rook_moves(game, game.turn) - rook_moves(game, !game.turn);
|
|
|
|
|
|
- pp + bp
|
|
|
+ pp + bp + rook_moves * 3
|
|
|
}
|
|
|
|
|
|
pub fn pawn_push_value(game: &Game, side: Side) -> PosValue {
|