diff options
-rw-r--r-- | game.scm | 47 |
1 files changed, 36 insertions, 11 deletions
@@ -289,7 +289,7 @@ (audio-play audio) (vector-set! sound 0 (modulo (+ i 1) (vector-length vec))))))) - ;; intro, play, game-over, game-won + ;; intro, play, paused, game-over, game-win (define *game-state* 'play) ;; Screen size stuff @@ -714,6 +714,7 @@ (define (spawn-enemy-a x y) (define (script enemy) (let ((speed 2.0)) + (wait 60) (let loop ((theta 0.0)) (let ((dx (* (cos theta) speed)) (dy (* (sin theta) speed)) @@ -920,6 +921,16 @@ (set-font! context "bold 24px monospace") (set-text-align! context "center") (fill-text context "GAME OVER" (/ game-width 2.0) (/ game-height 2.0))) + ('game-win + (set-fill-color! context "#ffffff") + (set-font! context "bold 24px monospace") + (set-text-align! context "center") + (fill-text context "WELL DONE" (/ game-width 2.0) (/ game-height 2.0))) + ('paused + (set-fill-color! context "#ffffff") + (set-font! context "bold 24px monospace") + (set-text-align! context "center") + (fill-text context "PAUSED" (/ game-width 2.0) (/ game-height 2.0))) (_ #t)) (request-animation-frame draw)) @@ -957,16 +968,30 @@ ((string-=? code "KeyZ") (set-firing! #t) (prevent-default! event)) - ((string-=? code "KeyR") - (reset!) - (prevent-default! event))) - (match *game-state* - ('game-over - (cond - ((string-=? code "Enter") - (reset!) - (prevent-default! event)))) - (_ #t)))) + (else + (match *game-state* + ('play + (cond + ((string-=? code "Enter") + (set! *game-state* 'paused) + (prevent-default! event)) + ((string-=? code "KeyR") + (reset!) + (prevent-default! event)) + ((string-=? code "KeyW") + (set! *game-state* 'game-win) + (prevent-default! event)))) + ('paused + (cond + ((string-=? code "Enter") + (set! *game-state* 'play) + (prevent-default! event)))) + ((or 'game-over 'game-win) + (cond + ((string-=? code "Enter") + (reset!) + (prevent-default! event)))) + (_ #t)))))) (define (on-key-up event) (let ((code (keyboard-event-code event))) |