From ed7dac9b908da425af9889c0eb8820a5eae3d784 Mon Sep 17 00:00:00 2001 From: Emil Kosz Date: Wed, 2 Oct 2024 12:21:29 +0200 Subject: [PATCH] Level progress, game over menu --- doc/ui_sketch_main_mobile.xcf | Bin 603845 -> 603629 bytes game.js | 110 +++++++++++++++++----------- index.html | 22 +++--- main-menu.js | 4 +- particles.js | 0 res/gravedigger/background.png | Bin 0 -> 81295 bytes res/gravedigger/bomb.png | Bin 220 -> 2501 bytes res/gravedigger/coffin.xcf | Bin 0 -> 11518 bytes res/gravedigger/coffin_occupied.xcf | Bin 0 -> 21264 bytes res/gravedigger/coffin_open.xcf | Bin 0 -> 11299 bytes res/gravedigger/explosion.png | Bin 161 -> 2731 bytes res/gravedigger/flagged.png | Bin 153 -> 3202 bytes res/gravedigger/grave.xcf | Bin 0 -> 12923 bytes res/gravedigger/known.png | Bin 200 -> 1924 bytes res/gravedigger/unknown-1.png | Bin 159 -> 2265 bytes res/gravedigger/vampyre.xcf | Bin 0 -> 9876 bytes res/icons/main_menu.xcf | Bin 0 -> 691 bytes res/reveal.wav | Bin 31362 -> 33193 bytes style.css | 70 ++++++++++++++---- 19 files changed, 138 insertions(+), 68 deletions(-) create mode 100644 particles.js create mode 100644 res/gravedigger/background.png create mode 100644 res/gravedigger/coffin.xcf create mode 100644 res/gravedigger/coffin_occupied.xcf create mode 100644 res/gravedigger/coffin_open.xcf create mode 100644 res/gravedigger/grave.xcf create mode 100644 res/gravedigger/vampyre.xcf create mode 100644 res/icons/main_menu.xcf diff --git a/doc/ui_sketch_main_mobile.xcf b/doc/ui_sketch_main_mobile.xcf index 101a925625c16abd08fc8bbb3c76d4f33644d71e..40a2d605a1424aafe0759fe22cc3f6afae8449d3 100644 GIT binary patch delta 13359 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 seconds_elapsed) { - localStorage.setItem(current_level + "-high_score", seconds_elapsed) - } - // Send a message proclaiming we've won. - window.webxdc.sendUpdate({ - payload: {}, - info: window.webxdc.selfName + " finished Level " + current_level + " in " + get_seconds_readable(seconds_elapsed) + "!" - }, window.webxdc.selfName + " won a game of Minesweeper"); - return true; -} - function get_neighbours(cell) { let cells = []; for (let x = cell.x - 1; x <= cell.x + 1; ++x) { @@ -213,9 +194,54 @@ function reveal_mines(cell) { sound_reveal.play(); } +// Shows the game won/over popup. +function show_popup(victory) { + $("#finished-popup").style = "display:flex;"; + $("#restart").style = "display:none"; + $("#newgame").style = "display:none"; + if (!victory) { + $("#nextlevel").style = "display:none"; + $("#message").innerText = "You've lost!" + } else { + $("#nextlevel").style = "display:block"; + $("#message").innerText = "You've won!" + } +} + +function check_victory() { + for (let y = 0; y < field_height; ++y) { + for (let x = 0; x < field_width; ++x) { + let cell = $("#c" + x + "-" + y); + if (cell.classList.contains("unknown") && !(cell.classList.contains("flagged") && cell.classList.contains("mine"))) { + return false; + } + } + } + // If we get here, we've won + game_finished = true; + stop_timing(); + // Set the maximum level to be one higher, meaning the player unlocked the next level. + localStorage.setItem("maximum_level", maximum_level + 1); + show_popup(true); + // Save a high score. + let cur_score = localStorage.getItem(current_level + "-high_score"); + if (cur_score == null) { + localStorage.setItem(current_level + "-high_score", seconds_elapsed) + } else if (parseInt(cur_score) > seconds_elapsed) { + localStorage.setItem(current_level + "-high_score", seconds_elapsed) + } + // Send a message proclaiming we've won. + window.webxdc.sendUpdate({ + payload: {}, + info: window.webxdc.selfName + " finished Level " + current_level + " in " + get_seconds_readable(seconds_elapsed) + "!" + }, window.webxdc.selfName + " won a game of Minesweeper"); + return true; +} + function lose_game() { game_finished = true; stop_timing(); + show_popup(false); $$("#minefield div").forEach(function(cell) { cell.classList.remove("unknown"); cell.classList.add("known"); @@ -224,4 +250,4 @@ function lose_game() { cell.innerText = ""; } }); -} \ No newline at end of file +} diff --git a/index.html b/index.html index 58540df..394a8aa 100644 --- a/index.html +++ b/index.html @@ -13,19 +13,21 @@