ntegre todas as opções para o jogo da quina
A Quin
This commit is contained in:
parent
e8f96a35c9
commit
fe4c6d246a
@ -22,23 +22,35 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Dashboard de Resumo -->
|
<!-- Dashboard de Resumo -->
|
||||||
<div class="row g-3 mb-4">
|
<div class="row g-2 mb-4">
|
||||||
<div class="col-md-4">
|
<div class="col">
|
||||||
<div class="p-3 rounded-4 bg-slate-900 border border-slate-800 text-center">
|
<div class="p-2 rounded-4 bg-slate-900 border border-slate-800 text-center">
|
||||||
<small class="text-slate-500 d-block mb-1">QUADRAS DETECTADAS</small>
|
<small class="text-slate-500 d-block mb-1 x-small">DUQUES</small>
|
||||||
<h3 id="stat-quadra" class="text-info fw-bold mb-0">0</h3>
|
<h4 id="stat-duque" class="text-secondary fw-bold mb-0">0</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col">
|
||||||
<div class="p-3 rounded-4 bg-slate-900 border border-slate-800 text-center">
|
<div class="p-2 rounded-4 bg-slate-900 border border-slate-800 text-center">
|
||||||
<small class="text-slate-500 d-block mb-1">QUINAS DETECTADAS</small>
|
<small class="text-slate-500 d-block mb-1 x-small">TERNOS</small>
|
||||||
<h3 id="stat-quina" class="text-warning fw-bold mb-0">0</h3>
|
<h4 id="stat-terno" class="text-primary fw-bold mb-0">0</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col">
|
||||||
<div class="p-3 rounded-4 bg-slate-900 border border-slate-800 text-center">
|
<div class="p-2 rounded-4 bg-slate-900 border border-slate-800 text-center">
|
||||||
<small class="text-slate-500 d-block mb-1">SENAS DETECTADAS</small>
|
<small class="text-slate-500 d-block mb-1 x-small">QUADRAS</small>
|
||||||
<h3 id="stat-sena" class="text-danger fw-bold mb-0">0</h3>
|
<h4 id="stat-quadra" class="text-info fw-bold mb-0">0</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<div class="p-2 rounded-4 bg-slate-900 border border-slate-800 text-center">
|
||||||
|
<small class="text-slate-500 d-block mb-1 x-small">QUINAS</small>
|
||||||
|
<h4 id="stat-quina" class="text-warning fw-bold mb-0">0</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<div class="p-2 rounded-4 bg-slate-900 border border-slate-800 text-center">
|
||||||
|
<small class="text-slate-500 d-block mb-1 x-small">SENAS</small>
|
||||||
|
<h4 id="stat-sena" class="text-danger fw-bold mb-0">0</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -60,6 +72,7 @@
|
|||||||
.border-slate-800 { border-color: #1e293b !important; }
|
.border-slate-800 { border-color: #1e293b !important; }
|
||||||
.text-slate-500 { color: #64748b !important; }
|
.text-slate-500 { color: #64748b !important; }
|
||||||
.text-slate-700 { color: #334155 !important; }
|
.text-slate-700 { color: #334155 !important; }
|
||||||
|
.x-small { font-size: 0.7rem; }
|
||||||
|
|
||||||
.hit-card {
|
.hit-card {
|
||||||
background: #0f172a;
|
background: #0f172a;
|
||||||
@ -104,24 +117,29 @@
|
|||||||
|
|
||||||
container.innerHTML = '';
|
container.innerHTML = '';
|
||||||
|
|
||||||
let qd = 0, qn = 0, sn = 0;
|
let dq = 0, tr = 0, qd = 0, qn = 0, sn = 0;
|
||||||
|
|
||||||
// Inverte para mostrar os mais recentes primeiro
|
// Inverte para mostrar os mais recentes primeiro
|
||||||
hits.reverse().forEach(hit => {
|
hits.reverse().forEach(hit => {
|
||||||
// Garantir ordenação (Menor para o Maior) na exibição do relatório
|
// Garantir ordenação (Menor para o Maior) na exibição do relatório
|
||||||
hit.sequence.sort((a, b) => a - b);
|
hit.sequence.sort((a, b) => a - b);
|
||||||
|
|
||||||
if (hit.hits === 4) qd++;
|
if (hit.hits === 2) dq++;
|
||||||
|
else if (hit.hits === 3) tr++;
|
||||||
|
else if (hit.hits === 4) qd++;
|
||||||
else if (hit.hits === 5) qn++;
|
else if (hit.hits === 5) qn++;
|
||||||
else if (hit.hits >= 6) sn++;
|
else if (hit.hits >= 6) sn++;
|
||||||
|
|
||||||
const badgeClass = hit.hits === 4 ? "bg-info" : (hit.hits === 5 ? "bg-warning text-dark" : "bg-danger");
|
let badgeClass = "bg-danger";
|
||||||
|
if (hit.hits === 2) badgeClass = "bg-secondary";
|
||||||
|
else if (hit.hits === 3) badgeClass = "bg-primary";
|
||||||
|
else if (hit.hits === 4) badgeClass = "bg-info";
|
||||||
|
else if (hit.hits === 5) badgeClass = "bg-warning text-dark";
|
||||||
|
|
||||||
const col = document.createElement('div');
|
const col = document.createElement('div');
|
||||||
col.className = 'col-md-6 col-lg-4';
|
col.className = 'col-md-6 col-lg-4';
|
||||||
|
|
||||||
let ballsHtml = hit.sequence.map(n => {
|
let ballsHtml = hit.sequence.map(n => {
|
||||||
// Aqui não temos os elite_greens no localStorage, então mostramos simples
|
|
||||||
return `<div class="num-ball-mini">${n.toString().padStart(2, '0')}</div>`;
|
return `<div class="num-ball-mini">${n.toString().padStart(2, '0')}</div>`;
|
||||||
}).join('');
|
}).join('');
|
||||||
|
|
||||||
@ -139,6 +157,8 @@
|
|||||||
container.appendChild(col);
|
container.appendChild(col);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (document.getElementById('stat-duque')) document.getElementById('stat-duque').innerText = dq;
|
||||||
|
if (document.getElementById('stat-terno')) document.getElementById('stat-terno').innerText = tr;
|
||||||
document.getElementById('stat-quadra').innerText = qd;
|
document.getElementById('stat-quadra').innerText = qd;
|
||||||
document.getElementById('stat-quina').innerText = qn;
|
document.getElementById('stat-quina').innerText = qn;
|
||||||
document.getElementById('stat-sena').innerText = sn;
|
document.getElementById('stat-sena').innerText = sn;
|
||||||
|
|||||||
@ -77,6 +77,18 @@
|
|||||||
<span id="count-total" class="fw-bold text-success">0</span>
|
<span id="count-total" class="fw-bold text-success">0</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="col-duque" class="col d-none">
|
||||||
|
<div class="p-2 rounded bg-slate-900 border-start border-secondary border-2">
|
||||||
|
<small class="d-block text-muted x-small">DUQUES</small>
|
||||||
|
<span id="count-duque" class="fw-bold text-secondary">0</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="col-terno" class="col d-none">
|
||||||
|
<div class="p-2 rounded bg-slate-900 border-start border-primary border-2">
|
||||||
|
<small class="d-block text-muted x-small">TERNOS</small>
|
||||||
|
<span id="count-terno" class="fw-bold text-primary">0</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="p-2 rounded bg-slate-900 border-start border-info border-2">
|
<div class="p-2 rounded bg-slate-900 border-start border-info border-2">
|
||||||
<small class="d-block text-muted x-small">QUADRAS</small>
|
<small class="d-block text-muted x-small">QUADRAS</small>
|
||||||
@ -89,7 +101,7 @@
|
|||||||
<span id="count-quina" class="fw-bold text-warning">0</span>
|
<span id="count-quina" class="fw-bold text-warning">0</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div id="col-sena" class="col">
|
||||||
<div class="p-2 rounded bg-slate-900 border-start border-danger border-2">
|
<div class="p-2 rounded bg-slate-900 border-start border-danger border-2">
|
||||||
<small class="d-block text-muted x-small">SENAS</small>
|
<small class="d-block text-muted x-small">SENAS</small>
|
||||||
<span id="count-sena" class="fw-bold text-danger">0</span>
|
<span id="count-sena" class="fw-bold text-danger">0</span>
|
||||||
@ -220,6 +232,8 @@
|
|||||||
let lotteryData = null;
|
let lotteryData = null;
|
||||||
let currentStartNum = 1;
|
let currentStartNum = 1;
|
||||||
let totalGenerated = 0;
|
let totalGenerated = 0;
|
||||||
|
let countDuque = 0;
|
||||||
|
let countTerno = 0;
|
||||||
let countQuadra = 0;
|
let countQuadra = 0;
|
||||||
let countQuina = 0;
|
let countQuina = 0;
|
||||||
let countSena = 0;
|
let countSena = 0;
|
||||||
@ -270,6 +284,17 @@
|
|||||||
const resp = await fetch(`/api/lottery-info/${key}/`);
|
const resp = await fetch(`/api/lottery-info/${key}/`);
|
||||||
lotteryData = await resp.json();
|
lotteryData = await resp.json();
|
||||||
|
|
||||||
|
// Ajusta visibilidade das colunas baseado no jogo
|
||||||
|
if (key.toLowerCase().includes('quina')) {
|
||||||
|
document.getElementById("col-duque").classList.remove("d-none");
|
||||||
|
document.getElementById("col-terno").classList.remove("d-none");
|
||||||
|
document.getElementById("col-sena").classList.add("d-none");
|
||||||
|
} else {
|
||||||
|
document.getElementById("col-duque").classList.add("d-none");
|
||||||
|
document.getElementById("col-terno").classList.add("d-none");
|
||||||
|
document.getElementById("col-sena").classList.remove("d-none");
|
||||||
|
}
|
||||||
|
|
||||||
setupFunnel(lotteryData.max_number);
|
setupFunnel(lotteryData.max_number);
|
||||||
updateElitePanel();
|
updateElitePanel();
|
||||||
btnStart.disabled = false;
|
btnStart.disabled = false;
|
||||||
@ -336,6 +361,8 @@
|
|||||||
document.getElementById("hits-panel").innerHTML = `<div class="text-center text-slate-700 py-3 small">Nenhum acerto de elite detectado ainda...</div>`;
|
document.getElementById("hits-panel").innerHTML = `<div class="text-center text-slate-700 py-3 small">Nenhum acerto de elite detectado ainda...</div>`;
|
||||||
currentStartNum = 1;
|
currentStartNum = 1;
|
||||||
totalGenerated = 0;
|
totalGenerated = 0;
|
||||||
|
countDuque = 0;
|
||||||
|
countTerno = 0;
|
||||||
countQuadra = 0;
|
countQuadra = 0;
|
||||||
countQuina = 0;
|
countQuina = 0;
|
||||||
countSena = 0;
|
countSena = 0;
|
||||||
@ -346,9 +373,12 @@
|
|||||||
|
|
||||||
function updateStats() {
|
function updateStats() {
|
||||||
document.getElementById("count-total").innerText = totalGenerated.toLocaleString();
|
document.getElementById("count-total").innerText = totalGenerated.toLocaleString();
|
||||||
|
if (document.getElementById("count-duque")) document.getElementById("count-duque").innerText = countDuque.toLocaleString();
|
||||||
|
if (document.getElementById("count-terno")) document.getElementById("count-terno").innerText = countTerno.toLocaleString();
|
||||||
document.getElementById("count-quadra").innerText = countQuadra.toLocaleString();
|
document.getElementById("count-quadra").innerText = countQuadra.toLocaleString();
|
||||||
document.getElementById("count-quina").innerText = countQuina.toLocaleString();
|
document.getElementById("count-quina").innerText = countQuina.toLocaleString();
|
||||||
document.getElementById("count-sena").innerText = countSena.toLocaleString();
|
if (document.getElementById("count-sena")) document.getElementById("count-sena").innerText = countSena.toLocaleString();
|
||||||
|
|
||||||
if (detectedHits.length > 0) {
|
if (detectedHits.length > 0) {
|
||||||
document.getElementById("btn-download").classList.remove("d-none");
|
document.getElementById("btn-download").classList.remove("d-none");
|
||||||
document.getElementById("btn-open-browser").classList.remove("d-none");
|
document.getElementById("btn-open-browser").classList.remove("d-none");
|
||||||
@ -403,17 +433,22 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const hits = sequence.filter(n => lotteryData.elite_greens.includes(n)).length;
|
const hits = sequence.filter(n => lotteryData.elite_greens.includes(n)).length;
|
||||||
if (hits >= 4) {
|
const isQuina = lotteryData.name.toLowerCase().includes('quina');
|
||||||
let type = hits === 4 ? "QUADRA" : (hits === 5 ? "QUINA" : "SENA");
|
const minHits = isQuina ? 2 : 4;
|
||||||
if (hits === 4) countQuadra++;
|
|
||||||
else if (hits === 5) countQuina++;
|
if (hits >= minHits) {
|
||||||
else if (hits >= 6) countSena++;
|
let type = "";
|
||||||
|
if (hits === 2) { type = "DUQUE"; countDuque++; }
|
||||||
|
else if (hits === 3) { type = "TERNO"; countTerno++; }
|
||||||
|
else if (hits === 4) { type = "QUADRA"; countQuadra++; }
|
||||||
|
else if (hits === 5) { type = "QUINAS"; countQuina++; }
|
||||||
|
else if (hits >= 6) { type = "SENA"; countSena++; }
|
||||||
|
|
||||||
const hitData = { type, sequence: [...sequence], hits };
|
const hitData = { type, sequence: [...sequence], hits };
|
||||||
detectedHits.push(hitData);
|
detectedHits.push(hitData);
|
||||||
renderHit(hitData);
|
renderHit(hitData);
|
||||||
|
|
||||||
if (hits >= 5) {
|
if (hits >= (isQuina ? 3 : 5)) {
|
||||||
speak(`Alerta! ${type} detectada com alto índice de probabilidade.`);
|
speak(`Alerta! ${type} detectada com alto índice de probabilidade.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -436,7 +471,12 @@
|
|||||||
const panel = document.getElementById("hits-panel");
|
const panel = document.getElementById("hits-panel");
|
||||||
if (detectedHits.length === 1) panel.innerHTML = "";
|
if (detectedHits.length === 1) panel.innerHTML = "";
|
||||||
|
|
||||||
const badgeClass = hit.hits === 4 ? "bg-info" : (hit.hits === 5 ? "bg-warning text-dark" : "bg-danger");
|
let badgeClass = "bg-danger";
|
||||||
|
if (hit.hits === 2) badgeClass = "bg-secondary";
|
||||||
|
else if (hit.hits === 3) badgeClass = "bg-primary";
|
||||||
|
else if (hit.hits === 4) badgeClass = "bg-info";
|
||||||
|
else if (hit.hits === 5) badgeClass = "bg-warning text-dark";
|
||||||
|
|
||||||
const div = document.createElement("div");
|
const div = document.createElement("div");
|
||||||
div.className = "d-flex justify-content-between align-items-center p-2 rounded bg-slate-900 border border-slate-800 x-small";
|
div.className = "d-flex justify-content-between align-items-center p-2 rounded bg-slate-900 border border-slate-800 x-small";
|
||||||
div.innerHTML = `
|
div.innerHTML = `
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user