Update 2025-04-13_16:26:56

This commit is contained in:
root
2025-04-13 16:26:57 +02:00
commit e1f088f10f
2311 changed files with 422629 additions and 0 deletions

88
static/app.js Normal file
View File

@ -0,0 +1,88 @@
// 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();