thoughtstem / Summer2019

Other
4 stars 3 forks source link

Adding Snake Game Katas to the Game Katas #507

Closed cdouaihy closed 5 years ago

cdouaihy commented 5 years ago

Adding a couple of katas to make a snake game using racket.

cdouaihy commented 5 years ago

lang Summer2019/Languages/my-game-lang/main

(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))

AMoya2020 commented 5 years ago

lang racket

(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))

AMoya2020 commented 5 years ago

lang racket

(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))

AMoya2020 commented 5 years ago

lang racket

(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))