diff --git a/index.html b/index.html index 943eba4..e4de346 100644 --- a/index.html +++ b/index.html @@ -122,6 +122,7 @@ let snake, direction, inputQueue, food, score, speed, timer; let state = "start"; // "start" | "playing" | "paused" | "over" + let beatBest = false; // did this game set a new best score? let best = 0; try { best = parseInt(localStorage.getItem("snakeBest"), 10) || 0; } catch (e) {} @@ -144,6 +145,7 @@ direction = { x: 1, y: 0 }; inputQueue = []; score = 0; + beatBest = false; speed = START_SPEED; scoreEl.textContent = score; placeFood(); @@ -200,6 +202,7 @@ if (eating) { score++; scoreEl.textContent = score; + updateBest(); speed = Math.max(MIN_SPEED, speed - 3); placeFood(); if (!food) { draw(); gameOver(true); return; } // board full: you win! @@ -217,10 +220,8 @@ draw(true); finalScoreEl.textContent = score; gameOverScreen.querySelector("h2").textContent = won ? "You Win!" : "Game Over"; - if (score > best) { - best = score; - bestEl.textContent = best; - try { localStorage.setItem("snakeBest", String(best)); } catch (e) {} + updateBest(); + if (beatBest) { newBestEl.textContent = "New best score!"; newBestEl.classList.remove("hidden"); } else { @@ -230,6 +231,17 @@ document.getElementById("restartBtn").focus(); } + // Update and save the best score as soon as it's beaten, so it's kept + // even if the page is closed in the middle of a game. + function updateBest() { + if (score > best) { + best = score; + beatBest = true; + bestEl.textContent = best; + try { localStorage.setItem("snakeBest", String(best)); } catch (e) {} + } + } + function togglePause() { if (state === "playing") { state = "paused";