49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
// websockets/state/game.js
|
|
|
|
// Importamos a classe que criaste no Passo 1
|
|
const BiscaGame = require('../classes/BiscaGame');
|
|
|
|
// Aqui guardamos todos os jogos a decorrer na memória RAM do servidor
|
|
// Chave: ID do jogo (matchId) -> Valor: Instância do Jogo (O objeto com o baralho, mãos, etc)
|
|
const activeGames = new Map();
|
|
|
|
/**
|
|
* Cria um novo jogo, guarda-o na memória e retorna-o.
|
|
*/
|
|
const createGame = (id, type, player1, player2) => {
|
|
// 1. Instanciar a classe (Criar o jogo com as regras)
|
|
const game = new BiscaGame(id, type, player1, player2);
|
|
|
|
// 2. Preparar o jogo (Baralhar, dar cartas iniciais)
|
|
game.init();
|
|
|
|
// 3. Guardar no "Armazém" para não se perder
|
|
activeGames.set(id, game);
|
|
|
|
console.log(`[Game State] Jogo criado: ${id} (Tipo: ${type})`);
|
|
return game;
|
|
};
|
|
|
|
/**
|
|
* Busca um jogo existente pelo ID.
|
|
* Usado sempre que um jogador envia uma carta, para sabermos a qual jogo pertence.
|
|
*/
|
|
const getGame = (id) => {
|
|
return activeGames.get(id);
|
|
};
|
|
|
|
/**
|
|
* Remove o jogo da memória.
|
|
* Usado quando o jogo acaba para libertar RAM.
|
|
*/
|
|
const removeGame = (id) => {
|
|
activeGames.delete(id);
|
|
console.log(`[Game State] Jogo removido: ${id}`);
|
|
};
|
|
|
|
// Exportamos estas funções para serem usadas no ficheiro de eventos
|
|
module.exports = {
|
|
createGame,
|
|
getGame,
|
|
removeGame
|
|
}; |