Explicació de codi d'escacs

Pas 1: Estructura bàsica del document

<!DOCTYPE html>
<html lang="ca">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Play Chess</title>
</head>

Aquesta secció defineix el tipus de document com HTML5, l'idioma, el joc de caràcters, i ajusta el disseny per a diferents dispositius.

Pas 2: Incloure llibreries CSS i JavaScript

<link rel="stylesheet" href="https://unpkg.com/@chrisoakman/chessboardjs@1.0.0/dist/chessboard-1.0.0.min.css">
<script src="https://unpkg.com/jquery@3.6.0/dist/jquery.min.js"></script>
<script src="https://unpkg.com/@chrisoakman/chessboardjs@1.0.0/dist/chessboard-1.0.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chess.js/0.12.1/chess.min.js"></script>

Aquestes línies inclouen les llibreries necessàries per crear i gestionar un tauler d'escacs (CSS de chessboard.js, jQuery, chessboard.js i chess.js).

Pas 3: Estils CSS per al tauler i missatges

<style>
#board {
width: 400px;
margin: 20px auto;
}
.messages {
text-align: center;
margin-top: 20px;
}
#game-status {
color: green;
}
#error-message {
color: red;
}
#moves {
color: blue;
}
</style>

Aquests estils defineixen l'aparença del tauler d'escacs i dels missatges del joc.

Pas 4: Estructura del cos del document

<body>
<h1>Play Chess</h1>
<div id="board"></div>
<div class="messages">
<div id="game-status"></div>
<div id="error-message"></div>
<div id="moves"></div>
</div>
</body>
</html>

Aquesta part defineix l'estructura del cos del document, incloent el títol de la pàgina, el div pel tauler d'escacs i els divs per mostrar missatges.

Pas 5: Inicialitzar el tauler d'escacs

<script>
document.addEventListener("DOMContentLoaded", function() {
let board, game;
function initChessboard() {
board = Chessboard('board', {
draggable: true,
position: 'start',
pieceTheme: 'img/chesspieces/wikipedia/{piece}.png',
onDrop: handleMove,
});
game = new Chess();
updateMoves();
}
initChessboard();
});
</script>

Aquesta secció inicialitza el tauler d'escacs i configura les peces perquè es puguin arrossegar. També s'inicialitza el joc d'escacs utilitzant la llibreria chess.js.

Pas 6: Gestionar els moviments de les peces

function handleMove(source, target) {
clearMessages();
const move = game.move({
from: source,
to: target,
promotion: 'q'
});
if (move === null) {
displayErrorMessage('Invalid move!');
return 'snapback';
}
board.position(game.fen());
if (game.game_over()) {
displayGameStatus('Game over');
return;
}
if (game.turn() === 'b') {
const blackMoves = game.moves({ verbose: true });
const randomIndex = Math.floor(Math.random() * blackMoves.length);
const randomBlackMove = blackMoves[randomIndex];
game.move(randomBlackMove);
board.position(game.fen());
if (game.game_over()) {
displayGameStatus('Game over');
return;
}
updateMoves();
} else {
updateMoves();
}
}

Aquesta funció gestiona els moviments de les peces, comprovant si són vàlids, actualitzant el tauler i fent que l'ordinador jugui amb les peces negres.

Pas 7: Actualitzar moviments i mostrar missatges

function updateMoves() {
const moves = game.moves({ verbose: true });
const legalMoves = moves
.filter(move => {
game.move(move);
const isLegal = !game.in_check();
game.undo();
return isLegal;
})
.map(move => move.san);
document.getElementById('moves').innerText = 'Legal moves: ' + legalMoves.join(', ');
}
function displayGameStatus(message) {
document.getElementById('game-status').innerText = message;
}
function displayErrorMessage(message) {
document.getElementById('error-message').innerText = message;
}
function clearMessages() {
document.getElementById('game-status').innerText = '';
document.getElementById('error-message').innerText = '';
document.getElementById('moves').innerText = '';
}
function handleError(error) {
displayErrorMessage('Error: ' + error.message);
console.error(error);
}

Aquestes funcions s'utilitzen per actualitzar la llista de moviments legals, mostrar missatges d'estat i d'error, i esborrar missatges anteriors.

Pas 8: Gestionar errors globals

window.onerror = function (message, source, lineno, colno, error) {
handleError(error || new Error(message + ' at ' + source + ':' + lineno + ':' + colno));
};

Aquesta funció captura errors globals que poden ocórrer en el codi i els gestiona utilitzant la funció handleError, mostrant un missatge d'error detallat.

Pas 9: Tancar el document HTML

</script>
</body>
</html>

Aquesta part finalitza el document HTML tancant les etiquetes <script>, <body> i <html>.

Millora el codi

Aquesta pàgina web explica com crear un joc d'escacs senzill utilitzant les llibreries chessboard.js i chess.js. Hem dividit el codi en diversos passos per facilitar la comprensió, incloent la configuració del document, la inclusió de llibreries necessàries, els estils CSS, la inicialització del tauler d'escacs, la gestió de moviments i errors, i la visualització d'informació al jugador. Ara la teva feina és millorar el codi.