X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/b35f288d478ef137a4d9e8e5a6a5f368a86b01f5..7e09ef09a479731d01b1ca46e94ddadd73ac98e3:/lisp/play/snake.el diff --git a/lisp/play/snake.el b/lisp/play/snake.el index 3616cf1a72..d42ba44b63 100644 --- a/lisp/play/snake.el +++ b/lisp/play/snake.el @@ -1,7 +1,6 @@ ;;; snake.el --- implementation of Snake for Emacs -;; Copyright (C) 1997, 2001, 2002, 2003, 2004, 2005, -;; 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc. ;; Author: Glynn Clements ;; Created: 1997-09-10 @@ -26,8 +25,7 @@ ;;; Code: -(eval-when-compile - (require 'cl)) +(eval-when-compile (require 'cl-lib)) (require 'gamegrid) @@ -175,27 +173,28 @@ and then start moving it leftwards.") ;; ;;;;;;;;;;;;; keymaps ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar snake-mode-map - (make-sparse-keymap 'snake-mode-map)) + (let ((map (make-sparse-keymap 'snake-mode-map))) -(define-key snake-mode-map "n" 'snake-start-game) -(define-key snake-mode-map "q" 'snake-end-game) -(define-key snake-mode-map "p" 'snake-pause-game) + (define-key map "n" 'snake-start-game) + (define-key map "q" 'snake-end-game) + (define-key map "p" 'snake-pause-game) -(define-key snake-mode-map [left] 'snake-move-left) -(define-key snake-mode-map [right] 'snake-move-right) -(define-key snake-mode-map [up] 'snake-move-up) -(define-key snake-mode-map [down] 'snake-move-down) + (define-key map [left] 'snake-move-left) + (define-key map [right] 'snake-move-right) + (define-key map [up] 'snake-move-up) + (define-key map [down] 'snake-move-down) + map)) (defvar snake-null-map - (make-sparse-keymap 'snake-null-map)) - -(define-key snake-null-map "n" 'snake-start-game) + (let ((map (make-sparse-keymap 'snake-null-map))) + (define-key map "n" 'snake-start-game) + map)) ;; ;;;;;;;;;;;;;;;; game functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun snake-display-options () (let ((options (make-vector 256 nil))) - (loop for c from 0 to 255 do + (dotimes (c 256) (aset options c (cond ((= c snake-blank) snake-blank-options) @@ -214,7 +213,7 @@ and then start moving it leftwards.") (defun snake-update-score () (let* ((string (format "Score: %05d" snake-score)) (len (length string))) - (loop for x from 0 to (1- len) do + (dotimes (x len) (gamegrid-set-cell (+ snake-score-x x) snake-score-y (aref string x))))) @@ -224,12 +223,12 @@ and then start moving it leftwards.") snake-buffer-height snake-space) (let ((buffer-read-only nil)) - (loop for y from 0 to (1- snake-height) do - (loop for x from 0 to (1- snake-width) do - (gamegrid-set-cell x y snake-border))) - (loop for y from 1 to (- snake-height 2) do - (loop for x from 1 to (- snake-width 2) do - (gamegrid-set-cell x y snake-blank))))) + (dotimes (y snake-height) + (dotimes (x snake-width) + (gamegrid-set-cell x y snake-border))) + (cl-loop for y from 1 to (- snake-height 2) do + (cl-loop for x from 1 to (- snake-width 2) do + (gamegrid-set-cell x y snake-blank))))) (defun snake-reset-game () (gamegrid-kill-timer) @@ -248,8 +247,8 @@ and then start moving it leftwards.") (dotimes (i snake-length) (gamegrid-set-cell x y snake-snake) (setq snake-positions (cons (vector x y) snake-positions)) - (incf x snake-velocity-x) - (incf y snake-velocity-y))) + (cl-incf x snake-velocity-x) + (cl-incf y snake-velocity-y))) (snake-update-score)) (defun snake-update-game (snake-buffer) @@ -267,8 +266,8 @@ Argument SNAKE-BUFFER is the name of the buffer." (= c snake-snake)) (snake-end-game) (cond ((= c snake-dot) - (incf snake-length) - (incf snake-score) + (cl-incf snake-length) + (cl-incf snake-score) (snake-update-score)) (t (let* ((last-cons (nthcdr (- snake-length 2) @@ -280,7 +279,7 @@ Argument SNAKE-BUFFER is the name of the buffer." (if (= (% snake-cycle 5) 0) snake-dot snake-blank)) - (incf snake-cycle) + (cl-incf snake-cycle) (setcdr last-cons nil)))) (gamegrid-set-cell x y snake-snake) (setq snake-positions @@ -354,21 +353,13 @@ Argument SNAKE-BUFFER is the name of the buffer." (put 'snake-mode 'mode-class 'special) -(defun snake-mode () - "A mode for playing Snake. - -Snake mode keybindings: - \\{snake-mode-map} -" - (kill-all-local-variables) +(define-derived-mode snake-mode special-mode "Snake" + "A mode for playing Snake." (add-hook 'kill-buffer-hook 'gamegrid-kill-timer nil t) (use-local-map snake-null-map) - (setq major-mode 'snake-mode) - (setq mode-name "Snake") - (unless (featurep 'emacs) (setq mode-popup-menu '("Snake Commands" @@ -383,9 +374,7 @@ Snake mode keybindings: (setq gamegrid-use-glyphs snake-use-glyphs-flag) (setq gamegrid-use-color snake-use-color-flag) - (gamegrid-init (snake-display-options)) - - (run-mode-hooks 'snake-mode-hook)) + (gamegrid-init (snake-display-options))) ;;;###autoload (defun snake () @@ -412,5 +401,4 @@ Snake mode keybindings: (provide 'snake) -;; arch-tag: 512ffc92-cfac-4287-9a4e-92890701a5c8 ;;; snake.el ends here