Signed-off-by: ale <ale@manalejandro.com>
Este commit está contenido en:
ale
2025-12-11 02:56:49 +01:00
padre dcd0aecd54
commit f5df98c544
Se han modificado 8 ficheros con 148 adiciones y 12 borrados

Ver fichero

@@ -33,6 +33,7 @@ function createGameState(roomId: string): GameState {
isGameOver: false,
turnsPassed: 0,
gameMode: 'waiting',
rematchRequests: [],
};
}

Ver fichero

@@ -26,6 +26,7 @@ interface GameStore {
selectTile: (tile: DominoTile | null) => void;
leaveRoom: () => void;
setError: (error: string | null) => void;
requestRematch: () => void;
// AI actions
startAIGame: (playerName: string) => void;
@@ -134,6 +135,18 @@ export const useGameStore = create<GameStore>((set, get) => ({
setTimeout(() => set({ error: null }), 3000);
});
socket.on('rematch-started', (gameState: GameState) => {
set({ gameState, selectedTile: null });
// Check if AI starts
const currentPlayer = gameState.players[gameState.currentPlayerIndex];
if (currentPlayer?.isAI) {
setTimeout(() => {
get().executeAITurn();
}, 1500);
}
});
set({ socket });
},
@@ -246,6 +259,25 @@ export const useGameStore = create<GameStore>((set, get) => ({
});
},
requestRematch: () => {
const { socket, roomId, gameState, currentPlayerId } = get();
// AI mode - start new game immediately
if (roomId?.startsWith('AI-') && gameState && currentPlayerId) {
const humanPlayer = gameState.players.find(p => !p.isAI);
if (humanPlayer) {
// Just restart with same settings
get().startAIGame(humanPlayer.name);
}
return;
}
// Online mode - send rematch request to server
if (socket && roomId) {
socket.emit('request-rematch', roomId);
}
},
setError: (error: string | null) => {
set({ error });
if (error) {
@@ -297,6 +329,7 @@ export const useGameStore = create<GameStore>((set, get) => ({
isGameOver: false,
turnsPassed: 0,
gameMode: 'playing',
rematchRequests: [],
};
set({ gameState, currentPlayerId: 'human', roomId });

Ver fichero

@@ -47,6 +47,7 @@ export type GameState = {
isGameOver: boolean;
turnsPassed: number;
gameMode: 'waiting' | 'playing' | 'finished';
rematchRequests: string[]; // Player IDs who requested rematch
};
export type GameMove = {
@@ -64,6 +65,7 @@ export type SocketEvents = {
'make-move': (roomId: string, move: GameMove) => void;
'draw-tile': (roomId: string) => void;
'leave-room': (roomId: string) => void;
'request-rematch': (roomId: string) => void;
// Server to Client
'room-created': (roomId: string) => void;
@@ -74,4 +76,6 @@ export type SocketEvents = {
'player-joined': (player: Player) => void;
'player-left': (playerId: string) => void;
'error': (message: string) => void;
'rematch-requested': (playerId: string) => void;
'rematch-started': (gameState: GameState) => void;
};