Closed cdouaihy closed 5 years ago
(define direction #t)
(define (spinning-rectangle state) (if direction (place-image (square 30 "solid" "green") (modulo ( 5 state) 200) 100 (empty-scene 200 200)) (place-image (square 30 "solid" "green") (- 200 (modulo ( 5 state) 200)) 100 (empty-scene 200 200))))
(big-bang 0 (on-tick add1) (to-draw spinning-rectangle 200 200))
(require 2htdp/image 2htdp/universe)
(define (create-snake time) (place-image (square 30 "solid" "green") 300 300 (empty-scene 600 600)))
(big-bang 0 (on-tick add1) (to-draw create-snake))
(require 2htdp/image 2htdp/universe)
(struct position (x y) #:transparent)
(define (update-pos-x point num) (struct-copy position point [x (+ num (position-x point))]))
(define (update-pos-y point num) (struct-copy position point [y (+ num (position-y point))]))
(define (keypress->air point key) (cond [(key=? key "left") (update-pos-x point -10)] [(key=? key "right") (update-pos-x point 10)] [(key=? key "up") (update-pos-y point -10)] [(key=? key "down") (update-pos-y point 10)] [(key=? key "")] [else point]))
(define (sqr-handle-key p k) (keypress->air p k))
(define (create-red-square point) (place-image (square 30 "solid" "green") (position-x point) (position-y point) (empty-scene 600 600)))
(big-bang (position 300 300) (on-key sqr-handle-key) (on-tick (to-draw create-red-square))
(require 2htdp/image 2htdp/universe)
(struct posn (x y)) (struct snake (dir posn))
(define starter-snake (snake "up" (posn 300 300)))
(define (add-posns p1 p2) (posn (+ (posn-x p1) (posn-x p2)) (+ (posn-y p1) (posn-y p2))))
(define (update-direction s direction) (define newsnake (struct-copy snake s [dir direction])) (move-snake newsnake))
(define (change-dir s key) (cond [(key=? key "left") (update-direction s "left")] [(key=? key "right") (update-direction s "right")] [(key=? key "up") (update-direction s "up")] [(key=? key "down") (update-direction s "down")] [else s]))
(define (move-snake-in-direction s p) (struct-copy snake s [posn (add-posns p (snake-posn s))]))
(define (move-snake s)
(define dir (snake-dir s))
(cond
[(string=? dir "up") (move-snake-in-direction s (posn 0 -4))]
[(string=? dir "down") (move-snake-in-direction s (posn 0 4))]
[(string=? dir "left") (move-snake-in-direction s (posn -4 0))]
[(string=? dir "right") (move-snake-in-direction s (posn 4 0))]
[else s]))
(define (render s) (define p (snake-posn s)) (place-image (circle 10 'solid 'red) (posn-x p) (posn-y p) (empty-scene 600 600)))
(big-bang starter-snake (on-tick move-snake) (on-key change-dir) (to-draw render))
Adding a couple of katas to make a snake game using racket.