seconde carte

This commit is contained in:
Didictateur 2025-11-22 16:45:42 +01:00
parent 4b3e1ed5c0
commit 624cc4007d

View file

@ -49,7 +49,7 @@ function sendRoomUpdate(room){
// Build a default deck from README list. Each card has a unique id, cardId (slug), title and description. // Build a default deck from README list. Each card has a unique id, cardId (slug), title and description.
function buildDefaultDeck(){ function buildDefaultDeck(){
const cards = [ const cards = [
// ['rétrécir le plateau','Tronque au maximum le plateau sans supprimer de pièce'], ['tronquer le plateau','Tronque au maximum le plateau sans supprimer de pièce'],
['agrandir le plateau','Rajoute une rangée dans toutes les directions'], ['agrandir le plateau','Rajoute une rangée dans toutes les directions'],
// ['rebondir sur les bords','Les déplacements en diagonales de la pièce séléctionées peuvent rebondir une fois sur les bords'], // ['rebondir sur les bords','Les déplacements en diagonales de la pièce séléctionées peuvent rebondir une fois sur les bords'],
// ['adoubement','La pièce sélectionnée peut maintenant faire les déplacements du cavalier en plus'], // ['adoubement','La pièce sélectionnée peut maintenant faire les déplacements du cavalier en plus'],
@ -636,6 +636,69 @@ io.on('connection', (socket) => {
// record effect details on payload for clients // record effect details on payload for clients
played.payload = Object.assign({}, payload, { applied: 'agrandir_plateau', oldWidth: oldW, oldHeight: oldH, newWidth: newW, newHeight: newH }); played.payload = Object.assign({}, payload, { applied: 'agrandir_plateau', oldWidth: oldW, oldHeight: oldH, newWidth: newW, newHeight: newH });
} }
} else if(cardId === 'tronquer_plateau' || cardId === 'tronquer_le_plateau' || (typeof cardId === 'string' && cardId.indexOf('tronquer') !== -1)){
// Shrink the board by trimming empty outer files/ranks as much as possible without removing any piece.
const board = room.boardState;
if(board && board.width && board.height){
const oldW = board.width;
const oldH = board.height;
let width = oldW;
let height = oldH;
// helper: parse square -> coords (0-indexed)
function squareToCoord(sq){
if(!sq || typeof sq !== 'string') return null;
const file = sq.charCodeAt(0) - 'a'.charCodeAt(0);
const rank = parseInt(sq.slice(1),10) - 1;
return { x: file, y: rank };
}
function coordToSquare(x,y){
return String.fromCharCode('a'.charCodeAt(0) + x) + (y+1);
}
function colHasPiece(x){
return (board.pieces || []).some(p => { const c = squareToCoord(p.square); return c && c.x === x; });
}
function rowHasPiece(y){
return (board.pieces || []).some(p => { const c = squareToCoord(p.square); return c && c.y === y; });
}
// trim left columns that are empty
while(width > 1 && !colHasPiece(0)){
// shift all pieces left by 1
(board.pieces || []).forEach(p => {
const c = squareToCoord(p.square);
if(!c) return;
p.square = coordToSquare(c.x - 1, c.y);
});
width -= 1;
}
// trim right columns that are empty
while(width > 1 && !colHasPiece(width - 1)){
// no shift needed for trimming right
width -= 1;
}
// trim bottom ranks that are empty
while(height > 1 && !rowHasPiece(0)){
// shift all pieces down by 1 (y-1)
(board.pieces || []).forEach(p => {
const c = squareToCoord(p.square);
if(!c) return;
p.square = coordToSquare(c.x, c.y - 1);
});
height -= 1;
}
// trim top ranks that are empty
while(height > 1 && !rowHasPiece(height - 1)){
height -= 1;
}
board.width = width;
board.height = height;
board.version = (board.version || 0) + 1;
played.payload = Object.assign({}, payload, { applied: 'tronquer_plateau', oldWidth: oldW, oldHeight: oldH, newWidth: width, newHeight: height });
}
} }
}catch(e){ }catch(e){
console.error('card:play effect error', e); console.error('card:play effect error', e);