From 3444bc59edcc96cc6be9853cc3c62cdb099d1a43 Mon Sep 17 00:00:00 2001 From: Marklogo Date: Fri, 5 Apr 2024 19:50:22 +0200 Subject: [PATCH] implementadas las batallas --- public/js/htmlTmpl.js | 15 +++++++++++ public/js/salaespera.js | 40 +++++++++++++++++++----------- src/batalla/batalla.module.ts | 2 ++ src/batalla/batalla.service.ts | 9 ++++++- src/battleship/battleship.ts | 24 ++++++++---------- src/sala-chat/sala-chat.gateway.ts | 8 +++--- src/sala-chat/sala-chat.service.ts | 30 ++++++++++++---------- 7 files changed, 83 insertions(+), 45 deletions(-) diff --git a/public/js/htmlTmpl.js b/public/js/htmlTmpl.js index e6f9c9e..76c2569 100644 --- a/public/js/htmlTmpl.js +++ b/public/js/htmlTmpl.js @@ -25,3 +25,18 @@ export const cardGameGeneral = (nickname, game_id,unirsePartidaCallback) => { }); return cardGameDiv; }; + +export const cardGameEnCurso = (partida,entrarEnPartidaCallBack) => { + var cardGameDiv = document.createElement('div'); + cardGameDiv.classList.add('cardGame'); + cardGameDiv.innerHTML = `${partida.nickJugadorA} + vs + ${partida.nickJugadorB} + + `; + const enterGameBtn = cardGameDiv.querySelector('.enter-game-btn'); + enterGameBtn.addEventListener('click', () => { + entrarEnPartidaCallBack(partida.uuid); + }); + return cardGameDiv; +}; \ No newline at end of file diff --git a/public/js/salaespera.js b/public/js/salaespera.js index 44a848a..c0e9f89 100644 --- a/public/js/salaespera.js +++ b/public/js/salaespera.js @@ -1,6 +1,10 @@ import { ListaUsuarios } from './listausuarios.js'; import { ListaPartidas } from './listapartidas.js'; -import { cardGamePropia, cardGameGeneral } from './htmlTmpl.js'; +import { + cardGamePropia, + cardGameGeneral, + cardGameEnCurso, +} from './htmlTmpl.js'; const usersConnectUlEl = document.querySelector('#users_connect'); const usersDisconnectUlEl = document.querySelector('#users_disconnect'); @@ -61,10 +65,15 @@ function generarElementoListaPartida(partida) { return cardGame; } // Función para actualizar la lista de partidas abiertas -function actualizarListaPartidasAbiertas() { +function actualizarListaPartidas() { partidasAbiertasEl.innerHTML = 'Partidas abiertas'; partidasProcesoEl.innerHTML = 'Tus partidas'; + listaPartidasEnCurso.partidas.forEach((partida) => { + const cardGame = cardGameEnCurso(partida,onClickEntrarEnPartida); + partidasProcesoEl.appendChild(cardGame); + }); + listaPartidasAbiertas.partidas.forEach((partida) => { const cardGame = generarElementoListaPartida(partida); userId === partida.uuidJugadorA || userId === partida.uuidJugadorB @@ -105,11 +114,12 @@ function agregarMensajeDeTransmisionAlChat(msg) { } const handlers = { - onConnectRoom: ({ usuarios, partidas }) => { + onConnectRoom: ({ usuarios, partidas, partidasEnCurso }) => { listaUsuarios = new ListaUsuarios(userId, usuarios); listaPartidasAbiertas = new ListaPartidas(partidas); + listaPartidasEnCurso = new ListaPartidas(partidasEnCurso); actualizarListaUsuarios(); - actualizarListaPartidasAbiertas(); + actualizarListaPartidas(); }, onUserChangeStatus: (usuario) => { listaUsuarios.actualizaUsuario(usuario); @@ -124,15 +134,18 @@ const handlers = { }, onCreatePartida: (partida) => { listaPartidasAbiertas.agregarPartida(partida); - actualizarListaPartidasAbiertas(); + actualizarListaPartidas(); }, - onJoinPartida: (uuid) => { - listaPartidasAbiertas.eliminarPartida(uuid); - actualizarListaPartidasAbiertas(); + onJoinPartida: (partida) => { + listaPartidasAbiertas.eliminarPartida(partida.uuid); + if (partida.uuidJugadorA === userId || partida.uuidJugadorB === userId) { + listaPartidasEnCurso.agregarPartida(partida); + } + actualizarListaPartidas(); }, onCancelPartida: (uuid) => { listaPartidasAbiertas.eliminarPartida(uuid); - actualizarListaPartidasAbiertas(); + actualizarListaPartidas(); }, disconnect: (reason) => { if (reason === 'io server disconnect' || reason === 'buttonClick') { @@ -146,8 +159,6 @@ Object.entries(handlers).forEach(([event, handler]) => { socket.on(event, handler); }); - - document.querySelector('#btnCerrar').addEventListener('click', () => { handlers.disconnect('buttonClick'); }); @@ -166,12 +177,13 @@ document.querySelector('#chatinput').addEventListener('keyup', (event) => { } }); -// // const url = '/batalla.html?game_id=' + encodeURIComponent(partida.uuid); -// // window.open(url, '_blank'); - function onClickEliminarPartida(game_id) { socket.emit('cancelPartida', game_id, handlers.onCancelPartida); } function onClickUnirsePartida(game_id) { socket.emit('joinPartida', game_id, handlers.onJoinPartida); } +function onClickEntrarEnPartida(game_id) { + const url = '/batalla.html?game_id=' + encodeURIComponent(game_id); + window.open(url, '_blank'); +} diff --git a/src/batalla/batalla.module.ts b/src/batalla/batalla.module.ts index f4e6f17..54fbac5 100644 --- a/src/batalla/batalla.module.ts +++ b/src/batalla/batalla.module.ts @@ -1,8 +1,10 @@ import { Module } from '@nestjs/common'; import { BatallaService } from './batalla.service'; import { BatallaGateway } from './batalla.gateway'; +import { SharedModule } from 'src/shared/shared.module'; @Module({ + imports:[SharedModule], providers: [BatallaGateway, BatallaService], }) export class BatallaModule {} diff --git a/src/batalla/batalla.service.ts b/src/batalla/batalla.service.ts index 95a5c21..300cbf4 100644 --- a/src/batalla/batalla.service.ts +++ b/src/batalla/batalla.service.ts @@ -1,4 +1,11 @@ import { Injectable } from '@nestjs/common'; +import { PartidasService } from 'src/shared/partidas.service'; +import { UsuariosService } from 'src/shared/usuarios.service'; @Injectable() -export class BatallaService {} +export class BatallaService { + constructor( + private readonly usuariosService: UsuariosService, + private readonly partidasService: PartidasService, + ) {} +} diff --git a/src/battleship/battleship.ts b/src/battleship/battleship.ts index ec169b6..c74c83c 100644 --- a/src/battleship/battleship.ts +++ b/src/battleship/battleship.ts @@ -1,23 +1,21 @@ import Jugador from './jugador'; -export default class BattleshipGame{ - public jugadorA: Jugador; - public jugadorB: Jugador; - - turnoActual: Jugador | null; - - constructor( - public idPartida: string, - ) { +export default class BattleshipGame { + public jugadorA: Jugador | null = null; + public jugadorB: Jugador | null = null; + + turnoActual: Jugador | null; + + constructor(public idPartida: string) { this.turnoActual = null; } - setJugadorA(jugador:Jugador){ - this.jugadorA=jugador; + setJugadorA(jugador: Jugador) { + this.jugadorA = jugador; } - setJugadorB(jugador:Jugador){ - this.jugadorB=jugador; + setJugadorB(jugador: Jugador) { + this.jugadorB = jugador; } iniciaPartida() { diff --git a/src/sala-chat/sala-chat.gateway.ts b/src/sala-chat/sala-chat.gateway.ts index d6fe50a..ae2c2da 100644 --- a/src/sala-chat/sala-chat.gateway.ts +++ b/src/sala-chat/sala-chat.gateway.ts @@ -27,7 +27,7 @@ export class SalaChatGateway client.emit('onConnectRoom', { usuarios: this.salaChatService.listaUsuarios, partidas: this.salaChatService.partidasAbiertas, - partidasEnCurso: '', + partidasEnCurso: this.salaChatService.getPartidasEnCurso(userId), }); client.broadcast .to('chat_general') @@ -88,8 +88,8 @@ export class SalaChatGateway handleJoinPartida(client: Socket, uuidPartida: string) { const userId = client.handshake.auth.userId; const partida = this.salaChatService.unirsePartida(userId, uuidPartida); - - client.broadcast.to('chat_general').emit('onJoinPartida', partida.uuid); - return partida.uuid; + client.broadcast.to('chat_general').emit('onJoinPartida', partida); + return partida; } + } diff --git a/src/sala-chat/sala-chat.service.ts b/src/sala-chat/sala-chat.service.ts index 1ef1b0e..0daaeca 100644 --- a/src/sala-chat/sala-chat.service.ts +++ b/src/sala-chat/sala-chat.service.ts @@ -13,29 +13,31 @@ export class SalaChatService { return Array.from(this.usuariosService.usuarios.values()); } - get partidasAbiertas(){ + get partidasAbiertas() { return this.partidasService.partidasAbiertas; } - getPartidasEnCurso + getPartidasEnCurso(uuid: string) { + return this.partidasService.partidasCerradadas.filter((partida) => { + return partida.uuidJugadorA === uuid || partida.uuidJugadorB === uuid; + }); + } getUsuarioUUID(uuid: string) { return this.usuariosService.getUsuarioByUUID(uuid); } - conectaUsuarioUUID(uuid: string,socketId:string) { + + conectaUsuarioUUID(uuid: string, socketId: string) { const user = this.usuariosService.getUsuarioByUUID(uuid); if (user) { - user.socketId=socketId; + user.socketId = socketId; user.conectado = true; - return { - uuid: user.uuid, - nickname: user.nickname, - conectado: user.conectado, - }; + return user; } else { return undefined; } } + desconectaUsuarioUUID(uuid: string) { const user = this.usuariosService.getUsuarioByUUID(uuid); if (user) { @@ -54,10 +56,12 @@ export class SalaChatService { const partida = this.partidasService.creaPartida(uuidJugadorCreador); return partida; } - unirsePartida(uuidJugadorB:string,uuidPartida:string){ - return this.partidasService.unirsePartida(uuidJugadorB,uuidPartida); + + unirsePartida(uuidJugadorB: string, uuidPartida: string) { + return this.partidasService.unirsePartida(uuidJugadorB, uuidPartida); } - eliminarPartida(uuidJugador:string, uuidPartida:string){ - return this.partidasService.eliminarPartida(uuidJugador,uuidPartida); + + eliminarPartida(uuidJugador: string, uuidPartida: string) { + return this.partidasService.eliminarPartida(uuidJugador, uuidPartida); } }