aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Guegan <manzerberdes@gmx.com>2019-05-08 17:40:47 +0200
committerLoic Guegan <manzerberdes@gmx.com>2019-05-08 17:40:47 +0200
commit8ca0bf8b42f1b8c0dee5abdfd56b3e84aaf9f118 (patch)
treeb6b6b86dc1f523b337dabc790295c2c8040f203e
parent6d3e1f82bc792af3cfd0a97f571cee8332e735d4 (diff)
Handle snake grow
-rw-r--r--server/game.lisp11
1 files changed, 11 insertions, 0 deletions
diff --git a/server/game.lisp b/server/game.lisp
index 5658c5a..207b669 100644
--- a/server/game.lisp
+++ b/server/game.lisp
@@ -42,6 +42,17 @@
(and (or (eq dir :left) (eq dir :right)) ; Goto left or right only if the snake is on the up or down direction
(or (eq active-dir :up) (eq active-dir :down)))))
+;;; Grow snake of grow-size amount (snake is growing by the tail)
+(defun grow-snake (snake grow-size)
+ (let* ((old-size (first (array-dimensions snake)))
+ (new-size (+ old-size grow-size))
+ (tail (aref snake (- old-size 1)))
+ (new-tail (coerce (make-array grow-size :initial-element tail) 'list))
+ (new-snake (make-array new-size :initial-contents `(,@(coerce snake 'list) ,@new-tail))))
+ new-snake))
+
+
+
(defmethod refresh ((g game) &key (dir nil dir-supplied-p))
;; First, update direction
(with-slots ((active-dir dir)) g