diff options
| author | Aargh Rai <aargh.rai+git@gmail.com> | 2026-05-31 23:57:37 +0530 |
|---|---|---|
| committer | Aargh Rai <aargh.rai+git@gmail.com> | 2026-05-31 23:57:37 +0530 |
| commit | 97c2eacc290ef4ba298b6659ab8bba925203f125 (patch) | |
| tree | dd91ed1d3bf864ae22a03a19cfe296b0814ad8c2 /assets/board.js | |
| parent | 1043870b3efb37179c71e0b21c7faf9179e641c1 (diff) | |
only valid moves here + piece captures
Diffstat (limited to 'assets/board.js')
| -rw-r--r-- | assets/board.js | 105 |
1 files changed, 84 insertions, 21 deletions
diff --git a/assets/board.js b/assets/board.js index db3c282..8c4fdfc 100644 --- a/assets/board.js +++ b/assets/board.js @@ -18,18 +18,18 @@ const bitboards = [ 4755801206503243776n, 71776119061217280n, ]; -const WHITE_KING = 1; -const WHITE_QUEEN = 2; -const WHITE_ROOK = 3; -const WHITE_BISHOP = 4; -const WHITE_KNIGHT = 5; -const WHITE_PAWN = 6; -const BLACK_KING = 7; -const BLACK_QUEEN = 8; -const BLACK_ROOK = 9; -const BLACK_BISHOP = 10; -const BLACK_KNIGHT = 11; -const BLACK_PAWN = 12; +const WHITE_KING = 0; +const WHITE_QUEEN = 1; +const WHITE_ROOK = 2; +const WHITE_BISHOP = 3; +const WHITE_KNIGHT = 4; +const WHITE_PAWN = 5; +const BLACK_KING = 6; +const BLACK_QUEEN = 7; +const BLACK_ROOK = 8; +const BLACK_BISHOP = 9; +const BLACK_KNIGHT = 10; +const BLACK_PAWN = 11; let counting_bitboard = 0n; function trackBitboard(i, selected, output) { @@ -73,6 +73,7 @@ position.bitboards[BLACK_PAWN] = ${bitboards[11].toString()}ULL; let validMoves = {}; let renderingMoves = []; +let pickedUpFrom = -1; function updateRenderingMoves() { for (let i = 0; i < 64; i++) { @@ -89,15 +90,63 @@ function handleTransmission(data) { let from = parseInt(moveData.slice(0, 2)); let to = parseInt(moveData.slice(2)); - console.log(from, to); - if (validMoves[from] == undefined) validMoves[from] = [] validMoves[from].push(to); } } +function calculateFen() { + let fen = "" + let empty = 0; + for (let i = 7; i >= 0; i--) { + for (let j = 0; j < 8; j++) { + const sqr = document.getElementById(`square-${8 * i + j}`).style.backgroundImage; + if (sqr.length == 0 || sqr.includes("none")) { + empty++; + continue; + } + if (empty != 0) { + fen += empty.toString(); + } + empty = 0; + let p = sqr[22]; + if (sqr[21] == "w") p = sqr[22].toUpperCase(); + fen += p; + } + if (empty != 0) { + fen += empty.toString(); + } + if (i == 0) continue; + empty = 0; + fen += "/"; + } + return fen; +} + +let turn = "w"; +let castling = "KQkq"; +let passant_square = "-"; +let halfmove = 0; +let fullmove = 1; +let socket; +let old_fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; +function checkMoveMade(pieceMoved) { + let new_fen = calculateFen(); + if (new_fen == old_fen.split(" ")[0]) return; + old_fen = new_fen; + halfmove++; + console.log(pieceMoved) + if (pieceMoved == WHITE_PAWN || pieceMoved == BLACK_PAWN) halfmove = 0; + if (turn == "b") fullmove++; + turn = turn == "w" ? "b" : "w"; + old_fen = `${new_fen} ${turn} ${castling} ${passant_square} ${halfmove} ${fullmove}`; + validMoves = {}; + console.log(old_fen); + socket.send(old_fen); +} + window.onload = () => { - const socket = new WebSocket("ws://localhost:3456"); + socket = new WebSocket("ws://localhost:3456"); let data = []; socket.onmessage = e => { console.log(e); @@ -107,7 +156,10 @@ window.onload = () => { } data.push(e.data); } - socket.onopen = () => socket.send("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"); + socket.onopen = () => { + console.log(old_fen); + socket.send(old_fen); + } socket.onerror = e => { console.log("error", e); }; @@ -147,21 +199,30 @@ window.onload = () => { } const piece = checkForPiece(square, bitIndex, false); - if ( - (hoveringPiece < 0 && piece == null) || - (hoveringPiece >= 0 && piece != null) - ) return; - if (hoveringPiece < 0) { + const sqr_id = parseInt(square.id.slice(7)); + if (hoveringPiece == -1) { + if (piece == null) return; if (validMoves[bitIndex]) renderingMoves = validMoves[bitIndex]; setHoverpiece(piece); + pickedUpFrom = sqr_id; square.style.backgroundImage = `none`; bitboards[piece] &= ~(1n << BigInt(bitIndex)); } else { + if (sqr_id != pickedUpFrom && !renderingMoves.includes(sqr_id)) return; renderingMoves = []; square.style.backgroundImage = `url(${assets[hoveringPiece]})`; + if (piece) bitboards[piece] &= ~(1n << BigInt(bitIndex)); bitboards[hoveringPiece] |= (1n << BigInt(bitIndex)); setHoverpiece(-1); } + console.log(piece, hoveringPiece, square, renderingMoves); + // if ( + // (hoveringPiece < 0 && piece == null) || + // (hoveringPiece >= 0 && piece != null) + // ) return; + // if (hoveringPiece < 0) { + // } else { + // } updateRenderingMoves(); }; board.appendChild(square); @@ -178,9 +239,11 @@ window.onload = () => { const mouse = document.getElementById("mouse"); function setHoverpiece(i) { + let oldHoveringPiece = hoveringPiece; hoveringPiece = i; if (i < 0) { mouse.style.backgroundImage = `none`; + checkMoveMade(oldHoveringPiece); return; } mouse.style.backgroundImage = `url(${assets[i]})`; |
