diff options
author | Gene Pasquet <dev@etenil.net> | 2024-05-26 08:16:48 +0100 |
---|---|---|
committer | Gene Pasquet <dev@etenil.net> | 2024-05-26 08:16:48 +0100 |
commit | 838ba7744fbc4360722e215d1869784d53febb1c (patch) | |
tree | 8fa018716b9d8495737227a5a2f2eba69eaac6ed | |
parent | 93e9c8bb9fbf4c4ad92f44344cebd594c216e046 (diff) |
Add game winning logic
-rw-r--r-- | TODO.org | 8 | ||||
-rw-r--r-- | turbo.scm | 58 |
2 files changed, 47 insertions, 19 deletions
@@ -16,10 +16,10 @@ ** DONE Add graphical speedometer (look at knight rider) ** DONE Add start menu ** TODO Add help menu to display controls -** TODO Add timer -** TODO Trigger end game when reaching level 21 -*** TODO Add end-game screen -*** TODO Convert timer to points +** DONE Add timer +** DONE Trigger end game when reaching level max +*** DONE Add end-game screen +*** DONE Convert timer to points ** TODO Add weapon to player car *** TODO Make weapon a power-up *** TODO Make weapon use limited (bullet? time?) @@ -41,6 +41,7 @@ (define player-car-deceleration -500) (define player-current-acceleration 0) (define player-distance-travelled 0) +(define player-time-travelled 0) (define (distance-in-miles) (/ player-distance-travelled 12440)) @@ -48,6 +49,7 @@ (* (vehicle-speed player-car) 0.11187)) (define level-difficulty 1) +(define max-level 20) (define music-res (load-audio "music.ogg")) (define music (make-source #:audio music-res #:loop? #t)) @@ -144,7 +146,7 @@ #t)) (define (level-min-speed) - (+ player-min-speed (* (- level-difficulty 1) 18))) + (+ player-min-speed (* (- level-difficulty 1) 36))) (define (set-player-speed! new-speed) (let* ((min-speed (level-min-speed)) @@ -188,6 +190,7 @@ (define (reset-game!) (set! player-distance-travelled 0) + (set! player-time-travelled 0) (set! level-difficulty 1) (set-vehicle-position! player-car initial-player-position) (set-player-speed! (level-min-speed)) @@ -198,6 +201,9 @@ (set! game-over? #f) (set! game-started? #t)) +(define (game-won?) + (and game-started? (> level-difficulty max-level))) + ;;;; Chickadee hooks (set-source-volume! music 0.5) @@ -213,10 +219,14 @@ (set! player-distance-travelled (+ player-distance-travelled (* interval (vehicle-speed player-car)))) + (set! player-time-travelled (+ player-time-travelled interval)) ;; Increase level every 2 miles - (when (and (< level-difficulty 20) (> (distance-in-miles) (* 2 level-difficulty))) - (set! level-difficulty (+ 1 level-difficulty))) + (when (and (< level-difficulty max-level) (> (distance-in-miles) (* 2 level-difficulty))) + (set! level-difficulty (+ 1 level-difficulty))) + + (if (game-won?) + (set! game-over? #t)) (let ((new-speed (+ (vehicle-speed player-car) (* player-current-acceleration interval)))) @@ -245,7 +255,7 @@ (for-each vehicle-reset-ahead (filter vehicle-off-screen? vehicles)) ;; Randomly respawn vehicles based on level difficulty - (let ((challenge (- (round (/ 200 level-difficulty)) 9))) + (let ((challenge (- (round (/ (* max-level 10) level-difficulty)) 9))) (when (= 0 (random challenge)) (let* ((inactive-vehicles (filter vehicle-inactive? vehicles)) (spawnable-vehicles (filter vehicle-has-spawn-space? inactive-vehicles))) @@ -358,22 +368,39 @@ #:font the-font #:scale (vec2 2 2)) - (draw-sprite dash-7seg-background - (vec2 20 0) - #:scale (vec2 0.5 1)) - (draw-text (format #f "~s" level-difficulty) - (vec2 20.0 20.0) + (draw-sprite dash-7seg-background (vec2 20 0)) + (draw-sprite dash-7seg-background (vec2 72 0)) + (draw-text (format #f "~5,1,,,'0f" player-time-travelled) + (vec2 25 20) #:font font-7-segments #:color red) - (draw-text "LVL" - (vec2 60.0 12.0) + (draw-text "TIME" + (vec2 142 12) #:font the-font #:scale (vec2 2 2)) (if game-over? - (draw-text "GAME OVER" (vec2 260 (/ (window-width (current-window)) 2)) - #:font the-font - #:scale (vec2 2 2)))) + (if (game-won?) + (let ((player-score (+ 10000 (* (- 900 player-time-travelled) 1000)))) + (draw-text "THE END" (vec2 260 (/ (window-width (current-window)) 2)) + #:font the-font + #:scale (vec2 2 2)) + (draw-text (format #f "SCORE: ~,0f" player-score) + (vec2 200 (- (/ (window-width (current-window)) 2) 25)) + #:font the-font + #:scale (vec2 2 2)) + (draw-text "TRY AGAIN" (vec2 230 (- (/ (window-width (current-window)) 2) 100)) + #:font the-font + #:scale (vec2 2 2) + #:color yellow)) + (begin + (draw-text "GAME OVER" (vec2 260 (/ (window-width (current-window)) 2)) + #:font the-font + #:scale (vec2 2 2)) + (draw-text "TRY AGAIN" (vec2 260 (- (/ (window-width (current-window)) 2) 25)) + #:font the-font + #:scale (vec2 2 2) + #:color yellow))))) (define (key-press key modifiers repeat?) @@ -391,7 +418,8 @@ ((or (eq? key 'a) (eq? key 'left)) (set! player-current-acceleration player-car-deceleration)) ((eq? key 'escape) - (set! game-started? #f)) + (set! game-over? #f) + (set! game-started? #f)) ((and (eq? key 'return) game-over?) (reset-game!)) ((and (eq? key 'return) (not game-started?)) |