aboutsummaryrefslogtreecommitdiff
path: root/turbo.scm
diff options
context:
space:
mode:
Diffstat (limited to 'turbo.scm')
-rw-r--r--turbo.scm56
1 files changed, 48 insertions, 8 deletions
diff --git a/turbo.scm b/turbo.scm
index 09b9d4c..c28f508 100644
--- a/turbo.scm
+++ b/turbo.scm
@@ -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)