Advertisement
Guest User

Untitled

a guest
Mar 30th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.43 KB | None | 0 0
  1. #lang racket
  2. (provide (all-defined-out))
  3. (require "gameobject.rkt")
  4.  
  5. (define snake%
  6.   (class gameobject%
  7.     (init-field gamemodel)
  8.     (field (velocityX 0)
  9.            (velocityY 0))
  10.  
  11.     ;; Getters and setters for velocity
  12.     (define/public (getVelX)
  13.       velocityX)
  14.     (define/public (getVelY)
  15.       velocityY)
  16.     (define/public (setVelX velX)
  17.       (set! velocityX velX))
  18.     (define/public (setVelY velY)
  19.       (set! velocityY velY))
  20.  
  21.     ;; Move functions for Snake
  22.     ;; The unless clauses makes sure you cannot move backwards through yourself
  23.     (define/public (moveUp)
  24.       (set! velocityX 0)
  25.       (unless (eq? (send this getVelY) 3)
  26.         (set! velocityY -3)))
  27.  
  28.     (define/public (moveDown)
  29.       (set! velocityX 0)
  30.       (unless (eq? (send this getVelY) -3)
  31.         (set! velocityY 3)))
  32.          
  33.     (define/public (moveRight)
  34.       (set! velocityY 0)
  35.       (unless (eq? (send this getVelX) -3)
  36.         (set! velocityX 3)))
  37.      
  38.     (define/public (moveLeft)
  39.       (set! velocityY 0)
  40.       (unless (eq? (send this getVelX) 3)
  41.         (set! velocityX -3)))
  42.  
  43.     (define/public (clamp var min max)
  44.   (cond
  45.     [ (>= var max) max]
  46.     [ (<= var min) min]
  47.     [ else var]))
  48.  
  49.     (define/public (dangerclose x x1)
  50.       (define distance (- x x1))
  51.       (if (< distance 10) #t #f))
  52.  
  53.     (define/public (collision)
  54.       (define currentx (send this getX))
  55.       (define currenty (send this getY))
  56.       (for ( [obj (send gamemodel get-objects) ] )
  57.         (define objx (send obj getX))
  58.         (define objy (send obj getY))
  59.         (if (dangerclose currentx objx)
  60.             (send gamemodel remove-object obj)
  61.             1)))
  62.  
  63.    
  64.     ;; Render function of Snake
  65.     (define/public (render dc)
  66.       ;; Gets current coordinates and size
  67.       (let ((xpos (send this getX))
  68.             (ypos (send this getY))
  69.             (size (send this getSize)))
  70.            
  71.         (send dc set-brush "red" 'solid)
  72.         (send dc draw-rectangle xpos ypos size size)))
  73.  
  74.    
  75.     ;; Tick function of Snake
  76.     (define/public (tick)
  77.       ;; Gets current coordinates and velocities
  78.       ;(display "tick")
  79.       (let ((xpos (send this getX))
  80.             (velx (send this getVelX))
  81.             (ypos (send this getY))
  82.             (vely (send this getVelY)))
  83.        
  84.         (send this setY (+ ypos vely))
  85.         (send this setX (+ xpos velx))
  86.         (collision)))
  87.     (super-new [size 32])))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement