89 lines
2.3 KiB
JavaScript
89 lines
2.3 KiB
JavaScript
// Simpler approach to show 3s 'Get ready...' and then start dynamic loop
|
|
|
|
let lastGrid = [];
|
|
let currentGrid = [];
|
|
let gameStartTime = null;
|
|
|
|
// Linear formula: from 3s down to 1s over 60s
|
|
function getInterval(secondsElapsed) {
|
|
return Math.max(1, -secondsElapsed / 30 + 3);
|
|
}
|
|
|
|
function renderGrid(grid) {
|
|
const gridDiv = document.getElementById('grid');
|
|
gridDiv.innerHTML = '';
|
|
grid.forEach((num, idx) => {
|
|
const cell = document.createElement('button');
|
|
cell.textContent = num;
|
|
cell.onclick = () => guess(idx);
|
|
gridDiv.appendChild(cell);
|
|
});
|
|
}
|
|
|
|
function initGame() {
|
|
// 1) Fetch grid once
|
|
fetch('/get_grid')
|
|
.then(r => r.json())
|
|
.then(grid => {
|
|
currentGrid = [...grid];
|
|
renderGrid(currentGrid);
|
|
|
|
// 2) Show 'Get ready...' for 3s
|
|
const feedback = document.getElementById('feedback');
|
|
feedback.textContent = "⏳ Get ready...";
|
|
|
|
setTimeout(() => {
|
|
feedback.textContent = "";
|
|
|
|
// 3) Now start the game
|
|
lastGrid = [...currentGrid];
|
|
gameStartTime = Date.now();
|
|
startStats();
|
|
startDynamicLoop();
|
|
}, 3000);
|
|
})
|
|
.catch(err => {
|
|
console.error('Init fetch error:', err);
|
|
});
|
|
}
|
|
|
|
function startDynamicLoop() {
|
|
// Repeatedly fetch grid at decreasing intervals
|
|
function loop() {
|
|
const secondsElapsed = (Date.now() - gameStartTime) / 1000;
|
|
const nextInterval = getInterval(secondsElapsed);
|
|
fetchGrid();
|
|
setTimeout(loop, nextInterval * 1000);
|
|
}
|
|
loop();
|
|
}
|
|
|
|
function fetchGrid() {
|
|
fetch('/get_grid')
|
|
.then(r => r.json())
|
|
.then(grid => {
|
|
lastGrid = [...currentGrid];
|
|
currentGrid = [...grid];
|
|
renderGrid(currentGrid);
|
|
})
|
|
.catch(err => {
|
|
console.error('Fetch grid error:', err);
|
|
});
|
|
}
|
|
|
|
function guess(idx) {
|
|
const feedback = document.getElementById('feedback');
|
|
if (lastGrid.length === 9 && currentGrid[idx] !== lastGrid[idx]) {
|
|
feedback.textContent = "✅ Correct!";
|
|
incrementCorrect();
|
|
} else {
|
|
feedback.textContent = "❌ Try again!";
|
|
incrementWrong();
|
|
}
|
|
setTimeout(() => feedback.textContent = "", 1500);
|
|
}
|
|
|
|
// Kick off
|
|
initGame();
|
|
|