[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/sokoban 5c609d7 10/17: * sokoban.el: Determine sokoban-
From: |
Stefan Monnier |
Subject: |
[elpa] externals/sokoban 5c609d7 10/17: * sokoban.el: Determine sokoban-width and sokoban-height dynamically |
Date: |
Tue, 1 Dec 2020 17:17:29 -0500 (EST) |
branch: externals/sokoban
commit 5c609d793dfd4b10be21abdc7f28dc004b778363
Author: Dieter Deyke <dieter.deyke@gmail.com>
Commit: Dieter Deyke <dieter.deyke@gmail.com>
* sokoban.el: Determine sokoban-width and sokoban-height dynamically
This avoids hard-coding sokoban-width and sokoban-height by scanning
the level file and finding the correct values dynamically.
Unrelated additional changes:
- remove unused variable 'sokoban-temp-buffer-name'
- change sokoban-next-level to use sokoban-goto-level in order to
range-check new level number
- change sokoban-goto-level to produce a more readable error message
when level is out of range
---
sokoban.el | 47 +++++++++++++++++++++++++++++++++--------------
1 file changed, 33 insertions(+), 14 deletions(-)
diff --git a/sokoban.el b/sokoban.el
index 3ac1b6e..a630d75 100644
--- a/sokoban.el
+++ b/sokoban.el
@@ -4,7 +4,7 @@
;; Author: Glynn Clements <glynn.clements@xemacs.org>
;; Maintainer: Dieter Deyke <dieter.deyke@gmail.com>
-;; Version: 1.4.2
+;; Version: 1.4.3
;; Created: 1997-09-11
;; Keywords: games
;; Package-Type: multi
@@ -71,8 +71,6 @@
(defvar sokoban-buffer-name "*Sokoban*")
-(defvar sokoban-temp-buffer-name " Sokoban-tmp")
-
(defvar sokoban-level-file
(if (fboundp 'locate-data-file)
(locate-data-file "sokoban.levels")
@@ -84,14 +82,14 @@
(and (file-exists-p file) file))
(expand-file-name "sokoban.levels" data-directory))))
-(defvar sokoban-width 27)
-(defvar sokoban-height 20)
+(defvar sokoban-width)
+(defvar sokoban-height)
-(defvar sokoban-buffer-width sokoban-width)
-(defvar sokoban-buffer-height (+ 4 sokoban-height))
+(defvar sokoban-buffer-width)
+(defvar sokoban-buffer-height)
-(defvar sokoban-score-x 0)
-(defvar sokoban-score-y (1+ sokoban-height))
+(defvar sokoban-score-x)
+(defvar sokoban-score-y)
(defvar sokoban-level-data nil)
@@ -542,6 +540,28 @@ static char * player_on_target_xpm[] = {
(if (fboundp 'read-only-mode)
(read-only-mode 1)
(setq buffer-read-only t))
+
+ (setq sokoban-width 1
+ sokoban-height 1)
+ (goto-char (point-min))
+ (re-search-forward sokoban-level-regexp nil t)
+ (forward-char)
+ (let (r)
+ (while (not (eobp))
+ (while (looking-at sokoban-comment-regexp)
+ (forward-line))
+ (setq r 0)
+ (while (not (or (eobp)
+ (looking-at sokoban-comment-regexp)))
+ (incf r)
+ (setq sokoban-height (max sokoban-height r)
+ sokoban-width (max sokoban-width (- (line-end-position)
(line-beginning-position))))
+ (forward-line))))
+ (setq sokoban-buffer-width sokoban-width
+ sokoban-buffer-height (+ 4 sokoban-height)
+ sokoban-score-x 0
+ sokoban-score-y (1+ sokoban-height))
+
(goto-char (point-min))
(re-search-forward sokoban-level-regexp nil t)
(forward-char)
@@ -823,8 +843,7 @@ static char * player_on_target_xpm[] = {
(sokoban-draw-score))
(defun sokoban-next-level ()
- (incf sokoban-level)
- (sokoban-restart-level))
+ (sokoban-goto-level (1+ sokoban-level)))
(defun sokoban-goto-level (level)
"Jump to a specified LEVEL."
@@ -832,8 +851,9 @@ static char * player_on_target_xpm[] = {
(when (or (< level 1)
(> level (length sokoban-level-data)))
(signal 'args-out-of-range
- (list "No such level number"
- level 1 (> level (length sokoban-level-data)))))
+ (list
+ (format "No such level number %d, should be 1..%d"
+ level (length sokoban-level-data)))))
(setq sokoban-level level)
(sokoban-restart-level))
@@ -915,4 +935,3 @@ sokoban-mode keybindings:
(provide 'sokoban)
;;; sokoban.el ends here
-
- [elpa] externals/sokoban c5ed120 04/17: Only keep the strictly necessary *-pkg.el files, (continued)
- [elpa] externals/sokoban c5ed120 04/17: Only keep the strictly necessary *-pkg.el files, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban d9f58b0 11/17: * sokoban.el: Force sokoban-width to be at least 15 to accommodate score display, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban e217508 17/17: * .gitignore: New file, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban 90b9c6b 16/17: * sokoban/sokoban.el: Add save/load capability, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban e54bbfa 07/17: Save sokoban-level when a level is completed, restore sokoban-level when game is started, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban 1c53ebe 14/17: * sokoban.el: Switch to lexical-binding, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban 926ab8d 09/17: * packages/sokoban/sokoban.el: Change player and block color if on target, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban 44f9b39 12/17: * sokoban.el: Add support for level data in xml format, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban b51c816 15/17: * sokoban/sokoban.el: Use cl-lib, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban ae777cf 05/17: * packages/sokoban/sokoban.el: Fix version., Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban 5c609d7 10/17: * sokoban.el: Determine sokoban-width and sokoban-height dynamically,
Stefan Monnier <=
- [elpa] externals/sokoban f882802 01/17: Add sokoban game for emacs, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban e920b6a 08/17: Allow for player to start on a target, allow for wider and higher levels, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban 4a93859 13/17: * sokoban.el: Require at least emacs version 23.1 because of load-user-emacs-file, Stefan Monnier, 2020/12/01
- [elpa] externals/sokoban 020ae7c 06/17: * sokoban/sokoban.el (sokoban-draw-score): Fix off-by-one error, Stefan Monnier, 2020/12/01