;;; 5x5.el --- simple little puzzle game
-;; Copyright (C) 1999,2000,2005 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;; 2005, 2006, 2007, 2008, 2009 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., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, 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
(put '5x5-mode 'mode-class 'special)
(defun 5x5-mode ()
- "A mode for playing `5x5'
+ "A mode for playing `5x5'.
The key bindings for 5x5-mode are:
(use-local-map 5x5-mode-map)
(setq major-mode '5x5-mode
mode-name "5x5")
- (run-hooks '5x5-mode-hook)
+ (run-mode-hooks '5x5-mode-hook)
(setq buffer-read-only t
truncate-lines t)
- (buffer-disable-undo (current-buffer)))
+ (buffer-disable-undo))
;;;###autoload
(defun 5x5 (&optional size)
(loop for y from 0 to (1- 5x5-grid-size) sum (5x5-row-value (aref grid y))))
(defun 5x5-draw-grid-end ()
- "Draw the top/bottom of the grid"
+ "Draw the top/bottom of the grid."
(insert "+")
(loop for x from 0 to (1- 5x5-grid-size) do
(insert "-" (make-string 5x5-x-scale ?-)))
;;;###autoload
(defun 5x5-crack-xor-mutate ()
- "Attempt to crack 5x5 by xor the current and best solution.
+ "Attempt to crack 5x5 by xoring the current and best solution.
Mutate the result."
(interactive)
(5x5-crack #'5x5-make-xor-with-mutation))
5x5-crack takes the argument BREEDER which should be a function that takes
two parameters, the first will be a grid vector array that is the current
-solution and the second will be the best solution so far. The function
+solution and the second will be the best solution so far. The function
should return a grid vector array that is the new solution."
(interactive "aBreeder function: ")
(5x5-mutate-solution best))
(defun 5x5-make-xor-with-mutation (current best)
- "xor current and best solution then mutate the result."
+ "Xor current and best solution then mutate the result."
(let ((xored (5x5-make-new-grid)))
(loop for y from 0 to (1- 5x5-grid-size) do
(loop for x from 0 to (1- 5x5-grid-size) do
solution)
(defun 5x5-play-solution (solution best)
- "Play a solution on an empty grid. This destroys the current game in
-progress because it is an animated attempt."
+ "Play a solution on an empty grid. This destroys the current game
+in progress because it is an animated attempt."
(5x5-new-game)
(let ((inhibit-quit t))
(loop for y from 0 to (1- 5x5-grid-size) do
(and (or x y) (not (and x y))))
(defun 5x5-y-or-n-p (prompt)
- "5x5 wrapper for y-or-n-p which respects the 5x5-hassle-me setting."
+ "5x5 wrapper for `y-or-n-p' which respects the `5x5-hassle-me' setting."
(if 5x5-hassle-me
(y-or-n-p prompt)
t))
+(random t)
+
(provide '5x5)
-;;; arch-tag: ec4dabd5-572d-41ea-b48c-ec5ce0d68fa9
+;; arch-tag: ec4dabd5-572d-41ea-b48c-ec5ce0d68fa9
;;; 5x5.el ends here