Last active
September 20, 2016 21:03
-
-
Save heidisu/f721f87e552bb285649b39358cddc3cc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#lang racket | |
(require 2htdp/universe) | |
(require 2htdp/image) | |
(require lang/posn) | |
(define speed 5) | |
(define (create-snake-scene snake) | |
(place-images (create-rectangles (length snake)) (create-positions snake) (rectangle 500 500 "solid" "white"))) | |
(define (create-positions l) | |
(map (lambda (x) (make-posn (car x) (cadr x))) l)) | |
(define (create-rectangles n) | |
(build-list n (lambda (x) (rectangle 10 10 "solid" "green")))) | |
(define snake0 (list (list 40 250 'e) (list 30 250 'e) (list 20 250 'e) (list 10 250 'e) (list 0 250 'e))) | |
(define (update snake) | |
(let ([fst (first snake)]) | |
(cons (create-dir-snake-piece fst (caddr fst)) (take snake (- (length snake) 1))))) | |
(define (update-dir snake dir) | |
(cons (create-dir-snake-piece (first snake) dir) (take snake (- (length snake) 1)))) | |
(define (create-dir-snake-piece l dir) | |
(let ([x (car l)] | |
[y (cadr l)]) | |
(case dir | |
['e (list (+ x speed) y dir)] | |
['w (list (- x speed) y dir)] | |
['s (list x (+ y speed) dir)] | |
['n (list x (- y speed) dir)] | |
))) | |
(define (change-dir snake key) | |
(cond | |
[(key=? key "left") (update-dir snake 'w)] | |
[(key=? key "right")(update-dir snake 'e)] | |
[(key=? key "up")(update-dir snake 'n)] | |
[(key=? key "down")(update-dir snake 's)])) | |
(big-bang snake0 (to-draw create-snake-scene) (on-tick update) (on-key change-dir)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment