10
app/page.tsx
10
app/page.tsx
@@ -60,14 +60,6 @@ export default function Home() {
|
||||
const handlePlaceTile = (side: 'left' | 'right') => {
|
||||
if (!selectedTile || !currentPlayerId || !gameState) return;
|
||||
|
||||
console.log('handlePlaceTile called', {
|
||||
selectedTile,
|
||||
side,
|
||||
currentPlayerId,
|
||||
boardEnds: gameState.boardEnds,
|
||||
validMoves
|
||||
});
|
||||
|
||||
// Verificar si el movimiento es válido
|
||||
const isValid = validMoves.some(m =>
|
||||
m.tile.id === selectedTile.id &&
|
||||
@@ -75,12 +67,10 @@ export default function Home() {
|
||||
);
|
||||
|
||||
if (!isValid && gameState.boardEnds.length > 0) {
|
||||
console.error('Invalid move: tile cannot be placed on this side', { selectedTile, side, validMoves });
|
||||
setError(`Cannot place tile ${selectedTile.left}-${selectedTile.right} on the ${side} side. It doesn't match the board end.`);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('Making move:', { playerId: currentPlayerId, tile: selectedTile, side });
|
||||
makeMove({
|
||||
playerId: currentPlayerId,
|
||||
tile: selectedTile,
|
||||
|
||||
@@ -48,12 +48,10 @@ export const useGameStore = create<GameStore>((set, get) => ({
|
||||
});
|
||||
|
||||
socket.on('connect', () => {
|
||||
console.log('Connected to socket server');
|
||||
set({ isConnected: true, socket });
|
||||
});
|
||||
|
||||
socket.on('disconnect', () => {
|
||||
console.log('Disconnected from socket server');
|
||||
set({ isConnected: false });
|
||||
});
|
||||
|
||||
@@ -166,7 +164,6 @@ export const useGameStore = create<GameStore>((set, get) => ({
|
||||
|
||||
// Modo AI (offline)
|
||||
if (roomId?.startsWith('AI-') && gameState) {
|
||||
console.log('AI mode: executing move', move);
|
||||
const newGameState = executeMove(gameState, move);
|
||||
set({ gameState: newGameState, selectedTile: null });
|
||||
|
||||
@@ -182,7 +179,6 @@ export const useGameStore = create<GameStore>((set, get) => ({
|
||||
|
||||
// Modo multijugador (online)
|
||||
if (socket && roomId) {
|
||||
console.log('Online mode: sending move to server', move);
|
||||
socket.emit('make-move', roomId, move);
|
||||
set({ selectedTile: null });
|
||||
}
|
||||
@@ -200,7 +196,6 @@ export const useGameStore = create<GameStore>((set, get) => ({
|
||||
|
||||
// Check if there are tiles in the boneyard
|
||||
if (gameState.boneyard.length === 0) {
|
||||
console.log('No tiles in boneyard');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -223,8 +218,6 @@ export const useGameStore = create<GameStore>((set, get) => ({
|
||||
players: updatedPlayers,
|
||||
}
|
||||
});
|
||||
|
||||
console.log('Drew tile in AI mode:', drawnTile);
|
||||
}
|
||||
// Online mode - send to server
|
||||
else if (socket && roomId) {
|
||||
|
||||
28
server.mjs
28
server.mjs
@@ -141,8 +141,6 @@ app.prepare().then(() => {
|
||||
});
|
||||
|
||||
io.on('connection', (socket) => {
|
||||
console.log('Client connected:', socket.id);
|
||||
|
||||
socket.on('create-room', () => {
|
||||
const roomId = generateRoomId();
|
||||
const gameState = createGameState(roomId);
|
||||
@@ -150,7 +148,6 @@ app.prepare().then(() => {
|
||||
|
||||
socket.join(roomId);
|
||||
socket.emit('room-created', roomId);
|
||||
console.log('Room created:', roomId);
|
||||
});
|
||||
|
||||
socket.on('join-room', (roomId, playerName) => {
|
||||
@@ -186,8 +183,6 @@ app.prepare().then(() => {
|
||||
socket.join(roomId);
|
||||
socket.emit('room-joined', gameState, socket.id);
|
||||
socket.to(roomId).emit('player-joined', player);
|
||||
|
||||
console.log(`Player ${playerName} joined room ${roomId}`);
|
||||
});
|
||||
|
||||
socket.on('player-ready', (roomId) => {
|
||||
@@ -205,18 +200,14 @@ app.prepare().then(() => {
|
||||
if (allReady) {
|
||||
const startedGame = startGame(roomId);
|
||||
io.to(roomId).emit('game-started', startedGame);
|
||||
console.log('Game started in room:', roomId);
|
||||
} else {
|
||||
io.to(roomId).emit('game-state-updated', gameState);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('make-move', (roomId, move) => {
|
||||
console.log('Received make-move:', { roomId, move, socketId: socket.id });
|
||||
|
||||
const gameState = gameRooms.get(roomId);
|
||||
if (!gameState) {
|
||||
console.log('Game state not found for room:', roomId);
|
||||
socket.emit('error', 'Game not found');
|
||||
return;
|
||||
}
|
||||
@@ -224,26 +215,22 @@ app.prepare().then(() => {
|
||||
const currentPlayer = gameState.players[gameState.currentPlayerIndex];
|
||||
|
||||
if (currentPlayer.id !== socket.id) {
|
||||
console.log('Not player turn:', { currentPlayerId: currentPlayer.id, socketId: socket.id });
|
||||
socket.emit('invalid-move', 'Not your turn');
|
||||
return;
|
||||
}
|
||||
|
||||
const player = gameState.players.find(p => p.id === move.playerId);
|
||||
if (!player) {
|
||||
console.log('Player not found:', move.playerId);
|
||||
socket.emit('error', 'Player not found');
|
||||
return;
|
||||
}
|
||||
|
||||
if (move.pass) {
|
||||
console.log('Player passing turn');
|
||||
gameState.currentPlayerIndex = (gameState.currentPlayerIndex + 1) % gameState.players.length;
|
||||
gameState.turnsPassed++;
|
||||
} else {
|
||||
const tileIndex = player.tiles.findIndex(t => t.id === move.tile.id);
|
||||
if (tileIndex === -1) {
|
||||
console.log('Tile not found in player hand:', move.tile.id);
|
||||
socket.emit('invalid-move', 'Tile not found');
|
||||
return;
|
||||
}
|
||||
@@ -256,21 +243,17 @@ app.prepare().then(() => {
|
||||
);
|
||||
|
||||
if (!targetEnd) {
|
||||
console.log('Invalid side:', move.side);
|
||||
socket.emit('invalid-move', 'Invalid side');
|
||||
return;
|
||||
}
|
||||
|
||||
const canPlace = move.tile.left === targetEnd.value || move.tile.right === targetEnd.value;
|
||||
if (!canPlace) {
|
||||
console.log('Tile does not match:', { tile: move.tile, targetEnd: targetEnd.value });
|
||||
socket.emit('invalid-move', 'Tile does not match board end');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('Placing tile:', { tile: move.tile, side: move.side });
|
||||
|
||||
// Remover la ficha de la mano del jugador
|
||||
player.tiles.splice(tileIndex, 1);
|
||||
|
||||
@@ -313,7 +296,6 @@ app.prepare().then(() => {
|
||||
left: move.tile.right,
|
||||
right: move.tile.left,
|
||||
};
|
||||
console.log('Flipping tile from', move.tile, 'to', tileToPlace);
|
||||
}
|
||||
|
||||
if (move.side === 'right') {
|
||||
@@ -368,10 +350,8 @@ app.prepare().then(() => {
|
||||
}
|
||||
}
|
||||
|
||||
console.log('Updating game state and emitting to room:', roomId);
|
||||
gameRooms.set(roomId, gameState);
|
||||
io.to(roomId).emit('game-state-updated', gameState);
|
||||
console.log('Game state updated successfully');
|
||||
});
|
||||
|
||||
socket.on('draw-tile', (roomId) => {
|
||||
@@ -398,8 +378,6 @@ app.prepare().then(() => {
|
||||
});
|
||||
|
||||
socket.on('leave-room', (roomId) => {
|
||||
console.log('Player leaving room:', { socketId: socket.id, roomId });
|
||||
|
||||
const gameState = gameRooms.get(roomId);
|
||||
if (!gameState) return;
|
||||
|
||||
@@ -417,7 +395,6 @@ app.prepare().then(() => {
|
||||
if (gameState.players.length === 0) {
|
||||
// No players left, delete room
|
||||
gameRooms.delete(roomId);
|
||||
console.log('Room deleted - no players remaining:', roomId);
|
||||
} else {
|
||||
// Check if only one human player remains
|
||||
const remainingHumanPlayers = gameState.players.filter(p => !p.isAI);
|
||||
@@ -428,7 +405,6 @@ app.prepare().then(() => {
|
||||
gameState.isGameOver = true;
|
||||
gameState.winner = winner.id;
|
||||
gameState.gameMode = 'finished';
|
||||
console.log(`Player ${winner.name} wins - only player remaining in room ${roomId}`);
|
||||
}
|
||||
|
||||
// Adjust currentPlayerIndex if needed
|
||||
@@ -439,7 +415,6 @@ app.prepare().then(() => {
|
||||
gameRooms.set(roomId, gameState);
|
||||
io.to(roomId).emit('player-left', socket.id);
|
||||
io.to(roomId).emit('game-state-updated', gameState);
|
||||
console.log(`Player ${leavingPlayer.name} left room ${roomId}. ${gameState.players.length} players remaining.`);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -457,7 +432,6 @@ app.prepare().then(() => {
|
||||
|
||||
if (gameState.players.length === 0) {
|
||||
gameRooms.delete(roomId);
|
||||
console.log('Room deleted:', roomId);
|
||||
} else {
|
||||
// Check if only one human player remains after disconnect
|
||||
const remainingHumanPlayers = gameState.players.filter(p => !p.isAI);
|
||||
@@ -468,7 +442,6 @@ app.prepare().then(() => {
|
||||
gameState.isGameOver = true;
|
||||
gameState.winner = winner.id;
|
||||
gameState.gameMode = 'finished';
|
||||
console.log(`Player ${winner.name} wins - only player remaining in room ${roomId}`);
|
||||
}
|
||||
|
||||
// Adjust currentPlayerIndex if needed
|
||||
@@ -482,7 +455,6 @@ app.prepare().then(() => {
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log('Client disconnected:', socket.id);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Referencia en una nueva incidencia
Block a user