From 5160d65741662dc86286edc2d39e4fa33e1380c2 Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Sun, 19 May 2024 10:28:36 +0100 Subject: Let the user crash out of the road --- TODO.org | 13 +++++++++++++ turbo.scm | 53 +++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 TODO.org diff --git a/TODO.org b/TODO.org new file mode 100644 index 0000000..69d8e4a --- /dev/null +++ b/TODO.org @@ -0,0 +1,13 @@ +* Stuff left to do + +** TODO Detect when player leaves the road +** TODO Add non-player cars onto the road +** TODO Detect collision with other vehicles +** TODO Add weapon to player car +*** TODO Make weapon a power-up +*** TODO Make weapon use limited (bullet? time?) +** TODO Add graphical speedometer (look at knight rider) +** TODO Improve visuals +** TODO Add start menu +** TODO Add music +** TODO Add sound effects diff --git a/turbo.scm b/turbo.scm index 47f9265..eb7f656 100644 --- a/turbo.scm +++ b/turbo.scm @@ -11,11 +11,13 @@ (define road-start-y 80) (define road-section-position 0) (define road (load-tileset "road.png" lane-length lane-height)) -(define grass (load-image "grass.png")) -(define grass-height 96) +(define road-num-lanes 5) +(define road-end-y (+ road-start-y (* road-num-lanes lane-height))) (define road-top (texture-atlas-ref road 2)) (define road-bottom (texture-atlas-ref road 0)) (define road-lane (texture-atlas-ref road 1)) +(define grass (load-image "grass.png")) +(define grass-height 96) (define vehicle-height 45) (define vehicle-length 100) @@ -28,7 +30,7 @@ (define player-max-speed 20) (define player-speed player-min-speed) -(define load-complete #f) +(define game-over #f) ;;;; Game functions @@ -66,25 +68,56 @@ (+ (lane-y 3) (/ (- lane-height vehicle-height) 2)))) +(define player-rotation 0) + +(define (player-on-road?) + (and (> (vec2-y player-position) road-start-y) + (< (+ (vec2-y player-position) vehicle-height) road-end-y))) + +(define (off-road-player-top) + (set! player-rotation 1) + (set! player-position (vec2+ player-position (vec2 0 30))) + (set! player-speed 0)) +(define (off-road-player-bottom) + (set! player-rotation -1) + (set! player-position (vec2+ player-position (vec2 0 -10))) + (set! player-speed 0)) + +(define (off-road-player) + "Moves the player off-road" + (if (> (vec2-y player-position) road-start-y) + (off-road-player-top) + (off-road-player-bottom))) + ;;;; Chickadee hooks (define (update interval) - (set! road-section-position - (if (< road-section-position (* lane-length -1)) - (- (+ road-section-position lane-length) player-speed) - (- road-section-position player-speed))) + (if (not game-over) + (begin + (if (not (player-on-road?)) + (begin + (off-road-player) + (set! game-over #t))) - (set! player-position (vec2+ player-position player-velocity))) + (set! road-section-position + (if (< road-section-position (* lane-length -1)) + (- (+ road-section-position lane-length) player-speed) + (- road-section-position player-speed))) + + (set! player-position (vec2+ player-position player-velocity))))) (define (draw alpha) - (draw-road road-section-position road-start-y 5) + (draw-road road-section-position road-start-y road-num-lanes) (draw-text "Turbo Racers!" (vec2 260.0 (- (window-height (current-window)) 25))) (draw-text (format #f "Speed: ~smph" (* player-speed 5)) (vec2 450.0 20.0)) - (draw-sprite player-car player-position)) + (draw-sprite player-car player-position #:rotation player-rotation) + + (if game-over + (draw-text "GAME OVER" (vec2 260 (/ (window-width (current-window)) 2))))) -- cgit v1.2.3