public static int rateMaterial(bool isWhite, ChessBoard c) { int counter = 0; int numBishops = 0; BitboardLayer[] dict = c.getDict(isWhite); for (int j = 0; j <= pieceIndex.KING; j++) { foreach (int i in dict[j].getTrueIndicies()) { if (j != pieceIndex.BISHOP) counter += pieceVals[j]; else numBishops++; } } if (numBishops >= 2) counter += 300 * numBishops; else counter += 250 * numBishops; return (int)(counter * 1.75); }
public static int rateAttack(bool isWhite, ChessBoard c) { BitboardLayer[] dict = c.getDict(isWhite); BitboardLayer attackedSqs = c.getAllAttackedSq(isWhite); int counter = 0; for (int j = 0; j <= pieceIndex.KING; j++) //don't include king { foreach (int i in dict[j].getTrueIndicies()) { if (attackedSqs.trueAtIndex(i)) { switch (j) { case pieceIndex.PAWN: counter -= 64; break; case pieceIndex.ROOK: counter -= 500; break; case pieceIndex.KNIGHT: counter -= 300; break; case pieceIndex.BISHOP: counter -= 300; break; case pieceIndex.QUEEN: counter -= 900; break; case pieceIndex.KING: counter -= 200; break; } } } } return (int)(counter * .5); }
public static int ratePositional(bool isWhite, ChessBoard c, int material) { int counter = 0; BitboardLayer[] dict = c.getDict(isWhite); for (int j = 0; j <= pieceIndex.KING; j++) { foreach (int i in dict[j].getTrueIndicies()) { counter += positionValues[j][i]; if (j == pieceIndex.KING) { if (material >= 1750) counter += positionValues[j][i]; else counter += positionValues[j + 1][i]; } } } return counter; }