001 package ai; 002 import core.Color; 003 import core.Piece; 004 import rules.Board; 005 import rules.GameState; 006 import rules.Pawn; 007 008 /** 009 * The ScaledPieceHeuristic minimizes the fraction of pieces controlled. 010 */ 011 public class ScaledPieceHeuristic implements Heuristic { 012 013 /** 014 * @see Heuristic 015 */ 016 public int heuristic(GameState currentState) { 017 int total = 0; 018 int diff = 0; 019 Board board = ((GameState) currentState).getBoard(); 020 for(int x = 0; x < 8; x++){ 021 for(int y = 0; y < 8; y++){ 022 Piece p = board.get(x, y); 023 int weight = 1; 024 if (p instanceof Pawn) 025 weight = 1; 026 if (p.getColor() == Color.WHITE){ 027 diff -= weight; 028 total += weight; 029 } else if (p.getColor() == Color.BLACK) { 030 diff += weight; 031 total += weight; 032 } 033 } 034 } 035 int ans = (diff * 100000 / total); 036 if (currentState.getCurrentColor() == Color.BLACK) 037 return -ans; 038 else 039 return ans; 040 } 041 }