(require :L5) (fn setup [] (size 640 480) (textSize 100)) (local colors { :yellow [255 228 112] ; #ffe470 :dark [64 56 48] ; #403830 }) (lambda remap [v in-min in-max out-min out-max] (+ out-min (* (/ (- v in-min) (- in-max in-min)) (- out-max out-min)))) (local steps (* 24 60)) (var step 0) (lambda lpad [num] (if (< num 10) (.. "0" num) num)) (lambda time [num] (let [hour (floor (remap num 0 steps 0 24)) min (- num (* hour 60))] (.. (lpad hour) ":" (lpad min)))) (var pause false) (var won false) (fn key-pressed [] (when (= key "space") (set pause (not pause)))) (local goal-time (floor (random 0 steps))) (fn draw [] (when (and (not won) (not pause)) (set step (+ step 1))) (when (>= step steps) (set step 0)) (let [ half (/ steps 2) color-step (if (> step half) (- half (- step half)) step) color-fn #(+ (. colors.dark $1) (* (/ (- (. colors.yellow $1) (. colors.dark $1)) half) color-step)) r (color-fn 1) g (color-fn 2) b (color-fn 3)] (background r g b)) (text (time step) 175 150) (text (time goal-time) 175 250) (when (and pause (= goal-time step)) (set won true)) (when won (text "YOU WIN" 100 400))) { :setup setup :draw draw :key-pressed key-pressed }