diff options
Diffstat (limited to 'turbo.scm')
-rw-r--r-- | turbo.scm | 56 |
1 files changed, 48 insertions, 8 deletions
@@ -10,6 +10,7 @@ ;;;; Constants and variables (define the-font (load-bitmap-font "thick_8x8.xml")) +(define font-7-segments (load-font "DSEG7Classic-Regular.ttf" 24)) (define lane-height 65) (define lane-length 192) @@ -22,6 +23,10 @@ (define road-bottom (texture-atlas-ref road 0)) (define road-lane (texture-atlas-ref road 1)) (define grass (load-image "grass.png")) +(define dashboard-set (load-tileset "dash-background.png" 64 64)) +(define dash-background (texture-atlas-ref dashboard-set 0)) +(define dash-7seg-background (texture-atlas-ref dashboard-set 1)) + (define grass-height 96) (define vehicles-sprites (load-tileset "vehicles.png" vehicle-length vehicle-height)) @@ -36,6 +41,11 @@ (define player-car-deceleration -500) (define player-current-acceleration 0) (define player-distance-travelled 0) +(define (distance-in-miles) + (/ player-distance-travelled 12440)) + +(define (speed-in-mph) + (* (vehicle-speed player-car) 0.11187)) (define level-difficulty 1) @@ -118,7 +128,7 @@ (* lane-height (- num-lane 1)))) (define initial-player-position - (vec2 (/ (- (window-width (current-window)) vehicle-length) 4) + (vec2 (/ (- (window-width (current-window)) vehicle-length) 6) (+ (lane-y 3) (/ (- lane-height vehicle-height) 2)))) @@ -188,6 +198,10 @@ (set! player-distance-travelled (+ player-distance-travelled (* interval (vehicle-speed player-car)))) + ;; Increase level every 2 miles + (when (and (< level-difficulty 20) (> (distance-in-miles) (* 2 level-difficulty))) + (set! level-difficulty (+ 1 level-difficulty))) + (let ((new-speed (+ (vehicle-speed player-car) (* player-current-acceleration interval)))) (set-vehicle-speed! player-car (min player-max-speed @@ -215,7 +229,7 @@ (for-each vehicle-reset-ahead (filter vehicle-off-screen? vehicles)) ;; Randomly respawn vehicles based on level difficulty - (let ((challenge (- (/ 200 level-difficulty) 9))) + (let ((challenge (- (round (/ 200 level-difficulty)) 9))) (when (= 0 (random challenge)) (let* ((inactive-vehicles (filter vehicle-inactive? vehicles)) (spawnable-vehicles (filter vehicle-has-spawn-space? inactive-vehicles))) @@ -240,18 +254,42 @@ (draw-sprite (vehicle-sprite veh) (vehicle-position veh))) (filter vehicle-active? vehicles)) - (draw-text (format #f "Distance: ~1,1fmi" (/ player-distance-travelled 12440)) - (vec2 30.0 (- (window-height (current-window)) 25)) + (let loop ((index 0)) + (draw-sprite dash-background (vec2 index 0)) + (when (< (+ index (texture-width dash-background)) (window-width (current-window))) + (loop (+ index (texture-width dash-background))))) + + (draw-sprite dash-7seg-background (vec2 270 0)) + (draw-sprite dash-7seg-background (vec2 324 0)) + (draw-text (format #f "~5,1,,,'0f" (distance-in-miles)) + (vec2 275 20) + #:font font-7-segments + #:color red) + (draw-text "MI" + (vec2 395 12) #:font the-font #:scale (vec2 2 2)) - (draw-text (format #f "Speed: ~smph" (round (* (vehicle-speed player-car) 0.11187))) - (vec2 400.0 20.0) + (draw-sprite dash-7seg-background (vec2 450 0)) + (draw-sprite dash-7seg-background (vec2 503 0)) + (draw-text (format #f "~5,1,,,'0f" (speed-in-mph)) + (vec2 455.0 20.0) + #:font font-7-segments + #:color red) + (draw-text "MPH" + (vec2 570 12) #:font the-font #:scale (vec2 2 2)) - (draw-text (format #f "Level: ~s" level-difficulty) - (vec2 30.0 20.0) + (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) + #:font font-7-segments + #:color red) + (draw-text "LVL" + (vec2 60.0 12.0) #:font the-font #:scale (vec2 2 2)) @@ -274,6 +312,8 @@ ((eq? key 'escape) (abort-game)) ((and (eq? key 'return) game-over) + (set! player-distance-travelled 0) + (set! level-difficulty 1) (set-vehicle-position! player-car initial-player-position) (set-player-speed! (level-min-speed)) (set! player-rotation 0) |