Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- (provide (all-defined-out))
- (require "gameobject.rkt")
- (define snake%
- (class gameobject%
- (init-field gamemodel)
- (field (velocityX 0)
- (velocityY 0))
- ;; Getters and setters for velocity
- (define/public (getVelX)
- velocityX)
- (define/public (getVelY)
- velocityY)
- (define/public (setVelX velX)
- (set! velocityX velX))
- (define/public (setVelY velY)
- (set! velocityY velY))
- ;; Move functions for Snake
- ;; The unless clauses makes sure you cannot move backwards through yourself
- (define/public (moveUp)
- (set! velocityX 0)
- (unless (eq? (send this getVelY) 3)
- (set! velocityY -3)))
- (define/public (moveDown)
- (set! velocityX 0)
- (unless (eq? (send this getVelY) -3)
- (set! velocityY 3)))
- (define/public (moveRight)
- (set! velocityY 0)
- (unless (eq? (send this getVelX) -3)
- (set! velocityX 3)))
- (define/public (moveLeft)
- (set! velocityY 0)
- (unless (eq? (send this getVelX) 3)
- (set! velocityX -3)))
- (define/public (clamp var min max)
- (cond
- [ (>= var max) max]
- [ (<= var min) min]
- [ else var]))
- (define/public (dangerclose x x1)
- (define distance (- x x1))
- (if (< distance 10) #t #f))
- (define/public (collision)
- (define currentx (send this getX))
- (define currenty (send this getY))
- (for ( [obj (send gamemodel get-objects) ] )
- (define objx (send obj getX))
- (define objy (send obj getY))
- (if (dangerclose currentx objx)
- (send gamemodel remove-object obj)
- 1)))
- ;; Render function of Snake
- (define/public (render dc)
- ;; Gets current coordinates and size
- (let ((xpos (send this getX))
- (ypos (send this getY))
- (size (send this getSize)))
- (send dc set-brush "red" 'solid)
- (send dc draw-rectangle xpos ypos size size)))
- ;; Tick function of Snake
- (define/public (tick)
- ;; Gets current coordinates and velocities
- ;(display "tick")
- (let ((xpos (send this getX))
- (velx (send this getVelX))
- (ypos (send this getY))
- (vely (send this getVelY)))
- (send this setY (+ ypos vely))
- (send this setX (+ xpos velx))
- (collision)))
- (super-new [size 32])))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement