summaryrefslogtreecommitdiff
path: root/scripts/main.el
diff options
context:
space:
mode:
authorhenriquelalves <henriquelalves@gmail.com>2025-05-23 13:32:29 +0300
committerhenriquelalves <henriquelalves@gmail.com>2025-05-23 13:32:29 +0300
commit5bd78ff5d0e04281cade5ad3e2256c0e9505938f (patch)
treeb52c79a1607e8697a5be3e048d91bcc91ee50822 /scripts/main.el
parentbb605eef824f287f20473b6d110d5e40eb475390 (diff)
downloadgamejam-slgj-2025-5bd78ff5d0e04281cade5ad3e2256c0e9505938f.tar.gz
gamejam-slgj-2025-5bd78ff5d0e04281cade5ad3e2256c0e9505938f.tar.bz2
gamejam-slgj-2025-5bd78ff5d0e04281cade5ad3e2256c0e9505938f.zip
update to latest jam changes
Diffstat (limited to 'scripts/main.el')
-rw-r--r--scripts/main.el210
1 files changed, 209 insertions, 1 deletions
diff --git a/scripts/main.el b/scripts/main.el
index 2c6c54d..92a50e1 100644
--- a/scripts/main.el
+++ b/scripts/main.el
@@ -1,3 +1,211 @@
+(defvar key-left 65361) ;; macroquad input code
+(defvar key-up 65362)
+(defvar key-right 65363)
+(defvar key-down 65364)
+
+(defvar gameover ())
+(defvar tile-size (list 18.0 24.0))
+(defvar subtile-width 5.0)
+(defvar subtile-height 7.0)
+
+(defvar player-direction ())
+(defvar player-body (list (list 3 2)))
+(defvar frame-timer-duration 0.3)
+(defvar frame-timer 0.0)
+(defvar fruit-tile (list 4 5))
+
+
+(defun is-tile-equal? (pos1 pos2)
+ (and (== (car pos1) (car pos2)) (== (cadr pos1) (cadr pos2)))
+ )
+
+(defun sum-pos (pos1 pos2)
+ (list (+ (car pos1) (car pos2)) (+ (cadr pos1) (cadr pos2)))
+ )
+
+(defun tile-to-pos (tile)
+ (list (* (car tile) (car tile-size)) (* (cadr tile) (cadr tile-size)))
+ )
+
+(defun draw-subtile (tile subtile)
+ (defvar offset (tile-to-pos tile))
+ (mq-draw-rectangle (+ (car offset) (+ (* subtile-width (car subtile)) (car subtile))) (+ (cadr offset) (+ (* subtile-height (cadr subtile)) (cadr subtile))) subtile-width subtile-height)
+ )
+
+(defun draw-fruit (tile)
+ (draw-subtile tile (list 1 0))
+ (draw-subtile tile (list 2 1))
+ (draw-subtile tile (list 1 2))
+ (draw-subtile tile (list 0 1))
+ )
+
+(defun draw-horizontal-line (tile)
+ (draw-subtile tile (list 0 1))
+ (draw-subtile tile (list 1 1))
+ (draw-subtile tile (list 2 1))
+ )
+
+(defun draw-vertical-line (tile)
+ (draw-subtile tile (list 1 0))
+ (draw-subtile tile (list 1 1))
+ (draw-subtile tile (list 1 2))
+ )
+
+(defun draw-corner-tl (tile)
+ (draw-subtile tile (list 1 1))
+ (draw-subtile tile (list 2 1))
+ (draw-subtile tile (list 1 2))
+ )
+
+(defun draw-corner-tr (tile)
+ (draw-subtile tile (list 1 1))
+ (draw-subtile tile (list 0 1))
+ (draw-subtile tile (list 1 2))
+ )
+
+(defun draw-corner-bl (tile)
+ (draw-subtile tile (list 1 1))
+ (draw-subtile tile (list 1 0))
+ (draw-subtile tile (list 2 1))
+ )
+
+(defun draw-corner-br (tile)
+ (draw-subtile tile (list 1 1))
+ (draw-subtile tile (list 1 0))
+ (draw-subtile tile (list 0 1))
+ )
+
+(defun draw-snake-tile (tile)
+ (defvar offset (tile-to-pos tile))
+ (mq-draw-rectangle (car offset) (cadr offset) (car tile-size) (cadr tile-size) 0.4)
+ (draw-subtile tile (list 0 0))
+ (draw-subtile tile (list 1 0))
+ (draw-subtile tile (list 2 0))
+ (draw-subtile tile (list 0 1))
+ (draw-subtile tile (list 1 1))
+ (draw-subtile tile (list 2 1))
+ (draw-subtile tile (list 0 2))
+ (draw-subtile tile (list 1 2))
+ (draw-subtile tile (list 2 2))
+ )
+
+(defun process-input ()
+ (if (mq-is-key-pressed key-left)
+ (setq player-direction key-left))
+ (if (mq-is-key-pressed key-right)
+ (setq player-direction key-right))
+ (if (mq-is-key-pressed key-up)
+ (setq player-direction key-up))
+ (if (mq-is-key-pressed key-down)
+ (setq player-direction key-down))
+ )
+
+(defun move-player-body (dir)
+ (setq player-body (move-player-body-aux player-body (sum-pos (car player-body) dir)))
+ )
+
+(defun move-player-body-aux (body pos)
+ (if (not (null (cdr body)))
+ (cons pos (move-player-body-aux (cdr body) (car body)))
+ (cons pos ()))
+ )
+
+(defun push-new-tile ()
+ (setq player-body (push-new-tile-aux player-body))
+ )
+
+(defun push-new-tile-aux (body)
+ (if (null (cdr body))
+ (list (car body) (car body))
+ (cons (car body) (push-new-tile-aux (cdr body)))
+ ))
+
+(defun check-collision-self ()
+ (if (null (cdr player-body))
+ ()
+ (check-collision-self-aux (cdr player-body) (car player-body)))
+ )
+
+(defun check-collision-self-aux (body pos)
+ (if (is-tile-equal? (car body) pos)
+ 1
+ (if (null (cdr body))
+ ()
+ (check-collision-self-aux (cdr body) pos))
+ )
+ )
+
+(defun process-frame ()
+ ;; Set frame timer to 0 (game is running at 60 FPS)
+ (setq frame-timer 0.0)
+
+ ;; Move player
+ (if (== player-direction key-left)
+ (move-player-body (list -1 0))
+ )
+
+ (if (== player-direction key-up)
+ (move-player-body (list 0 -1))
+ )
+
+ (if (== player-direction key-right)
+ (move-player-body (list 1 0))
+ )
+
+ (if (== player-direction key-down)
+ (move-player-body (list 0 1))
+ )
+
+ ;; Check collision with self
+ (if (check-collision-self)
+ (setq gameover 1))
+
+
+ ;; Check collision border
+ (if (or (<= (car (car player-body)) 2)
+ (>= (car (car player-body)) 31)
+ (<= (cadr (car player-body)) 1)
+ (>= (cadr (car player-body)) 22))
+ (setq gameover 1))
+
+ ;; Check collision with fruit
+ (if (is-tile-equal? (car player-body) fruit-tile)
+ (begin
+ (push-new-tile)
+ (setq fruit-tile (list (randi-range 3 30) (randi-range 2 21)))))
+ )
+
+
+(defun update (dt)
+ (process-input)
+
+ (setq frame-timer (+ frame-timer dt))
+ (if (and (not gameover) (> frame-timer frame-timer-duration))
+ (process-frame))
+
+
+ )
+
+
(defun draw ()
- (rq-draw-circle 50.0 50.0 40.0)
+ (mapcar (lambda (tile)
+ (draw-snake-tile tile))
+ player-body)
+
+ (mapcar (lambda (i)
+ (draw-vertical-line (list 2 i))
+ (draw-vertical-line (list 31 i)))
+ (range 2 22))
+
+ (mapcar (lambda (i)
+ (draw-horizontal-line (list i 1))
+ (draw-horizontal-line (list i 22)))
+ (range 3 31))
+
+ (draw-corner-tl (list 2 1))
+ (draw-corner-tr (list 31 1))
+ (draw-corner-bl (list 2 22))
+ (draw-corner-br (list 31 22))
+
+ (draw-fruit fruit-tile)
)