Correção ao selecionar um jogador para escolher um termo
Um problema fazia com que um jogador fosse escolhido duas vezes seguintas para escolher um termo algumas vezes. Este problema foi corrigido.
This commit is contained in:
parent
158bc9bfc5
commit
9372142cad
27
index.js
27
index.js
|
@ -300,9 +300,12 @@ wss.on('connection', ws => {
|
|||
|
||||
salaObj.palavra = resposta.extra.palavra.toUpperCase();
|
||||
salaObj.definirPalavraLetrasQtd();
|
||||
salaObj.termoVezDe = clienteEscolhido;
|
||||
salaObj.termoVezDe = salaObj.próxItemJf === undefined ? salaObj.jf[0] : salaObj.próxItemJf();
|
||||
|
||||
if (salaObj.termoVezDe === salaObj.vezDe)
|
||||
salaObj.termoVezDe = salaObj.próxItemJf();
|
||||
|
||||
salaObj.estadoTermo = "AGUARDANDO_LETRA";
|
||||
salaObj.jf.push(clienteEscolhido);
|
||||
|
||||
// Vamos alertar todos os clientes sobre este evento.
|
||||
alertarClientesEvento("EVENTO_PALAVRA_ESCOLHIDA", cliente.sala, { palavra: { tamanho: resposta.extra.palavra.length, espaços: salaObj.procurar(' '), hífens: salaObj.procurar('-') }, tema: resposta.extra.tema, termoVezDe: salaObj.termoVezDe });
|
||||
|
@ -357,11 +360,14 @@ wss.on('connection', ws => {
|
|||
let lp = resultadoTermo.letrasPreenchidas;
|
||||
let r = resultadoTermo.resultado;
|
||||
|
||||
let tentarNovamente = false;
|
||||
|
||||
let dif = 0, // diferença da nova pontuação do jogador que enviou o termo
|
||||
dife = 0; // diferença da nova pontuação do jogador que enviou a palavra atual
|
||||
switch (r){
|
||||
case "LETRA_JÁ_ESCOLHIDA":{
|
||||
alertarClientesEvento("EVENTO_TERMO_ESCOLHIDO", cliente.sala, { tipo: letra ? "LETRA" : "TERMO", termo: resposta.extra.termo, resultado: r });
|
||||
tentarNovamente = true;
|
||||
break;
|
||||
}
|
||||
case "LETRAS_PREENCHIDAS":{
|
||||
|
@ -427,7 +433,7 @@ wss.on('connection', ws => {
|
|||
break;
|
||||
}
|
||||
}
|
||||
escolherJogadorTermo(salaObj);
|
||||
escolherJogadorTermo(salaObj, tentarNovamente? cliente.apelido : undefined);
|
||||
// Enviar um alerta para todos os clientes da sala.
|
||||
// Não é necessário especificar o apelido do jogador. Os clientes já vão estar esperando uma resposta do cliente em questão.
|
||||
/*alertarClientesEvento("EVENTO_TERMO_ESCOLHIDO", cliente.sala, { tipo: letra ? "LETRA" : "TERMO", termo: resposta.extra.termo });*/
|
||||
|
@ -730,12 +736,17 @@ function alterarTin(sala, valor){
|
|||
}
|
||||
}
|
||||
|
||||
function escolherJogadorTermo(sala){
|
||||
function escolherJogadorTermo(sala, jogador){
|
||||
// Escolher outro jogador para enviar o próximo termo.
|
||||
let ja = sala.gerarJogadorAleatório();
|
||||
|
||||
sala.jf.push(ja);
|
||||
sala.termoVezDe = ja;
|
||||
if (sala.jf.indexOf(sala.termoVezDe) === sala.jf.length - 1)
|
||||
sala.termoVezDe = null;
|
||||
|
||||
sala.termoVezDe = sala.próxItemJf();
|
||||
|
||||
if (sala.termoVezDe === sala.vezDe)
|
||||
sala.termoVezDe = sala.próxItemJf();
|
||||
|
||||
let ja = sala.termoVezDe;
|
||||
|
||||
// É hora de descobrir a palavra inteira?
|
||||
let possívelDescoberta = sala.possívelDescoberta();
|
||||
|
|
30
sala.js
30
sala.js
|
@ -49,7 +49,20 @@ class Sala {
|
|||
novaPartida(){
|
||||
this.estado = 'EM_PARTIDA';
|
||||
// Popular a fila JFR.
|
||||
this.jf = [];
|
||||
|
||||
let tmpJf = [];
|
||||
for (let x = 0; x < this.clientes.length; x++)
|
||||
if (this.clientes[x].apelido !== this.vezDe)
|
||||
tmpJf.push(this.clientes[x].apelido);
|
||||
|
||||
for (let x = tmpJf.length; x > 0; x--){
|
||||
// Pegar um jogador aleatório da fila.
|
||||
let num = Sala.gerarNúmeroAleatório(tmpJf.length);
|
||||
this.jf.push(tmpJf[num]);
|
||||
tmpJf.splice(num, 1);
|
||||
}
|
||||
|
||||
let tmpJfr = []; // JFR temporária, utilizado para popular a JFR verdadeira.
|
||||
|
||||
for (let x = 0; x < this.clientes.length; x++)
|
||||
|
@ -76,16 +89,27 @@ class Sala {
|
|||
this.ldc = []; // Letras descobertas
|
||||
this.jpa = null; // Jogador que escolheu a palavra atual (Jogador Palavra Atual)
|
||||
this.palavra = null;
|
||||
this.jf = [];
|
||||
this.tin = 0;
|
||||
|
||||
|
||||
// Vamos escolher um jogador aleatório.
|
||||
if (this.jfr.indexOf(this.vezDe) === this.jfr.length - 1)
|
||||
// Fim da fila JFR atingido. Voltar para o começo.
|
||||
this.vezDe = null;
|
||||
|
||||
this.vezDe = this.vezDe === undefined || this.vezDe === null ? this.jfr[0] : this.jfr[this.jfr.indexOf(this.vezDe) + 1]; // Escolher o primeiro jogador na fila caso o limite tenha sido atingido, ou escolher o próximo jogador na fila caso contrário.
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retorna o próximo item da fila JF.
|
||||
* @returns String O próximo item da fila JF.
|
||||
* @since 02/01/2020
|
||||
*/
|
||||
próxItemJf(){
|
||||
let pv1 = this.jf[this.jf.indexOf(this.termoVezDe) + 1];
|
||||
if (pv1 !== undefined)
|
||||
return pv1;
|
||||
return this.jf[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcula e define a quantidade de letras na palavra atual.
|
||||
|
|
Reference in New Issue