1
0
forked from sent/waves
waves-fork/public/assets/g/chess/other-implementations/example3/js/evaluate.js
2025-04-09 17:11:14 -05:00

186 lines
3.3 KiB
JavaScript

var PawnTable = [
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
10 , 10 , 0 , -10 , -10 , 0 , 10 , 10 ,
5 , 0 , 0 , 5 , 5 , 0 , 0 , 5 ,
0 , 0 , 10 , 20 , 20 , 10 , 0 , 0 ,
5 , 5 , 5 , 10 , 10 , 5 , 5 , 5 ,
10 , 10 , 10 , 20 , 20 , 10 , 10 , 10 ,
20 , 20 , 20 , 30 , 30 , 20 , 20 , 20 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
];
var KnightTable = [
0 , -10 , 0 , 0 , 0 , 0 , -10 , 0 ,
0 , 0 , 0 , 5 , 5 , 0 , 0 , 0 ,
0 , 0 , 10 , 10 , 10 , 10 , 0 , 0 ,
0 , 0 , 10 , 20 , 20 , 10 , 5 , 0 ,
5 , 10 , 15 , 20 , 20 , 15 , 10 , 5 ,
5 , 10 , 10 , 20 , 20 , 10 , 10 , 5 ,
0 , 0 , 5 , 10 , 10 , 5 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
];
var BishopTable = [
0 , 0 , -10 , 0 , 0 , -10 , 0 , 0 ,
0 , 0 , 0 , 10 , 10 , 0 , 0 , 0 ,
0 , 0 , 10 , 15 , 15 , 10 , 0 , 0 ,
0 , 10 , 15 , 20 , 20 , 15 , 10 , 0 ,
0 , 10 , 15 , 20 , 20 , 15 , 10 , 0 ,
0 , 0 , 10 , 15 , 15 , 10 , 0 , 0 ,
0 , 0 , 0 , 10 , 10 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
];
var RookTable = [
0 , 0 , 5 , 10 , 10 , 5 , 0 , 0 ,
0 , 0 , 5 , 10 , 10 , 5 , 0 , 0 ,
0 , 0 , 5 , 10 , 10 , 5 , 0 , 0 ,
0 , 0 , 5 , 10 , 10 , 5 , 0 , 0 ,
0 , 0 , 5 , 10 , 10 , 5 , 0 , 0 ,
0 , 0 , 5 , 10 , 10 , 5 , 0 , 0 ,
25 , 25 , 25 , 25 , 25 , 25 , 25 , 25 ,
0 , 0 , 5 , 10 , 10 , 5 , 0 , 0
];
var BishopPair = 40;
function EvalPosition() {
var score = GameBoard.material[COLOURS.WHITE] - GameBoard.material[COLOURS.BLACK];
var pce;
var sq;
var pceNum;
pce = PIECES.wP;
for(pceNum = 0; pceNum < GameBoard.pceNum[pce]; ++pceNum) {
sq = GameBoard.pList[PCEINDEX(pce,pceNum)];
score += PawnTable[SQ64(sq)];
}
pce = PIECES.bP;
for(pceNum = 0; pceNum < GameBoard.pceNum[pce]; ++pceNum) {
sq = GameBoard.pList[PCEINDEX(pce,pceNum)];
score -= PawnTable[MIRROR64(SQ64(sq))];
}
pce = PIECES.wN;
for(pceNum = 0; pceNum < GameBoard.pceNum[pce]; ++pceNum) {
sq = GameBoard.pList[PCEINDEX(pce,pceNum)];
score += KnightTable[SQ64(sq)];
}
pce = PIECES.bN;
for(pceNum = 0; pceNum < GameBoard.pceNum[pce]; ++pceNum) {
sq = GameBoard.pList[PCEINDEX(pce,pceNum)];
score -= KnightTable[MIRROR64(SQ64(sq))];
}
pce = PIECES.wB;
for(pceNum = 0; pceNum < GameBoard.pceNum[pce]; ++pceNum) {
sq = GameBoard.pList[PCEINDEX(pce,pceNum)];
score += BishopTable[SQ64(sq)];
}
pce = PIECES.bB;
for(pceNum = 0; pceNum < GameBoard.pceNum[pce]; ++pceNum) {
sq = GameBoard.pList[PCEINDEX(pce,pceNum)];
score -= BishopTable[MIRROR64(SQ64(sq))];
}
pce = PIECES.wR;
for(pceNum = 0; pceNum < GameBoard.pceNum[pce]; ++pceNum) {
sq = GameBoard.pList[PCEINDEX(pce,pceNum)];
score += RookTable[SQ64(sq)];
}
pce = PIECES.bR;
for(pceNum = 0; pceNum < GameBoard.pceNum[pce]; ++pceNum) {
sq = GameBoard.pList[PCEINDEX(pce,pceNum)];
score -= RookTable[MIRROR64(SQ64(sq))];
}
pce = PIECES.wQ;
for(pceNum = 0; pceNum < GameBoard.pceNum[pce]; ++pceNum) {
sq = GameBoard.pList[PCEINDEX(pce,pceNum)];
score += RookTable[SQ64(sq)];
}
pce = PIECES.bQ;
for(pceNum = 0; pceNum < GameBoard.pceNum[pce]; ++pceNum) {
sq = GameBoard.pList[PCEINDEX(pce,pceNum)];
score -= RookTable[MIRROR64(SQ64(sq))];
}
if(GameBoard.pceNum[PIECES.wB] >= 2) {
score += BishopPair;
}
if(GameBoard.pceNum[PIECES.bB] >= 2) {
score -= BishopPair;
}
if(GameBoard.side == COLOURS.WHITE) {
return score;
} else {
return -score;
}
}