
A disputa está pegando fogo na reta final do Campeonato Inglês! A cada rodada, Arsenal e Manchester City provam por que protagonizam uma das rivalidades mais intensas do futebol mundial atualmente. Qualquer tropeço pode custar a taça mais cobiçada da Inglaterra.
Para você não ficar apenas na ansiedade ou fazendo contas no papel, o 365Scores preparou um Simulador da Reta Final da Premier League, focado 100% no duelo entre os Gunners de Mikel Arteta e os Citizens de Pep Guardiola.
Como funciona? É muito simples: você preenche os placares de todos os jogos restantes das duas equipes. A nossa tabela inteligente é atualizada em tempo real a cada gol que você digita.
Se os times terminarem empatados em pontos, o nosso simulador já calcula automaticamente os critérios de desempate oficiais da Premier League:
- Saldo de gols;
- Gols marcados (Gols Pró);
- Confronto direto (Pontos);
- Confronto direto (Gols marcados fora de casa).
`;
}
const homeImgUrl = teamLogos[match.home] || ”;
const awayImgUrl = teamLogos[match.away] || ”;
const homeImg = homeImgUrl ? `` : ”;
const awayImg = awayImgUrl ? `` : ”;
const homeShort = match.home.substring(0, 3).toUpperCase();
const awayShort = match.away.substring(0, 3).toUpperCase();
const isFixed = plResults[match.id] !== undefined;
const homeVal = isFixed ? plResults[match.id].h : ”;
const awayVal = isFixed ? plResults[match.id].a : ”;
const disabledAttr = isFixed && match.locked ? ‘disabled’ : ”;
html += `
`;
});
container.innerHTML = html;
document.querySelectorAll(‘#pl-final-sim-wrapper .pl-input-score:not(:disabled)’).forEach(input => {
input.addEventListener(‘input’, handleScoreChange);
});
}
function handleScoreChange(e) {
const matchId = e.target.getAttribute(‘data-id’);
const row = e.target.closest(‘.pl-match-row’);
const homeInput = row.querySelector(‘.home-score’).value;
const awayInput = row.querySelector(‘.away-score’).value;
if (homeInput !== “” && awayInput !== “”) {
plResults[matchId] = { h: parseInt(homeInput, 10), a: parseInt(awayInput, 10) };
} else {
delete plResults[matchId];
}
calculatePL();
}
function calculatePL() {
let table = {
‘Arsenal’: JSON.parse(JSON.stringify(baseStats[‘Arsenal’])),
‘Manchester City’: JSON.parse(JSON.stringify(baseStats[‘Manchester City’]))
};
// Proteção estrita usando Object.keys()
Object.keys(plResults).forEach(key => {
let match = matchesSchedule.find(m => m.id === key);
if (!match) return;
let res = plResults[key];
if (table[match.home]) {
table[match.home].j++;
table[match.home].gp += res.h;
table[match.home].gc += res.a;
if (res.h > res.a) table[match.home].p += 3;
else if (res.h === res.a) table[match.home].p += 1;
}
if (table[match.away]) {
table[match.away].j++;
table[match.away].gp += res.a;
table[match.away].gc += res.h;
if (res.a > res.h) table[match.away].p += 3;
else if (res.h === res.a) table[match.away].p += 1;
}
});
let teamsArr = Object.values(table);
teamsArr.sort((a, b) => {
if (b.p !== a.p) return b.p – a.p;
let sgA = a.gp – a.gc;
let sgB = b.gp – b.gc;
if (sgB !== sgA) return sgB – sgA;
if (b.gp !== a.gp) return b.gp – a.gp;
if (b.h2hPts !== a.h2hPts) return b.h2hPts – a.h2hPts;
if (b.h2hAwayGoals !== a.h2hAwayGoals) return b.h2hAwayGoals – a.h2hAwayGoals;
return a.name.localeCompare(b.name);
});
renderTable(teamsArr);
}
function renderTable(sortedTeams) {
const tbody = document.getElementById(‘pl-table-body’);
if(!tbody) return;
let html=””;
sortedTeams.forEach((team, index) => {
const posClass = index === 0 ? ‘pl-pos-1’ : ”;
const sg = team.gp – team.gc;
const sgDisplay = sg > 0 ? `+${sg}` : sg;
html += `
${team.name}
`;
});
tbody.innerHTML = html;
// Lógica do Quadro de Campeão e Campeão Antecipado
const champBox = document.getElementById(‘pl-champion-box’);
const champLabel = document.getElementById(‘pl-champ-label’);
const champImg = document.getElementById(‘pl-champ-img’);
const champName = document.getElementById(‘pl-champ-name’);
let leader = sortedTeams[0];
champImg.src = leader.img;
champName.innerText = leader.name;
// Matemática de campeão antecipado (cada time tem exatamente 2 jogos restantes)
let arsPlayed = [‘r37_1’, ‘r38_1’].filter(id => plResults[id]).length;
let cityPlayed = [‘r37_2’, ‘r38_2’].filter(id => plResults[id]).length;
let maxArsPts = sortedTeams.find(t => t.id === ‘Arsenal’).p + ((2 – arsPlayed) * 3);
let maxCityPts = sortedTeams.find(t => t.id === ‘Manchester City’).p + ((2 – cityPlayed) * 3);
let isAllPlayed = Object.keys(plResults).length === matchesSchedule.length;
let labelText = “LÍDER ATUAL:”;
let isChamp = false;
if (isAllPlayed) {
labelText = “🏆 CAMPEÃO:”;
isChamp = true;
} else if (leader.id === ‘Arsenal’ && leader.p > maxCityPts) {
labelText = “🏆 CAMPEÃO ANTECIPADO:”;
isChamp = true;
} else if (leader.id === ‘Manchester City’ && leader.p > maxArsPts) {
labelText = “🏆 CAMPEÃO ANTECIPADO:”;
isChamp = true;
}
champLabel.innerText = labelText;
if (isChamp) {
champLabel.style.color = “var(–text-accent)”;
champBox.style.borderColor = “var(–text-accent)”;
champBox.style.boxShadow = “0 4px 15px rgba(0, 255, 135, 0.2)”;
champBox.style.transform = “scale(1.02)”;
} else {
champLabel.style.color = “var(–text-gray-desc)”;
champBox.style.borderColor = “var(–border-color)”;
champBox.style.boxShadow = “none”;
champBox.style.transform = “scale(1)”;
}
champBox.style.display = ‘flex’;
}
if (document.readyState === ‘complete’ || document.readyState === ‘interactive’) {
initPLSim();
} else {
document.addEventListener(‘DOMContentLoaded’, initPLSim);
}
})();
/* ]]> */
O futuro da Inglaterra está nas suas mãos. Quem levanta o troféu no final de maio? Faça as suas apostas no simulador, veja como fica a classificação final, tire um print e compartilhe o seu palpite com os amigos!