/**** * Classes ****/ var ChessPiece = Container.expand(function (type, color) { var self = Container.call(this); self.type = type; self.color = color; self.hasMoved = false; var assetName = color + type.charAt(0).toUpperCase() + type.slice(1); var pieceGraphic = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); self.getValidMoves = function (board, fromRow, fromCol) { var moves = []; switch (self.type) { case 'pawn': moves = getPawnMoves(board, fromRow, fromCol, self.color); break; case 'rook': moves = getRookMoves(board, fromRow, fromCol, self.color); break; case 'knight': moves = getKnightMoves(board, fromRow, fromCol, self.color); break; case 'bishop': moves = getBishopMoves(board, fromRow, fromCol, self.color); break; case 'queen': moves = getQueenMoves(board, fromRow, fromCol, self.color); break; case 'king': moves = getKingMoves(board, fromRow, fromCol, self.color); break; } return moves; }; return self; }); var ChessSquare = Container.expand(function (row, col) { var self = Container.call(this); self.row = row; self.col = col; self.piece = null; self.isLight = (row + col) % 2 === 0; self.isHighlighted = false; self.isSelected = false; var squareGraphic = self.attachAsset(self.isLight ? 'lightSquare' : 'darkSquare', { anchorX: 0.5, anchorY: 0.5 }); var highlightGraphic = self.attachAsset('highlightSquare', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); var selectedGraphic = self.attachAsset('selectedSquare', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); self.setHighlight = function (highlight) { self.isHighlighted = highlight; highlightGraphic.alpha = highlight ? 0.5 : 0; }; self.setSelected = function (selected) { self.isSelected = selected; selectedGraphic.alpha = selected ? 0.5 : 0; }; self.setPiece = function (piece) { if (self.piece) { self.removeChild(self.piece); } self.piece = piece; if (piece) { self.addChild(piece); } }; self.down = function (x, y, obj) { handleSquareClick(self); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x8B4513 }); /**** * Game Code ****/ var boardSize = 1800; var squareSize = 225; var boardStartX = (2048 - boardSize) / 2; var boardStartY = (2732 - boardSize) / 2; var board = []; var selectedSquare = null; var currentPlayer = 'white'; var gameOver = false; var turnText = new Text2('White to move', { size: 80, fill: 0xFFFFFF }); turnText.anchor.set(0.5, 0); LK.gui.top.addChild(turnText); function initializeBoard() { for (var row = 0; row < 8; row++) { board[row] = []; for (var col = 0; col < 8; col++) { var square = new ChessSquare(row, col); square.x = boardStartX + col * squareSize + squareSize / 2; square.y = boardStartY + row * squareSize + squareSize / 2; board[row][col] = square; game.addChild(square); } } } function setupPieces() { var pieceOrder = ['rook', 'knight', 'bishop', 'queen', 'king', 'bishop', 'knight', 'rook']; for (var col = 0; col < 8; col++) { board[0][col].setPiece(new ChessPiece(pieceOrder[col], 'black')); board[1][col].setPiece(new ChessPiece('pawn', 'black')); board[6][col].setPiece(new ChessPiece('pawn', 'white')); board[7][col].setPiece(new ChessPiece(pieceOrder[col], 'white')); } } function handleSquareClick(square) { if (gameOver) return; if (selectedSquare) { if (selectedSquare === square) { clearSelection(); } else if (square.isHighlighted) { movePiece(selectedSquare, square); clearSelection(); switchPlayer(); } else { clearSelection(); if (square.piece && square.piece.color === currentPlayer) { selectSquare(square); } } } else { if (square.piece && square.piece.color === currentPlayer) { selectSquare(square); } } } function selectSquare(square) { selectedSquare = square; square.setSelected(true); var validMoves = square.piece.getValidMoves(board, square.row, square.col); for (var i = 0; i < validMoves.length; i++) { var move = validMoves[i]; board[move.row][move.col].setHighlight(true); } } function clearSelection() { if (selectedSquare) { selectedSquare.setSelected(false); selectedSquare = null; } for (var row = 0; row < 8; row++) { for (var col = 0; col < 8; col++) { board[row][col].setHighlight(false); } } } function movePiece(fromSquare, toSquare) { var piece = fromSquare.piece; if (toSquare.piece) { LK.setScore(LK.getScore() + getPieceValue(toSquare.piece.type)); } toSquare.setPiece(piece); fromSquare.setPiece(null); piece.hasMoved = true; if (isCheckmate(currentPlayer === 'white' ? 'black' : 'white')) { gameOver = true; turnText.setText(currentPlayer.charAt(0).toUpperCase() + currentPlayer.slice(1) + ' wins!'); LK.showYouWin(); } } function switchPlayer() { currentPlayer = currentPlayer === 'white' ? 'black' : 'white'; turnText.setText(currentPlayer.charAt(0).toUpperCase() + currentPlayer.slice(1) + ' to move'); } function getPieceValue(type) { switch (type) { case 'pawn': return 1; case 'knight': return 3; case 'bishop': return 3; case 'rook': return 5; case 'queen': return 9; case 'king': return 0; default: return 0; } } function isValidSquare(row, col) { return row >= 0 && row < 8 && col >= 0 && col < 8; } function getPawnMoves(board, row, col, color) { var moves = []; var direction = color === 'white' ? -1 : 1; var startRow = color === 'white' ? 6 : 1; var newRow = row + direction; if (isValidSquare(newRow, col) && !board[newRow][col].piece) { moves.push({ row: newRow, col: col }); if (row === startRow) { newRow = row + 2 * direction; if (isValidSquare(newRow, col) && !board[newRow][col].piece) { moves.push({ row: newRow, col: col }); } } } for (var i = -1; i <= 1; i += 2) { var newCol = col + i; newRow = row + direction; if (isValidSquare(newRow, newCol) && board[newRow][newCol].piece && board[newRow][newCol].piece.color !== color) { moves.push({ row: newRow, col: newCol }); } } return moves; } function getRookMoves(board, row, col, color) { var moves = []; var directions = [[0, 1], [0, -1], [1, 0], [-1, 0]]; for (var d = 0; d < directions.length; d++) { var dir = directions[d]; for (var i = 1; i < 8; i++) { var newRow = row + dir[0] * i; var newCol = col + dir[1] * i; if (!isValidSquare(newRow, newCol)) break; if (board[newRow][newCol].piece) { if (board[newRow][newCol].piece.color !== color) { moves.push({ row: newRow, col: newCol }); } break; } moves.push({ row: newRow, col: newCol }); } } return moves; } function getKnightMoves(board, row, col, color) { var moves = []; var knightMoves = [[2, 1], [2, -1], [-2, 1], [-2, -1], [1, 2], [1, -2], [-1, 2], [-1, -2]]; for (var i = 0; i < knightMoves.length; i++) { var move = knightMoves[i]; var newRow = row + move[0]; var newCol = col + move[1]; if (isValidSquare(newRow, newCol)) { if (!board[newRow][newCol].piece || board[newRow][newCol].piece.color !== color) { moves.push({ row: newRow, col: newCol }); } } } return moves; } function getBishopMoves(board, row, col, color) { var moves = []; var directions = [[1, 1], [1, -1], [-1, 1], [-1, -1]]; for (var d = 0; d < directions.length; d++) { var dir = directions[d]; for (var i = 1; i < 8; i++) { var newRow = row + dir[0] * i; var newCol = col + dir[1] * i; if (!isValidSquare(newRow, newCol)) break; if (board[newRow][newCol].piece) { if (board[newRow][newCol].piece.color !== color) { moves.push({ row: newRow, col: newCol }); } break; } moves.push({ row: newRow, col: newCol }); } } return moves; } function getQueenMoves(board, row, col, color) { var rookMoves = getRookMoves(board, row, col, color); var bishopMoves = getBishopMoves(board, row, col, color); return rookMoves.concat(bishopMoves); } function getKingMoves(board, row, col, color) { var moves = []; var directions = [[0, 1], [0, -1], [1, 0], [-1, 0], [1, 1], [1, -1], [-1, 1], [-1, -1]]; for (var i = 0; i < directions.length; i++) { var dir = directions[i]; var newRow = row + dir[0]; var newCol = col + dir[1]; if (isValidSquare(newRow, newCol)) { if (!board[newRow][newCol].piece || board[newRow][newCol].piece.color !== color) { moves.push({ row: newRow, col: newCol }); } } } return moves; } function findKing(color) { for (var row = 0; row < 8; row++) { for (var col = 0; col < 8; col++) { var piece = board[row][col].piece; if (piece && piece.type === 'king' && piece.color === color) { return { row: row, col: col }; } } } return null; } function isInCheck(color) { var king = findKing(color); if (!king) return false; var enemyColor = color === 'white' ? 'black' : 'white'; for (var row = 0; row < 8; row++) { for (var col = 0; col < 8; col++) { var piece = board[row][col].piece; if (piece && piece.color === enemyColor) { var moves = piece.getValidMoves(board, row, col); for (var i = 0; i < moves.length; i++) { if (moves[i].row === king.row && moves[i].col === king.col) { return true; } } } } } return false; } function isCheckmate(color) { if (!isInCheck(color)) return false; for (var row = 0; row < 8; row++) { for (var col = 0; col < 8; col++) { var piece = board[row][col].piece; if (piece && piece.color === color) { var moves = piece.getValidMoves(board, row, col); if (moves.length > 0) { return false; } } } } return true; } initializeBoard(); setupPieces();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,384 @@
-/****
+/****
+* Classes
+****/
+var ChessPiece = Container.expand(function (type, color) {
+ var self = Container.call(this);
+ self.type = type;
+ self.color = color;
+ self.hasMoved = false;
+ var assetName = color + type.charAt(0).toUpperCase() + type.slice(1);
+ var pieceGraphic = self.attachAsset(assetName, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.getValidMoves = function (board, fromRow, fromCol) {
+ var moves = [];
+ switch (self.type) {
+ case 'pawn':
+ moves = getPawnMoves(board, fromRow, fromCol, self.color);
+ break;
+ case 'rook':
+ moves = getRookMoves(board, fromRow, fromCol, self.color);
+ break;
+ case 'knight':
+ moves = getKnightMoves(board, fromRow, fromCol, self.color);
+ break;
+ case 'bishop':
+ moves = getBishopMoves(board, fromRow, fromCol, self.color);
+ break;
+ case 'queen':
+ moves = getQueenMoves(board, fromRow, fromCol, self.color);
+ break;
+ case 'king':
+ moves = getKingMoves(board, fromRow, fromCol, self.color);
+ break;
+ }
+ return moves;
+ };
+ return self;
+});
+var ChessSquare = Container.expand(function (row, col) {
+ var self = Container.call(this);
+ self.row = row;
+ self.col = col;
+ self.piece = null;
+ self.isLight = (row + col) % 2 === 0;
+ self.isHighlighted = false;
+ self.isSelected = false;
+ var squareGraphic = self.attachAsset(self.isLight ? 'lightSquare' : 'darkSquare', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var highlightGraphic = self.attachAsset('highlightSquare', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0
+ });
+ var selectedGraphic = self.attachAsset('selectedSquare', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0
+ });
+ self.setHighlight = function (highlight) {
+ self.isHighlighted = highlight;
+ highlightGraphic.alpha = highlight ? 0.5 : 0;
+ };
+ self.setSelected = function (selected) {
+ self.isSelected = selected;
+ selectedGraphic.alpha = selected ? 0.5 : 0;
+ };
+ self.setPiece = function (piece) {
+ if (self.piece) {
+ self.removeChild(self.piece);
+ }
+ self.piece = piece;
+ if (piece) {
+ self.addChild(piece);
+ }
+ };
+ self.down = function (x, y, obj) {
+ handleSquareClick(self);
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x8B4513
+});
+
+/****
+* Game Code
+****/
+var boardSize = 1800;
+var squareSize = 225;
+var boardStartX = (2048 - boardSize) / 2;
+var boardStartY = (2732 - boardSize) / 2;
+var board = [];
+var selectedSquare = null;
+var currentPlayer = 'white';
+var gameOver = false;
+var turnText = new Text2('White to move', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+turnText.anchor.set(0.5, 0);
+LK.gui.top.addChild(turnText);
+function initializeBoard() {
+ for (var row = 0; row < 8; row++) {
+ board[row] = [];
+ for (var col = 0; col < 8; col++) {
+ var square = new ChessSquare(row, col);
+ square.x = boardStartX + col * squareSize + squareSize / 2;
+ square.y = boardStartY + row * squareSize + squareSize / 2;
+ board[row][col] = square;
+ game.addChild(square);
+ }
+ }
+}
+function setupPieces() {
+ var pieceOrder = ['rook', 'knight', 'bishop', 'queen', 'king', 'bishop', 'knight', 'rook'];
+ for (var col = 0; col < 8; col++) {
+ board[0][col].setPiece(new ChessPiece(pieceOrder[col], 'black'));
+ board[1][col].setPiece(new ChessPiece('pawn', 'black'));
+ board[6][col].setPiece(new ChessPiece('pawn', 'white'));
+ board[7][col].setPiece(new ChessPiece(pieceOrder[col], 'white'));
+ }
+}
+function handleSquareClick(square) {
+ if (gameOver) return;
+ if (selectedSquare) {
+ if (selectedSquare === square) {
+ clearSelection();
+ } else if (square.isHighlighted) {
+ movePiece(selectedSquare, square);
+ clearSelection();
+ switchPlayer();
+ } else {
+ clearSelection();
+ if (square.piece && square.piece.color === currentPlayer) {
+ selectSquare(square);
+ }
+ }
+ } else {
+ if (square.piece && square.piece.color === currentPlayer) {
+ selectSquare(square);
+ }
+ }
+}
+function selectSquare(square) {
+ selectedSquare = square;
+ square.setSelected(true);
+ var validMoves = square.piece.getValidMoves(board, square.row, square.col);
+ for (var i = 0; i < validMoves.length; i++) {
+ var move = validMoves[i];
+ board[move.row][move.col].setHighlight(true);
+ }
+}
+function clearSelection() {
+ if (selectedSquare) {
+ selectedSquare.setSelected(false);
+ selectedSquare = null;
+ }
+ for (var row = 0; row < 8; row++) {
+ for (var col = 0; col < 8; col++) {
+ board[row][col].setHighlight(false);
+ }
+ }
+}
+function movePiece(fromSquare, toSquare) {
+ var piece = fromSquare.piece;
+ if (toSquare.piece) {
+ LK.setScore(LK.getScore() + getPieceValue(toSquare.piece.type));
+ }
+ toSquare.setPiece(piece);
+ fromSquare.setPiece(null);
+ piece.hasMoved = true;
+ if (isCheckmate(currentPlayer === 'white' ? 'black' : 'white')) {
+ gameOver = true;
+ turnText.setText(currentPlayer.charAt(0).toUpperCase() + currentPlayer.slice(1) + ' wins!');
+ LK.showYouWin();
+ }
+}
+function switchPlayer() {
+ currentPlayer = currentPlayer === 'white' ? 'black' : 'white';
+ turnText.setText(currentPlayer.charAt(0).toUpperCase() + currentPlayer.slice(1) + ' to move');
+}
+function getPieceValue(type) {
+ switch (type) {
+ case 'pawn':
+ return 1;
+ case 'knight':
+ return 3;
+ case 'bishop':
+ return 3;
+ case 'rook':
+ return 5;
+ case 'queen':
+ return 9;
+ case 'king':
+ return 0;
+ default:
+ return 0;
+ }
+}
+function isValidSquare(row, col) {
+ return row >= 0 && row < 8 && col >= 0 && col < 8;
+}
+function getPawnMoves(board, row, col, color) {
+ var moves = [];
+ var direction = color === 'white' ? -1 : 1;
+ var startRow = color === 'white' ? 6 : 1;
+ var newRow = row + direction;
+ if (isValidSquare(newRow, col) && !board[newRow][col].piece) {
+ moves.push({
+ row: newRow,
+ col: col
+ });
+ if (row === startRow) {
+ newRow = row + 2 * direction;
+ if (isValidSquare(newRow, col) && !board[newRow][col].piece) {
+ moves.push({
+ row: newRow,
+ col: col
+ });
+ }
+ }
+ }
+ for (var i = -1; i <= 1; i += 2) {
+ var newCol = col + i;
+ newRow = row + direction;
+ if (isValidSquare(newRow, newCol) && board[newRow][newCol].piece && board[newRow][newCol].piece.color !== color) {
+ moves.push({
+ row: newRow,
+ col: newCol
+ });
+ }
+ }
+ return moves;
+}
+function getRookMoves(board, row, col, color) {
+ var moves = [];
+ var directions = [[0, 1], [0, -1], [1, 0], [-1, 0]];
+ for (var d = 0; d < directions.length; d++) {
+ var dir = directions[d];
+ for (var i = 1; i < 8; i++) {
+ var newRow = row + dir[0] * i;
+ var newCol = col + dir[1] * i;
+ if (!isValidSquare(newRow, newCol)) break;
+ if (board[newRow][newCol].piece) {
+ if (board[newRow][newCol].piece.color !== color) {
+ moves.push({
+ row: newRow,
+ col: newCol
+ });
+ }
+ break;
+ }
+ moves.push({
+ row: newRow,
+ col: newCol
+ });
+ }
+ }
+ return moves;
+}
+function getKnightMoves(board, row, col, color) {
+ var moves = [];
+ var knightMoves = [[2, 1], [2, -1], [-2, 1], [-2, -1], [1, 2], [1, -2], [-1, 2], [-1, -2]];
+ for (var i = 0; i < knightMoves.length; i++) {
+ var move = knightMoves[i];
+ var newRow = row + move[0];
+ var newCol = col + move[1];
+ if (isValidSquare(newRow, newCol)) {
+ if (!board[newRow][newCol].piece || board[newRow][newCol].piece.color !== color) {
+ moves.push({
+ row: newRow,
+ col: newCol
+ });
+ }
+ }
+ }
+ return moves;
+}
+function getBishopMoves(board, row, col, color) {
+ var moves = [];
+ var directions = [[1, 1], [1, -1], [-1, 1], [-1, -1]];
+ for (var d = 0; d < directions.length; d++) {
+ var dir = directions[d];
+ for (var i = 1; i < 8; i++) {
+ var newRow = row + dir[0] * i;
+ var newCol = col + dir[1] * i;
+ if (!isValidSquare(newRow, newCol)) break;
+ if (board[newRow][newCol].piece) {
+ if (board[newRow][newCol].piece.color !== color) {
+ moves.push({
+ row: newRow,
+ col: newCol
+ });
+ }
+ break;
+ }
+ moves.push({
+ row: newRow,
+ col: newCol
+ });
+ }
+ }
+ return moves;
+}
+function getQueenMoves(board, row, col, color) {
+ var rookMoves = getRookMoves(board, row, col, color);
+ var bishopMoves = getBishopMoves(board, row, col, color);
+ return rookMoves.concat(bishopMoves);
+}
+function getKingMoves(board, row, col, color) {
+ var moves = [];
+ var directions = [[0, 1], [0, -1], [1, 0], [-1, 0], [1, 1], [1, -1], [-1, 1], [-1, -1]];
+ for (var i = 0; i < directions.length; i++) {
+ var dir = directions[i];
+ var newRow = row + dir[0];
+ var newCol = col + dir[1];
+ if (isValidSquare(newRow, newCol)) {
+ if (!board[newRow][newCol].piece || board[newRow][newCol].piece.color !== color) {
+ moves.push({
+ row: newRow,
+ col: newCol
+ });
+ }
+ }
+ }
+ return moves;
+}
+function findKing(color) {
+ for (var row = 0; row < 8; row++) {
+ for (var col = 0; col < 8; col++) {
+ var piece = board[row][col].piece;
+ if (piece && piece.type === 'king' && piece.color === color) {
+ return {
+ row: row,
+ col: col
+ };
+ }
+ }
+ }
+ return null;
+}
+function isInCheck(color) {
+ var king = findKing(color);
+ if (!king) return false;
+ var enemyColor = color === 'white' ? 'black' : 'white';
+ for (var row = 0; row < 8; row++) {
+ for (var col = 0; col < 8; col++) {
+ var piece = board[row][col].piece;
+ if (piece && piece.color === enemyColor) {
+ var moves = piece.getValidMoves(board, row, col);
+ for (var i = 0; i < moves.length; i++) {
+ if (moves[i].row === king.row && moves[i].col === king.col) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+}
+function isCheckmate(color) {
+ if (!isInCheck(color)) return false;
+ for (var row = 0; row < 8; row++) {
+ for (var col = 0; col < 8; col++) {
+ var piece = board[row][col].piece;
+ if (piece && piece.color === color) {
+ var moves = piece.getValidMoves(board, row, col);
+ if (moves.length > 0) {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+}
+initializeBoard();
+setupPieces();
\ No newline at end of file