|
|
|
export default class ZobristCache { |
|
constructor(size) { |
|
this.size = size; |
|
this.zobristTable = this.initializeZobristTable(size); |
|
this.hash = BigInt(0); |
|
} |
|
|
|
initializeZobristTable(size) { |
|
let table = []; |
|
for (let i = 0; i < size; i++) { |
|
table[i] = []; |
|
for (let j = 0; j < size; j++) { |
|
table[i][j] = { |
|
"1": BigInt(this.randomBitString(64)), |
|
"-1": BigInt(this.randomBitString(64)) |
|
}; |
|
} |
|
} |
|
return table; |
|
} |
|
|
|
randomBitString(length) { |
|
let str = "0b"; |
|
for (let i = 0; i < length; i++) { |
|
str += Math.round(Math.random()).toString(); |
|
} |
|
return str; |
|
} |
|
|
|
togglePiece(x, y, role) { |
|
this.hash ^= this.zobristTable[x][y][role]; |
|
} |
|
|
|
getHash() { |
|
return this.hash; |
|
} |
|
} |