diff options
author | Gene Pasquet <dev@etenil.net> | 2024-05-23 19:55:04 +0100 |
---|---|---|
committer | Gene Pasquet <dev@etenil.net> | 2024-05-23 19:55:04 +0100 |
commit | 8987818800c434a452fdc427efdc45f7e2cbbfb4 (patch) | |
tree | f355d8d4abcee1ea0d75461dd88a2a9f4579f588 | |
parent | 5f9856cdda5ce1c88494b658425dd50bd53967ca (diff) |
Tweaks to difficulty and speeds
-rw-r--r-- | TODO.org | 3 | ||||
-rw-r--r-- | turbo.scm | 135 |
2 files changed, 69 insertions, 69 deletions
@@ -10,8 +10,9 @@ ** DONE Make cars in different lanes drive at different speeds ** DONE Add restart option ** DONE Smooth acceleration +** TODO Measure traveled distance ** TODO Smooth increasing turn rate -** TODO Display level on screen +** STARTED Display level on screen ** TODO Add weapon to player car *** TODO Make weapon a power-up *** TODO Make weapon use limited (bullet? time?) @@ -28,7 +28,7 @@ (define player-velocity (vec2 0 0)) (define player-min-speed 250) -(define player-max-speed 2000) +(define player-max-speed 1072) (define player-rotation 0) ;; 2px/s/s acceleration (define player-car-acceleration 100) @@ -38,7 +38,6 @@ (define level-difficulty 1) -(define music-play? #t) (define music-res (load-audio "music.ogg")) (define music (make-source #:audio music-res #:loop? #t)) (define engine-res (load-audio "engine-loop-1.ogg")) @@ -68,7 +67,7 @@ (let ((lane-num (random road-num-lanes))) (set-vehicle-position! veh (calculate-vehicle-position (+ 1 lane-num))) - (set-vehicle-speed! veh (+ player-min-speed (* 25 lane-num)) ) + (set-vehicle-speed! veh (+ player-min-speed (* 75 lane-num)) ) (set-vehicle-active! veh #f))) (define vehicles (make-vehicle-list (list) 0)) @@ -91,10 +90,9 @@ ;;;; Game functions (define (draw-lanes x y num-lanes) - (if (> num-lanes 0) - (begin - (draw-sprite road-lane (vec2 x y)) - (draw-lanes x (+ lane-height y) (- num-lanes 1))))) + (when (> num-lanes 0) + (draw-sprite road-lane (vec2 x y)) + (draw-lanes x (+ lane-height y) (- num-lanes 1)))) (define (draw-road-section startx starty num-lanes) (draw-sprite road-bottom (vec2 startx starty)) @@ -108,12 +106,11 @@ (draw-sprite grass (vec2 x y))) (define (draw-road startx starty num-lanes) - (if (< startx (window-width (current-window))) - (begin - (draw-grass-down startx starty) - (draw-road-section startx starty num-lanes) - (draw-road (+ startx lane-length) starty num-lanes) - (draw-grass-up startx (+ starty (* lane-height num-lanes)))))) + (when (< startx (window-width (current-window))) + (draw-grass-down startx starty) + (draw-road-section startx starty num-lanes) + (draw-road (+ startx lane-length) starty num-lanes) + (draw-grass-up startx (+ starty (* lane-height num-lanes))))) (define (lane-y num-lane) (+ road-start-y @@ -131,11 +128,13 @@ (+ 1 player-min-speed) #t)) +(define (level-min-speed) + (+ player-min-speed (* (- level-difficulty 1) 18))) + (define (set-player-speed! new-speed) - (let* ((player-speed (max (min new-speed player-max-speed) player-min-speed)) - (pitch-factor (* 0.10 - (- player-speed - player-min-speed)))) + (let* ((min-speed (level-min-speed)) + (player-speed (max (min new-speed player-max-speed) min-speed)) + (pitch-factor (* 0.10 (- player-speed min-speed)))) (set-vehicle-speed! player-car player-speed) (set-source-pitch! engine-sound (+ 1 pitch-factor)))) @@ -175,59 +174,54 @@ ;;;; Chickadee hooks (set-source-volume! music 0.5) -(if music-play? - (source-play music)) -(if music-play? - (source-play engine-sound)) +(source-play music) +(source-play engine-sound) (define (update interval) - (if (not game-over) - (begin - (if (not (player-on-road?)) - (begin - (off-road-player) - (set! game-over #t))) - - (let ((new-speed (+ (vehicle-speed player-car) - (* player-current-acceleration interval)))) - (set-vehicle-speed! player-car (min player-max-speed - (max player-min-speed - new-speed)))) - - (if (player-collides?) - (begin - (off-road-player) - ;; TODO: Think of different animation for this game over - (set! game-over #t))) - - (set! road-section-position - (if (< road-section-position (- lane-length)) - (- (+ road-section-position lane-length) (* interval (vehicle-speed player-car))) - (- road-section-position (* interval (vehicle-speed player-car))))) - - (set-vehicle-position! player-car (vec2+ (vehicle-position player-car) - player-velocity)) - - (for-each (lambda (veh) - (vehicle-move! veh (vec2 (- (* interval (vehicle-speed- player-car veh))) 0))) - (filter vehicle-active? vehicles)) - - ;; Reset vehicles that have gone off screen - (for-each vehicle-reset-ahead (filter vehicle-off-screen? vehicles)) - - ;; Randomly respawn vehicles based on level difficulty - (if (= 0 (random level-difficulty)) - (begin - (let* ((inactive-vehicles (filter vehicle-inactive? vehicles)) - (spawnable-vehicles (filter vehicle-has-spawn-space? inactive-vehicles))) - (if (not (null? spawnable-vehicles)) - (set-vehicle-active! (list-ref - spawnable-vehicles - (random (length spawnable-vehicles))) - #t))))) - ;; End begin - ))) + (unless game-over + (unless (player-on-road?) + (off-road-player) + (set! game-over #t)) + + (let ((new-speed (+ (vehicle-speed player-car) + (* player-current-acceleration interval)))) + (set-vehicle-speed! player-car (min player-max-speed + (max (level-min-speed) + new-speed)))) + + (when (player-collides?) + (off-road-player) + ;; TODO: Think of different animation for this game over + (set! game-over #t)) + + (set! road-section-position + (if (< road-section-position (- lane-length)) + (- (+ road-section-position lane-length) (* interval (vehicle-speed player-car))) + (- road-section-position (* interval (vehicle-speed player-car))))) + + (set-vehicle-position! player-car (vec2+ (vehicle-position player-car) + player-velocity)) + + (for-each (lambda (veh) + (vehicle-move! veh (vec2 (- (* interval (vehicle-speed- player-car veh))) 0))) + (filter vehicle-active? vehicles)) + + ;; Reset vehicles that have gone off screen + (for-each vehicle-reset-ahead (filter vehicle-off-screen? vehicles)) + + ;; Randomly respawn vehicles based on level difficulty + (let ((challenge (- (/ 200 level-difficulty) 9))) + (when (= 0 (random challenge)) + (let* ((inactive-vehicles (filter vehicle-inactive? vehicles)) + (spawnable-vehicles (filter vehicle-has-spawn-space? inactive-vehicles))) + (if (not (null? spawnable-vehicles)) + (set-vehicle-active! (list-ref + spawnable-vehicles + (random (length spawnable-vehicles))) + #t))))) + ;; End (unless game-over) + )) (define (draw alpha) (draw-road road-section-position road-start-y road-num-lanes) @@ -246,6 +240,11 @@ (vec2 400.0 20.0) #:font the-font #:scale (vec2 2 2)) + + (draw-text (format #f "Level: ~s" level-difficulty) + (vec2 30.0 20.0) + #:font the-font + #:scale (vec2 2 2)) (if game-over (draw-text "GAME OVER" (vec2 260 (/ (window-width (current-window)) 2)) @@ -267,7 +266,7 @@ (abort-game)) ((and (eq? key 'return) game-over) (set-vehicle-position! player-car initial-player-position) - (set-player-speed! (+ 1 player-min-speed)) + (set-player-speed! (level-min-speed)) (set! player-rotation 0) (source-play engine-sound) (for-each vehicle-reset-ahead vehicles) |