ntegre todas as opções para o jogo da quina

A Quin
This commit is contained in:
Flatlogic Bot 2026-02-20 06:04:14 +00:00
parent e8f96a35c9
commit fe4c6d246a
2 changed files with 86 additions and 26 deletions

View File

@ -22,23 +22,35 @@
</div>
<!-- Dashboard de Resumo -->
<div class="row g-3 mb-4">
<div class="col-md-4">
<div class="p-3 rounded-4 bg-slate-900 border border-slate-800 text-center">
<small class="text-slate-500 d-block mb-1">QUADRAS DETECTADAS</small>
<h3 id="stat-quadra" class="text-info fw-bold mb-0">0</h3>
<div class="row g-2 mb-4">
<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">DUQUES</small>
<h4 id="stat-duque" class="text-secondary fw-bold mb-0">0</h4>
</div>
</div>
<div class="col-md-4">
<div class="p-3 rounded-4 bg-slate-900 border border-slate-800 text-center">
<small class="text-slate-500 d-block mb-1">QUINAS DETECTADAS</small>
<h3 id="stat-quina" class="text-warning fw-bold mb-0">0</h3>
<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">TERNOS</small>
<h4 id="stat-terno" class="text-primary fw-bold mb-0">0</h4>
</div>
</div>
<div class="col-md-4">
<div class="p-3 rounded-4 bg-slate-900 border border-slate-800 text-center">
<small class="text-slate-500 d-block mb-1">SENAS DETECTADAS</small>
<h3 id="stat-sena" class="text-danger fw-bold mb-0">0</h3>
<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">QUADRAS</small>
<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>
@ -60,6 +72,7 @@
.border-slate-800 { border-color: #1e293b !important; }
.text-slate-500 { color: #64748b !important; }
.text-slate-700 { color: #334155 !important; }
.x-small { font-size: 0.7rem; }
.hit-card {
background: #0f172a;
@ -104,24 +117,29 @@
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
hits.reverse().forEach(hit => {
// Garantir ordenação (Menor para o Maior) na exibição do relatório
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 >= 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');
col.className = 'col-md-6 col-lg-4';
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>`;
}).join('');
@ -139,6 +157,8 @@
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-quina').innerText = qn;
document.getElementById('stat-sena').innerText = sn;

View File

@ -77,6 +77,18 @@
<span id="count-total" class="fw-bold text-success">0</span>
</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="p-2 rounded bg-slate-900 border-start border-info border-2">
<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>
</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">
<small class="d-block text-muted x-small">SENAS</small>
<span id="count-sena" class="fw-bold text-danger">0</span>
@ -220,6 +232,8 @@
let lotteryData = null;
let currentStartNum = 1;
let totalGenerated = 0;
let countDuque = 0;
let countTerno = 0;
let countQuadra = 0;
let countQuina = 0;
let countSena = 0;
@ -270,6 +284,17 @@
const resp = await fetch(`/api/lottery-info/${key}/`);
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);
updateElitePanel();
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>`;
currentStartNum = 1;
totalGenerated = 0;
countDuque = 0;
countTerno = 0;
countQuadra = 0;
countQuina = 0;
countSena = 0;
@ -346,9 +373,12 @@
function updateStats() {
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-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) {
document.getElementById("btn-download").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;
if (hits >= 4) {
let type = hits === 4 ? "QUADRA" : (hits === 5 ? "QUINA" : "SENA");
if (hits === 4) countQuadra++;
else if (hits === 5) countQuina++;
else if (hits >= 6) countSena++;
const isQuina = lotteryData.name.toLowerCase().includes('quina');
const minHits = isQuina ? 2 : 4;
if (hits >= minHits) {
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 };
detectedHits.push(hitData);
renderHit(hitData);
if (hits >= 5) {
if (hits >= (isQuina ? 3 : 5)) {
speak(`Alerta! ${type} detectada com alto índice de probabilidade.`);
}
}
@ -436,7 +471,12 @@
const panel = document.getElementById("hits-panel");
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");
div.className = "d-flex justify-content-between align-items-center p-2 rounded bg-slate-900 border border-slate-800 x-small";
div.innerHTML = `