;;; 5x5.el --- simple little puzzle game
-;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+;; 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
;; Author: Dave Pearson <davep@davep.org>
;; Maintainer: Dave Pearson <davep@davep.org>
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; o The code for updating the grid needs to be re-done. At the moment it
;; simply re-draws the grid every time a move is made.
;;
-;; o Look into tarting up the display with colour. gamegrid.el looks
+;; o Look into tarting up the display with color. gamegrid.el looks
;; interesting, perhaps that is the way to go?
;;; Thanks:
(eval-when-compile
(require 'cl))
-;; If customize isn't available just use defvar instead.
-(eval-and-compile
- (unless (fboundp 'defgroup)
- (defmacro defgroup (&rest rest) nil)
- (defmacro defcustom (symbol init docstring &rest rest)
- `(defvar ,symbol ,init ,docstring))))
-
;; Customize options.
(defgroup 5x5 nil
:prefix "5x5-")
(defcustom 5x5-grid-size 5
- "*Size of the playing area."
+ "Size of the playing area."
:type 'integer
:group '5x5)
(defcustom 5x5-x-scale 4
- "*X scaling factor for drawing the grid."
+ "X scaling factor for drawing the grid."
:type 'integer
:group '5x5)
(defcustom 5x5-y-scale 3
- "*Y scaling factor for drawing the grid."
+ "Y scaling factor for drawing the grid."
:type 'integer
:group '5x5)
(defcustom 5x5-animate-delay .01
- "*Delay in seconds when animating a solution crack."
+ "Delay in seconds when animating a solution crack."
:type 'number
:group '5x5)
(defcustom 5x5-hassle-me t
- "*Should 5x5 ask you when you want to do a destructive operation?"
+ "Should 5x5 ask you when you want to do a destructive operation?"
:type 'boolean
:group '5x5)
(defcustom 5x5-mode-hook nil
- "*Hook run on starting 5x5."
+ "Hook run on starting 5x5."
:type 'hook
:group '5x5)
(defvar 5x5-buffer-name "*5x5*"
"Name of the 5x5 play buffer.")
-(defvar 5x5-mode-map nil
- "Local keymap for the 5x5 game.")
-
-;; Keymap.
-
-(unless 5x5-mode-map
+(defvar 5x5-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map t)
(define-key map "?" #'describe-mode)
(define-key map [(control c) (control x)] #'5x5-crack-xor-mutate)
(define-key map "n" #'5x5-new-game)
(define-key map "q" #'5x5-quit-game)
- (setq 5x5-mode-map map)))
+ map)
+ "Local keymap for the 5x5 game.")
;; Menu definition.
(defun 5x5-new-game ()
"Start a new game of `5x5'."
(interactive)
- (when (if (interactive-p) (5x5-y-or-n-p "Start a new game? ") t)
+ (when (if (called-interactively-p 'interactive)
+ (5x5-y-or-n-p "Start a new game? ") t)
(setq 5x5-x-pos (/ 5x5-grid-size 2)
5x5-y-pos (/ 5x5-grid-size 2)
5x5-moves 0
(defun 5x5-position-cursor ()
"Position the cursor on the grid."
- (goto-line (+ (* 5x5-y-pos 5x5-y-scale) 2))
+ (goto-char (point-min))
+ (forward-line (1+ (* 5x5-y-pos 5x5-y-scale)))
(goto-char (+ (point) (* 5x5-x-pos 5x5-x-scale) (+ 5x5-x-pos 1) 1)))
(defun 5x5-made-move ()
(provide '5x5)
-;;; arch-tag: ec4dabd5-572d-41ea-b48c-ec5ce0d68fa9
+;; arch-tag: ec4dabd5-572d-41ea-b48c-ec5ce0d68fa9
;;; 5x5.el ends here