From 0904eede9580ba6bfa1ace98c9a8171225cde1f9 Mon Sep 17 00:00:00 2001 From: csd4ni3l Date: Sun, 2 Nov 2025 21:23:09 +0100 Subject: [PATCH] Add whack a pumpkin and best score, move games to game_info and setup_game, make a modular basegame template and build upon that, fix game settings not using the current game specific settings --- app.py | 5 ++ static/graphics/whackapumpkin.png | Bin 0 -> 14068 bytes static/js/game.js | 12 ++-- static/js/pumpkin_memory.js | 20 +++--- static/js/pumpkin_roll.js | 47 ++++++------ static/js/whack_a_pumpkin.js | 114 ++++++++++++++++++++++++++++++ templates/countdown.jinja2 | 3 + templates/gamebase.jinja2 | 34 +++++++++ templates/index.jinja2 | 3 + templates/profile.jinja2 | 21 ++++-- templates/pumpkin_memory.jinja2 | 35 ++------- templates/pumpkin_roll.jinja2 | 36 ++-------- templates/whack_a_pumpkin.jinja2 | 17 +++++ 13 files changed, 245 insertions(+), 102 deletions(-) create mode 100644 static/graphics/whackapumpkin.png create mode 100644 static/js/whack_a_pumpkin.js create mode 100644 templates/gamebase.jinja2 create mode 100644 templates/whack_a_pumpkin.jinja2 diff --git a/app.py b/app.py index ac87c3f..e475d54 100644 --- a/app.py +++ b/app.py @@ -261,4 +261,9 @@ def pumpkin_memory(): def pumpkin_roll(): return render_template("pumpkin_roll.jinja2") +@app.route("/whack_a_pumpkin") +@login_required +def whack_a_pumpkin(): + return render_template("whack_a_pumpkin.jinja2") + app.run(host=os.getenv("HOST", "0.0.0.0"), port=int(os.getenv("PORT", 8080)), debug=os.getenv("DEBUG_MODE", False).lower() == "true") \ No newline at end of file diff --git a/static/graphics/whackapumpkin.png b/static/graphics/whackapumpkin.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3776c2adeeaaa900a6f526f472eda06ace00c8 GIT binary patch literal 14068 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 literal 0 HcmV?d00001 diff --git a/static/js/game.js b/static/js/game.js index f74848b..ccedfa2 100644 --- a/static/js/game.js +++ b/static/js/game.js @@ -66,15 +66,17 @@ function show_settings(category, GAME_TITLE, SETTINGS) { } function start_game() { + const [GAME_TITLE, SETTINGS] = game_info(); + kaplay( { width: WIDTH, height: HEIGHT, canvas: document.getElementById("canvas"), root: document.getElementById("game-container"), - crisp: !localStorage.getItem("Anti-Alasing"), - texFilter: (localStorage.getItem("Texture Filtering") || "nearest").toLowerCase(), - maxFPS: Number(localStorage.getItem("FPS Limit")), + crisp: !localStorage.getItem(`${GAME_TITLE} Anti-Aliasing`), + texFilter: (localStorage.getItem(`${GAME_TITLE} Texture Filtering`) || "nearest").toLowerCase(), + maxFPS: Number(localStorage.getItem(`${GAME_TITLE} FPS Limit`)), font: "New Rocker", background: "#e18888", buttons: { @@ -90,8 +92,8 @@ function start_game() { } ); - const [GAME_TITLE, SETTINGS] = setup_game(); - + setup_game(); + scene("settings", (setting_category) => { let generated_button_lists = Object.entries(SETTINGS).map(([key, value]) => [key, color(127, 127, 127), color(0, 0, 0, 0), scene_lambda("settings", key)]); generated_button_lists = [["Back", color(127, 127, 127), color(0, 0, 0, 0), scene_lambda("main_menu")]].concat(generated_button_lists); diff --git a/static/js/pumpkin_memory.js b/static/js/pumpkin_memory.js index 3b2d919..3be5b40 100644 --- a/static/js/pumpkin_memory.js +++ b/static/js/pumpkin_memory.js @@ -1,5 +1,4 @@ -function setup_game() { - loadSprite("pumpkin", "/static/graphics/pumpkin.png"); +function game_info() { const SETTINGS = { "Graphics": { "Anti-Aliasing": {"type": "bool", "default": "true"}, @@ -13,6 +12,12 @@ function setup_game() { "SFX Volume": {"type": "slider", "min": 0, "max": 100, "default": 50}, }, }; + + return ["Pumpkin Memory", SETTINGS]; +} + +function setup_game() { + loadSprite("pumpkin", "/static/graphics/pumpkin.png"); scene("game", (difficulty, pumpkin_array, revealed, found_pairs, start) => { create_button(5, 5, 150, 75, "Back", color(127, 127, 127), color(0, 0, 0, 0), scene_lambda("main_menu")) @@ -71,7 +76,7 @@ function setup_game() { const best_time_display = (best_time == 99999) ? "None" : `${best_time}s`; const elapsed = performance.now() - start; - const timer_label = create_label(520, 5, `Time spent: ${(elapsed / 1000).toFixed(1)}s Best Time: ${best_time_display}`); + const timer_label = create_label(400, 5, `Time spent: ${(elapsed / 1000).toFixed(1)}s Best Time: ${best_time_display}`); const timer_interval_id = setInterval(() => { const elapsed = performance.now() - start; @@ -88,8 +93,9 @@ function setup_game() { best_time = (elapsed / 1000).toFixed(1); } localStorage.setItem(`memory_best_${difficulty}`, best_time); - - create_label(520, 320, `You win!\nTime took: ${(elapsed / 1000).toFixed(1)} s Best Time: ${best_time_display}`, 48); + + const best_time_display = (best_time == 99999) ? "None" : `${best_time}s`; + create_label(520, 320, `You win!\nTime took: ${(elapsed / 1000).toFixed(1)} s\nBest Time: ${best_time_display}`, 48); return; } @@ -102,7 +108,7 @@ function setup_game() { const sprite = create_sprite(start_x + col * (pumpkin_size + space_between), start_y + row * (pumpkin_size + space_between), "pumpkin"); sprite.scale = 1; tween(sprite.scale, 0, 0.2, (val) => sprite.scale = val).then(() => { - create_label(start_x + col * (pumpkin_size + space_between) + pumpkin_size / 2, start_y + row * (pumpkin_size + space_between) + pumpkin_size / 2, arr[i], 24); + create_label(start_x + col * (pumpkin_size + space_between) + pumpkin_size / 3, start_y + row * (pumpkin_size + space_between) + pumpkin_size / 2, arr[i], 24); tween(sprite.scale, 1, 0.2, (val) => sprite.scale = val).then(() => { wait(0.5, () => { if (found_pair == null) { @@ -140,6 +146,4 @@ function setup_game() { ["Extra Hard", color(127, 127, 127), color(0, 0, 0, 0), scene_lambda("game", "extrahard")] ], WIDTH / 2, HEIGHT / 8, HEIGHT / 50) }); - - return ["Pumpkin Memory", SETTINGS]; } \ No newline at end of file diff --git a/static/js/pumpkin_roll.js b/static/js/pumpkin_roll.js index 78dcc8a..01b45bc 100644 --- a/static/js/pumpkin_roll.js +++ b/static/js/pumpkin_roll.js @@ -1,3 +1,24 @@ +function game_info() { + const SETTINGS = { + "Graphics": { + "Anti-Aliasing": {"type": "bool", "default": "true"}, + "Texture Filtering": {"type": "option", "options": ["Nearest", "Linear"], "default": "Linear"}, + "FPS Limit": {"type": "slider", "min": 0, "max": 480, "default": 60}, + }, + "Sound": { + "Music": {"type": "bool", "default": "true"}, + "SFX": {"type": "bool", "default": "true"}, + "Music Volume": {"type": "slider", "min": 0, "max": 100, "default": 50}, + "SFX Volume": {"type": "slider", "min": 0, "max": 100, "default": 50}, + }, + "Input": { + "Controller Enabled": {"type": "bool", "default": "true"} + } + }; + + return ["Pumpkin Roll", SETTINGS]; +} + function spawn_enemy(enemy_type) { let enemy_width; let enemy_height; @@ -38,39 +59,19 @@ function setup_game() { loadSprite("tombstone", "/static/graphics/tombstone.png"); loadSprite("bird", "/static/graphics/bird.png"); - const SETTINGS = { - "Graphics": { - "Anti-Aliasing": {"type": "bool", "default": "true"}, - "Texture Filtering": {"type": "option", "options": ["Nearest", "Linear"], "default": "Linear"}, - "FPS Limit": {"type": "slider", "min": 0, "max": 480, "default": 60}, - }, - "Sound": { - "Music": {"type": "bool", "default": "true"}, - "SFX": {"type": "bool", "default": "true"}, - "Music Volume": {"type": "slider", "min": 0, "max": 100, "default": 50}, - "SFX Volume": {"type": "slider", "min": 0, "max": 100, "default": 50}, - }, - "Input": { - "Controller Enabled": {"type": "bool", "default": "true"} - } - }; const GRAVITY = 2500; const JUMP_VELOCITY = -1200; const GROUND_Y = 670; scene("play", () => { let score = 0; - let high_score = localStorage.getItem("pumpkin_roll_highscore"); + let high_score = Number(localStorage.getItem("pumpkin_roll_highscore")); let game_over = false; let enemies = []; let last_enemy_spawn = performance.now(); const score_label = create_label(480, 10, `Score: ${score} High Score: ${high_score}`); - - if (high_score == null) { - high_score = 0; - } - + let pumpkin_sprite = add([ sprite("pumpkin"), pos(50, 670), @@ -157,6 +158,4 @@ function setup_game() { } }); }) - - return ["Pumpkin Roll", SETTINGS]; } \ No newline at end of file diff --git a/static/js/whack_a_pumpkin.js b/static/js/whack_a_pumpkin.js new file mode 100644 index 0000000..5ba2392 --- /dev/null +++ b/static/js/whack_a_pumpkin.js @@ -0,0 +1,114 @@ +function game_info() { + const SETTINGS = { + "Graphics": { + "Anti-Aliasing": {"type": "bool", "default": "true"}, + "Texture Filtering": {"type": "option", "options": ["Nearest", "Linear"], "default": "Linear"}, + "FPS Limit": {"type": "slider", "min": 0, "max": 480, "default": 60}, + }, + "Sound": { + "Music": {"type": "bool", "default": "true"}, + "SFX": {"type": "bool", "default": "true"}, + "Music Volume": {"type": "slider", "min": 0, "max": 100, "default": 50}, + "SFX Volume": {"type": "slider", "min": 0, "max": 100, "default": 50}, + } + }; + + return ["Whack a Pumpkin", SETTINGS]; +} + +function spawn_pumpkin(pumpkin_spaces, used_slots) { + const free_slots = pumpkin_spaces.filter((_, i) => !used_slots.has(i)); + const random_index = Math.floor(Math.random() * free_slots.length); + const [x, y] = free_slots[random_index]; + + const pumpkin_sprite = add([ + sprite("pumpkin"), + pos(x, y), + area(), + "pumpkin" + ]) + + setInterval(() => { + destroy(pumpkin_sprite); + }, 600); + + return pumpkin_sprite; +} + +function setup_game() { + loadSprite("bg", "/static/graphics/whackapumpkin.png"); + loadSprite("pumpkin", "/static/graphics/pumpkin.png"); + + const pumpkin_spaces = [ + [480, 12000], + [615, 12000], + [750, 12000], + + [480, 420], + [615, 420], + [750, 420], + + [480, 540], + [615, 540], + [750, 540], + ]; + + scene("play", () => { + const pumpkins = []; + const used_slots = new Set(); + const start = performance.now(); + + let game_over = false; + let score = 0; + let high_score = Number(localStorage.getItem("whackapumpkin_high_score")); + + const bg = add([ + sprite("bg"), + pos(420, 15), + scale(0.85) + ]); + + create_button(5, 5, 150, 75, "Back", color(127, 127, 127), color(0, 0, 0, 0), scene_lambda("main_menu")) + const info_label = create_label(525, 50, `Time left: 120s\nScore: ${score}\nHigh Score: ${high_score}`); + + function spawn_pumpkins() { + pumpkins.push(spawn_pumpkin(pumpkin_spaces, used_slots)); + if (!game_over) { + setTimeout(spawn_pumpkins, Math.random() * 1500); + } + } + + setTimeout(spawn_pumpkins, Math.random() * 1500); + + onClick("pumpkin", (pumpkin) => { + destroy(pumpkin); + + score += 1; + if (score > high_score) { + high_score = score; + localStorage.setItem("whackapumpkin_high_score", high_score); + } + }) + + bg.onUpdate(() => { + const elapsed = performance.now() - start; + + if ((elapsed / 1000) >= 120) { + create_label(520, 12020, `Game Over!\nScore: ${score}\nHigh Score: ${high_score}`, 48); + + game_over = true; + + for (const pumpkin of pumpkins) { + destroy(pumpkin); + } + + destroy(bg); + destroy(info_label); + } + else { + info_label.text = `Time left: ${(120 - (elapsed / 1000)).toFixed(1)}s\nScore: ${score}\nHigh Score: ${high_score}`; + } + + }) + }); +} \ No newline at end of file diff --git a/templates/countdown.jinja2 b/templates/countdown.jinja2 index 26e0339..ff12604 100644 --- a/templates/countdown.jinja2 +++ b/templates/countdown.jinja2 @@ -13,6 +13,9 @@ + diff --git a/templates/gamebase.jinja2 b/templates/gamebase.jinja2 new file mode 100644 index 0000000..c00f68b --- /dev/null +++ b/templates/gamebase.jinja2 @@ -0,0 +1,34 @@ +{% extends "base.jinja2" %} + +{% block nav %} + +{% block gamenav %}{% endblock %} + + + +{% endblock %} + +{% block body %} +
+

WIP!!! Not part of this week!!

+
+ +
+
+ + +{% block game_js %}{% endblock %} + +{% endblock %} \ No newline at end of file diff --git a/templates/index.jinja2 b/templates/index.jinja2 index 137df96..b383cad 100644 --- a/templates/index.jinja2 +++ b/templates/index.jinja2 @@ -12,6 +12,9 @@ + diff --git a/templates/profile.jinja2 b/templates/profile.jinja2 index 9da213a..51fbdcc 100644 --- a/templates/profile.jinja2 +++ b/templates/profile.jinja2 @@ -12,6 +12,9 @@ + @@ -33,6 +36,7 @@ {% if logged_in_account %}

Logged in as: {{ username }}

Pumpkin Roll High Score: Loading...

+

Whack a Pumpkin High Score: Loading...

Pumpkin Memory (Easy) Best Time: Loading...

Pumpkin Memory (Medium) Best Time: Loading...

Pumpkin Memory (Hard) Best Time: Loading...

@@ -101,15 +105,22 @@ setup_pumpkin("current_pumpkin_canvas", "currentclearBtn", "currentlightBtn", "change_pattern_form", "current_pattern_field", {{ grid_size }}); setup_pumpkin("new_pumpkin_canvas", "newclearBtn", "newlightBtn", "change_pattern_form", "new_pattern_field", {{ grid_size }}); +function formatTime(time) { + return time !== "None" ? `${time}s` : time; +} + pumpkin_roll_highscore = localStorage.getItem("pumpkin_roll_highscore") || "None" +whackapumpkin_highscore = localStorage.getItem("whackapumpkin_highscore") || "None" memory_best_easy = localStorage.getItem("memory_best_easy") || "None" memory_best_medium = localStorage.getItem("memory_best_medium") || "None" memory_best_hard = localStorage.getItem("memory_best_hard") || "None" memory_best_extrahard = localStorage.getItem("memory_best_extrahard") || "None" -document.getElementById("pumpkin_roll_highscore").textContent = `Pumpkin Roll High Score: ${pumpkin_roll_highscore}` -document.getElementById("memory_best_easy").textContent = `Pumpkin Memory (Easy) Best Time: ${memory_best_easy}` -document.getElementById("memory_best_medium").textContent = `Pumpkin Memory (Medium) Best Time: ${memory_best_medium}` -document.getElementById("memory_best_hard").textContent = `Pumpkin Memory (Hard) Best Time: ${memory_best_hard}` -document.getElementById("memory_best_extrahard").textContent = `Pumpkin Memory (Extra Hard) Best Time: ${memory_best_extrahard}` + +document.getElementById("pumpkin_roll_highscore").textContent = `Pumpkin Roll High Score: ${formatTime(pumpkin_roll_highscore)}`; +document.getElementById("whackapumpkin_highscore").textContent = `Whack a Pumpkin High Score: ${formatTime(whackapumpkin_highscore)}`; +document.getElementById("memory_best_easy").textContent = `Pumpkin Memory (Easy) Best Time: ${formatTime(memory_best_easy)}`; +document.getElementById("memory_best_medium").textContent = `Pumpkin Memory (Medium) Best Time: ${formatTime(memory_best_medium)}`; +document.getElementById("memory_best_hard").textContent = `Pumpkin Memory (Hard) Best Time: ${formatTime(memory_best_hard)}`; +document.getElementById("memory_best_extrahard").textContent = `Pumpkin Memory (Extra Hard) Best Time: ${formatTime(memory_best_extrahard)}`; {% endblock body %} \ No newline at end of file diff --git a/templates/pumpkin_memory.jinja2 b/templates/pumpkin_memory.jinja2 index 42ec8fe..710bc5e 100644 --- a/templates/pumpkin_memory.jinja2 +++ b/templates/pumpkin_memory.jinja2 @@ -1,11 +1,6 @@ -{% extends "base.jinja2" %} +{% extends "gamebase.jinja2" %} -{% block title %}Pumpkin Memory{% endblock title %} - -{% block nav %} - +{% block gamenav %} @@ -13,30 +8,10 @@ Pumpkin Memory - - {% endblock %} -{% block body %} +{% block title %}Pumpkin Memory{% endblock title %} -
-

WIP!!! Not part of this week!!

-
- -
-
- - - - -{% endblock %} \ No newline at end of file +{% block game_js %}{% endblock %} \ No newline at end of file diff --git a/templates/pumpkin_roll.jinja2 b/templates/pumpkin_roll.jinja2 index 298f537..d5ac688 100644 --- a/templates/pumpkin_roll.jinja2 +++ b/templates/pumpkin_roll.jinja2 @@ -1,11 +1,6 @@ -{% extends "base.jinja2" %} +{% extends "gamebase.jinja2" %} -{% block title %}Pumpkin Roll{% endblock title %} - -{% block nav %} - +{% block gamenav %} @@ -13,29 +8,10 @@ Pumpkin Memory - - {% endblock %} -{% block body %} -
-

WIP!!! Not part of this week!!

-
- -
-
- - - - -{% endblock %} \ No newline at end of file +{% block title %}Pumpkin Roll{% endblock title %} + +{% block game_js %}{% endblock %} \ No newline at end of file diff --git a/templates/whack_a_pumpkin.jinja2 b/templates/whack_a_pumpkin.jinja2 new file mode 100644 index 0000000..330e933 --- /dev/null +++ b/templates/whack_a_pumpkin.jinja2 @@ -0,0 +1,17 @@ +{% extends "gamebase.jinja2" %} + +{% block gamenav %} + + + +{% endblock %} + +{% block title %}Whack a Pumpkin{% endblock title %} + +{% block game_js %}{% endblock %} \ No newline at end of file