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";