From 15a0c60a687619c16759f2b62efe51912f5a3a43 Mon Sep 17 00:00:00 2001 From: Stephanie Gredell Date: Thu, 12 Jun 2025 10:32:48 -0700 Subject: [PATCH] create play route, render requirements for level --- main.go | 35 +++++++++++++++++++++++++++++++++ static/game.html | 50 ++++++++++++++++++++++++++++++++---------------- 2 files changed, 68 insertions(+), 17 deletions(-) diff --git a/main.go b/main.go index ff8b3d5..c83d630 100644 --- a/main.go +++ b/main.go @@ -2,10 +2,13 @@ package main import ( "context" + "fmt" "html/template" "net/http" + "net/url" "os" "os/signal" + "strings" "systemdesigngame/internals/level" "time" ) @@ -17,11 +20,18 @@ func main() { mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) mux.HandleFunc("/", index) mux.HandleFunc("/game", game) + mux.HandleFunc("/play/", play) srv := &http.Server{ Addr: ":8080", Handler: mux, } + levels, err := level.LoadLevels("data/levels.json") + if err != nil { + panic("failed to load levels: " + err.Error()) + } + level.InitRegistry(levels) + ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) defer stop() @@ -62,3 +72,28 @@ func game(w http.ResponseWriter, r *http.Request) { } tmpl.ExecuteTemplate(w, "game.html", data) } + +func play(w http.ResponseWriter, r *http.Request) { + levelName := r.URL.Path[len("/play/"):] + levelName, err := url.PathUnescape(levelName) + if err != nil { + http.Error(w, "Invalid level name", http.StatusBadRequest) + return + } + + lvl, err := level.GetLevel(strings.ToLower(levelName), level.DifficultyEasy) + if err != nil { + http.Error(w, "Level not found"+err.Error(), http.StatusNotFound) + return + } + allLevels := level.AllLevels() + data := struct { + Levels []level.Level + Level *level.Level + }{ + Levels: allLevels, + Level: lvl, + } + + tmpl.ExecuteTemplate(w, "game.html", data) +} diff --git a/static/game.html b/static/game.html index 1089f3e..1dfe9b9 100644 --- a/static/game.html +++ b/static/game.html @@ -550,7 +550,7 @@