summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasilij Schneidermann <v.schneidermann@gmail.com>2016-02-23 20:28:37 +1100
committerLars Ingebrigtsen <larsi@gnus.org>2016-02-23 20:28:37 +1100
commit879e09bbbce79f78db14eb32c714452efd53b268 (patch)
treee839c0b454b8cf46217157182a01b0c742a1b704
parentcc27b1b04113677bf9f7bf60f41ac3f07c6c2530 (diff)
Place apples randomly in Snake
* lisp/play/snake.el (snake-score): New variable (bug#21359). (snake-set-dot): Place the apples randomly.
-rw-r--r--lisp/play/snake.el23
1 files changed, 13 insertions, 10 deletions
diff --git a/lisp/play/snake.el b/lisp/play/snake.el
index 243f0190ee..371c7133c7 100644
--- a/lisp/play/snake.el
+++ b/lisp/play/snake.el
@@ -144,7 +144,6 @@
(defvar snake-velocity-x 1)
(defvar snake-velocity-y 0)
(defvar snake-positions nil)
-(defvar snake-cycle 0)
(defvar snake-score 0)
(defvar snake-paused nil)
(defvar snake-moved-p nil)
@@ -164,7 +163,6 @@ and then start moving it leftwards.")
(make-variable-buffer-local 'snake-velocity-x)
(make-variable-buffer-local 'snake-velocity-y)
(make-variable-buffer-local 'snake-positions)
-(make-variable-buffer-local 'snake-cycle)
(make-variable-buffer-local 'snake-score)
(make-variable-buffer-local 'snake-paused)
(make-variable-buffer-local 'snake-moved-p)
@@ -237,7 +235,6 @@ and then start moving it leftwards.")
snake-velocity-x snake-initial-velocity-x
snake-velocity-y snake-initial-velocity-y
snake-positions nil
- snake-cycle 1
snake-score 0
snake-paused nil
snake-moved-p nil
@@ -251,6 +248,14 @@ and then start moving it leftwards.")
(cl-incf y snake-velocity-y)))
(snake-update-score))
+(defun snake-set-dot ()
+ (let ((x (random snake-width))
+ (y (random snake-height)))
+ (while (not (= (gamegrid-get-cell x y) snake-blank))
+ (setq x (random snake-width))
+ (setq y (random snake-height)))
+ (gamegrid-set-cell x y snake-dot)))
+
(defun snake-update-game (snake-buffer)
"Called on each clock tick.
Advances the snake one square, testing for collision.
@@ -268,23 +273,20 @@ Argument SNAKE-BUFFER is the name of the buffer."
(cond ((= c snake-dot)
(cl-incf snake-length)
(cl-incf snake-score)
- (snake-update-score))
+ (snake-update-score)
+ (snake-set-dot))
(t
(let* ((last-cons (nthcdr (- snake-length 2)
snake-positions))
(tail-pos (cadr last-cons))
(x0 (aref tail-pos 0))
(y0 (aref tail-pos 1)))
- (gamegrid-set-cell x0 y0
- (if (= (% snake-cycle 5) 0)
- snake-dot
- snake-blank))
- (cl-incf snake-cycle)
+ (gamegrid-set-cell x0 y0 snake-blank)
(setcdr last-cons nil))))
(gamegrid-set-cell x y snake-snake)
(setq snake-positions
(cons (vector x y) snake-positions))
- (setq snake-moved-p nil)))))
+ (setq snake-moved-p nil)))))
(defun snake-update-velocity ()
(unless snake-moved-p
@@ -339,6 +341,7 @@ Argument SNAKE-BUFFER is the name of the buffer."
"Start a new game of Snake."
(interactive)
(snake-reset-game)
+ (snake-set-dot)
(use-local-map snake-mode-map)
(gamegrid-start-timer snake-tick-period 'snake-update-game))