emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/pacmacs 0c0f6c141c 210/472: Merge branch 'master' into int


From: ELPA Syncer
Subject: [nongnu] elpa/pacmacs 0c0f6c141c 210/472: Merge branch 'master' into integration-test-recorder-115
Date: Thu, 6 Jan 2022 21:59:25 -0500 (EST)

branch: elpa/pacmacs
commit 0c0f6c141ca093c9ecb37106bdfd3433bc09b2bd
Merge: ee893d28bd e64420ace4
Author: rexim <reximkut@gmail.com>
Commit: rexim <reximkut@gmail.com>

    Merge branch 'master' into integration-test-recorder-115
    
    We need latest version of the game to proceed with the integration
    test case recording
---
 .travis.yml                |   2 +
 README.md                  |  31 +++---
 pacmacs-anim.el            |   2 +-
 pacmacs-board.el           |  27 +++--
 pacmacs-image.el           |   2 +-
 pacmacs-render.el          |   4 +-
 pacmacs-score.el           |   2 +-
 pacmacs-utils.el           |   2 +-
 pacmacs.el                 | 238 ++++++++++++++++++++++++---------------------
 sprites/Red-Ghost-Win.json |  27 +++++
 sprites/Red-Ghost-Win.xpm  |  49 ++++++++++
 sprites/src/Ghost.ase      | Bin 1918 -> 2144 bytes
 test/pacmacs-board-test.el |  32 +++---
 test/pacmacs-test.el       |  40 ++++----
 tools/compile.el           |  17 ++++
 15 files changed, 297 insertions(+), 178 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 1abcb9b596..bd89b63611 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -15,6 +15,8 @@ env:
   - EVM_EMACS=emacs-24.4-bin
   - EVM_EMACS=emacs-24.5-bin
 script:
+  - emacs --script ./tools/compile.el
+  - cask clean-elc
   - cask exec ert-runner
 notifications:
   email:
diff --git a/README.md b/README.md
index 40d8435032..485cda138b 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,12 @@
 
 Pacman for Emacs
 
+<p align="center">
+  <img 
src="https://cloud.githubusercontent.com/assets/5211845/10491579/9ba466b2-72a7-11e5-982c-579ed6abe1a5.gif";
 
href="https://www.reddit.com/r/emacs/comments/3opb5k/pacmacs_a_pacman_variant_for_emacs/"/>
+</p>
+
+(thanks to [@kaushalmodi](https://github.com/kaushalmodi) for the animation)
+
 ## Requirements ##
 
 - Emacs 24.3+
@@ -47,24 +53,23 @@ Only available in the `*Pacman*` buffer.
 ## Development ##
 
 Before developing the game please remove it from Emacs if it was
-installed before.
+installed before. You'll need [Cask][cask] to install the dependencies.
 
 I usually use the following workflow when I develop this game:
 
-1. `$ git clone git://github.com/rexim/pacmacs.el.git && cd pacmacs.el`;
-2. `M-x find-file RET /path/to/pacmacs.el/pacmacs.el RET`
-3. `M-x eval-expression RET (add-to-list 'load-path default-directory) RET`;
-4. `M-x eval-buffer RET`;
-5. `M-x pacmacs-start RET`;
-6. `M-x pacmacs-quit RET`;
-7. Change something in the source code;
-8. Go to the step 4.
+1. `$ git clone git://github.com/rexim/pacmacs.el.git && cd pacmacs.el && cask 
install`;
+2. `$ cask exec emacs`;
+3. `M-x find-file RET /path/to/pacmacs.el/pacmacs.el RET`
+4. `M-x eval-expression RET (add-to-list 'load-path default-directory) RET`;
+5. `M-x eval-buffer RET`;
+6. `M-x pacmacs-start RET`;
+7. `M-x pacmacs-quit RET`;
+8. Change something in the source code;
+9. Go to the step 5.
 
 ## Unit Tests ##
 
-For Unit Tests you need to install
-[Cask](http://cask.readthedocs.org/en/latest/) first. To run unit
-tests:
+For Unit Tests you need to install [Cask][cask] first. To run unit tests:
 
     $ cask # only once to download development dependencies
     $ cask exec ert-runner
@@ -77,3 +82,5 @@ license. All the work in the `sprites/` directory is 
distributed under
 
 Check `LICENSE.md` and `sprites/LICENSE.md` files for more
 information.
+
+[cask]: http://cask.readthedocs.org/en/latest/
diff --git a/pacmacs-anim.el b/pacmacs-anim.el
index 007837fbd1..7a3d6684cd 100644
--- a/pacmacs-anim.el
+++ b/pacmacs-anim.el
@@ -1,4 +1,4 @@
-;;; pacmacs-anim.el --- Pacman for Emacs
+;;; pacmacs-anim.el --- Pacman for Emacs -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015 Codingteam
 
diff --git a/pacmacs-board.el b/pacmacs-board.el
index a3deeaa812..837dfa91f6 100644
--- a/pacmacs-board.el
+++ b/pacmacs-board.el
@@ -1,4 +1,4 @@
-;;; pacmacs-board.el --- Pacman for Emacs
+;;; pacmacs-board.el --- Pacman for Emacs -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015 Codingteam
 
@@ -32,6 +32,8 @@
 
 ;;; Code:
 
+(require 'dash)
+(require 'dash-functional)
 (require 'pacmacs-utils)
 
 (defun pacmacs--make-board (width height)
@@ -42,7 +44,7 @@
           :height height
           :data board)))
 
-(defun pacmacs--cell-get (board row column)
+(defun pacmacs--cell-wrapped-get (board row column)
   (plist-bind ((width :width)
                (height :height)
                (data :data))
@@ -50,7 +52,7 @@
     (aref (aref data (mod row height))
           (mod column width))))
 
-(defun pacmacs--cell-set (board row column value)
+(defun pacmacs--cell-wrapped-set (board row column value)
   (plist-bind ((width :width)
                (height :height)
                (data :data))
@@ -59,18 +61,13 @@
           (mod column width)
           value)))
 
-(defun pacmacs--object-at-p (board row column objects)
-  (plist-bind ((width :width)
-               (height :height))
-      board
-    (member (cons (mod row height)
-                  (mod column width))
-            (mapcar #'(lambda (object)
-                        (plist-bind ((row :row)
-                                     (column :column))
-                            object
-                          (cons row column)))
-                    objects))))
+(defun pacmacs--object-type-at-p (board row column type)
+  (let ((cell (pacmacs--cell-wrapped-get board row column)))
+    (-find (-lambda (game-object)
+             (plist-bind ((object-type :type))
+                 game-object
+               (equal object-type type)))
+           cell)))
 
 (defun pacmacs--step-point (board row column direction)
   (plist-bind ((width :width)
diff --git a/pacmacs-image.el b/pacmacs-image.el
index be0d5fdbd5..25c30034a3 100644
--- a/pacmacs-image.el
+++ b/pacmacs-image.el
@@ -1,4 +1,4 @@
-;;; pacmacs-image.el --- Pacman for Emacs
+;;; pacmacs-image.el --- Pacman for Emacs -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015 Codingteam
 
diff --git a/pacmacs-render.el b/pacmacs-render.el
index 3485d75c6c..0a7e6f4bad 100644
--- a/pacmacs-render.el
+++ b/pacmacs-render.el
@@ -1,4 +1,4 @@
-;;; pacmacs-render.el --- Pacman for Emacs
+;;; pacmacs-render.el --- Pacman for Emacs -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015 Codingteam
 
@@ -68,7 +68,7 @@
       track-board
     (dotimes (row height)
       (dotimes (column width)
-        (let ((x (pacmacs--cell-get track-board row column)))
+        (let ((x (pacmacs--cell-wrapped-get track-board row column)))
           (cond
            ((null x)
             (insert "."))
diff --git a/pacmacs-score.el b/pacmacs-score.el
index 465b731c1b..64c6e25f3e 100644
--- a/pacmacs-score.el
+++ b/pacmacs-score.el
@@ -1,4 +1,4 @@
-;;; pacmacs-score.el --- Pacman for Emacs
+;;; pacmacs-score.el --- Pacman for Emacs -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015 Codingteam
 
diff --git a/pacmacs-utils.el b/pacmacs-utils.el
index 46371219ba..f4f603d9ac 100644
--- a/pacmacs-utils.el
+++ b/pacmacs-utils.el
@@ -1,4 +1,4 @@
-;;; pacmacs-utils.el --- Pacman for Emacs
+;;; pacmacs-utils.el --- Pacman for Emacs -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015 Codingteam
 
diff --git a/pacmacs.el b/pacmacs.el
index df1f115a99..39c5844bda 100644
--- a/pacmacs.el
+++ b/pacmacs.el
@@ -1,4 +1,4 @@
-;;; pacmacs.el --- Pacman for Emacs
+;;; pacmacs.el --- Pacman for Emacs -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015 Codingteam
 
@@ -6,7 +6,7 @@
 ;; Maintainer: Alexey Kutepov <reximkut@gmail.com>
 ;; URL: http://github.com/rexim/pacmacs.el
 ;; Version: 0.0.1
-;; Package-Requires: ((dash "2.11.0") (dash-functional "1.2.0") (cl-lib "0.5"))
+;; Package-Requires: ((dash "2.11.0") (dash-functional "1.2.0") (cl-lib "0.5") 
(f "0.18.0"))
 
 ;; Permission is hereby granted, free of charge, to any person
 ;; obtaining a copy of this software and associated documentation
@@ -53,18 +53,15 @@
 
 (defvar pacmacs-timer nil)
 
-(defvar pacmacs-board-width 10)
-(defvar pacmacs-board-height 10)
 (defvar pacmacs-score 0)
 
-(defvar pacmacs-player-state nil)
+(defvar pacmacs--player-state nil)
+(defvar pacmacs--ghosts nil)
+(defvar pacmacs--wall-cells nil)
+(defvar pacmacs--pills nil)
 
-(defvar pacmacs-ghosts nil)
-(defvar pacmacs-wall-cells nil)
-(defvar pacmacs-pills nil)
-
-(defvar pacmacs-board nil)
-(defvar pacmacs-track-board nil)
+(defvar pacmacs--object-board nil)
+(defvar pacmacs--track-board nil)
 
 (defvar pacmacs-play-pause nil)
 
@@ -112,7 +109,7 @@
     (setq pacmacs-timer nil)))
 
 (defun pacmacs--load-current-level ()
-  (pacmacs-load-map (aref pacmacs-levels
+  (pacmacs--load-map (aref pacmacs-levels
                           pacmacs-current-level)))
 
 (defun pacmacs--load-next-level ()
@@ -125,12 +122,14 @@
   (list :current-animation (pacmacs-make-anim (list (pacmacs-make-frame '(0 0 
40 40) 100))
                                               (pacmacs-create-color-block 40 
40 "red"))
         :row row
-        :column column))
+        :column column
+        :type 'wall))
 
 (defun pacmacs--make-pill (row column)
   (list :current-animation (pacmacs-load-anim "Pill")
         :row row
-        :column column))
+        :column column
+        :type 'pill))
 
 (defun pacmacs--make-ghost (row column)
   (list :row row
@@ -146,7 +145,8 @@
                                     'up    (pacmacs-load-anim "Red-Ghost-Up")
                                     'down  (pacmacs-load-anim 
"Red-Ghost-Down"))
         :speed 1
-        :speed-counter 0))
+        :speed-counter 0
+        :type 'ghost))
 
 (defun pacmacs--make-player (row column)
   (list :row row
@@ -162,21 +162,26 @@
                                     'up    (pacmacs-load-anim 
"Pacman-Chomping-Up")
                                     'down  (pacmacs-load-anim 
"Pacman-Chomping-Down"))
         :speed 0
-        :speed-counter 0))
+        :speed-counter 0
+        :type 'player))
 
 (defun pacmacs--reset-object-position (game-object)
   (plist-bind ((init-row :init-row)
                (init-column :init-column))
       game-object
+    (pacmacs--remove-object game-object)
     (plist-put game-object :row init-row)
-    (plist-put game-object :column init-column)))
+    (plist-put game-object :column init-column)
+    (pacmacs--put-object game-object)))
 
 (defun pacmacs--step-back-object (game-object)
   (plist-bind ((prev-row :prev-row)
                (prev-column :prev-column))
       game-object
+    (pacmacs--remove-object game-object)
     (plist-put game-object :row prev-row)
-    (plist-put game-object :column prev-column)))
+    (plist-put game-object :column prev-column)
+    (pacmacs--put-object game-object)))
 
 (defun pacmacs--kill-buffer-and-its-window (buffer-or-name)
   (let ((buffer-window (get-buffer-window buffer-or-name)))
@@ -187,19 +192,16 @@
       (kill-buffer buffer-or-name))))
 
 (defun pacmacs--wall-at-p (row column)
-  (pacmacs--object-at-p pacmacs-board
-                        row column
-                        pacmacs-wall-cells))
+  (pacmacs--object-type-at-p pacmacs--object-board
+                             row column 'wall))
 
 (defun pacmacs--pill-at-p (row column)
-  (pacmacs--object-at-p pacmacs-board
-                        row column
-                        pacmacs-pills))
+  (pacmacs--object-type-at-p pacmacs--object-board
+                             row column 'pill))
 
 (defun pacmacs--ghost-at-p (row column)
-  (pacmacs--object-at-p pacmacs-board
-                        row column
-                        pacmacs-ghosts))
+  (pacmacs--object-type-at-p pacmacs--object-board
+                             row column 'ghost))
 
 (defun pacmacs-quit ()
   (interactive)
@@ -207,7 +209,7 @@
     (pacmacs--kill-buffer-and-its-window pacmacs-buffer-name)))
 
 (defun pacmacs--cell-tracked-p (row column)
-  (pacmacs--cell-get pacmacs-track-board row column))
+  (pacmacs--cell-wrapped-get pacmacs--track-board row column))
 
 (defun pacmacs--switch-direction (game-object direction)
   (plist-bind ((direction-animations :direction-animations))
@@ -225,13 +227,15 @@
     (plist-put game-object :prev-row row)
     (plist-put game-object :prev-column column)
     (if (zerop speed-counter)
-        (let* ((new-point (pacmacs--step-point pacmacs-board row column 
direction))
+        (let* ((new-point (pacmacs--step-point pacmacs--object-board row 
column direction))
                (new-row (car new-point))
                (new-column (cdr new-point)))
           (plist-put game-object :speed-counter speed)
           (when (not (pacmacs--wall-at-p new-row new-column))
+            (pacmacs--remove-object game-object)
             (plist-put game-object :row new-row)
-            (plist-put game-object :column new-column)))
+            (plist-put game-object :column new-column)
+            (pacmacs--put-object game-object)))
       (plist-put game-object :speed-counter (1- speed-counter)))))
 
 (defun pacmacs--possible-ways (row column)
@@ -256,15 +260,15 @@
          (d-row (- end-row start-row))
          (d-column (- end-column start-column)))
     
-    (pacmacs--cell-set pacmacs-track-board
+    (pacmacs--cell-wrapped-set pacmacs--track-board
                        start-row start-column
                        (pacmacs--direction-name (cons d-row d-column)))))
 
 (defun pacmacs--recalc-track-board ()
-  (pacmacs--fill-board pacmacs-track-board nil)
+  (pacmacs--fill-board pacmacs--track-board nil)
   (plist-bind ((player-row :row)
                (player-column :column))
-      pacmacs-player-state
+      pacmacs--player-state
     (let ((wave (list (cons player-row player-column))))
       (while (not (null wave))
         (let ((next-wave nil))
@@ -284,7 +288,7 @@
   (plist-bind ((row :row)
                (column :column))
       game-object
-    (let ((direction (pacmacs--cell-get pacmacs-track-board row column)))
+    (let ((direction (pacmacs--cell-wrapped-get pacmacs--track-board row 
column)))
       (pacmacs--switch-direction game-object direction))))
 
 (defun pacmacs-tick ()
@@ -302,61 +306,57 @@
                                (pacmacs--load-next-level)
                                (pacmacs--switch-to-prepare-state)))))
 
-  (pacmacs-render-state))
+  (pacmacs--render-state))
 
 (defun pacmacs--step-ghosts ()
-  (dolist (ghost pacmacs-ghosts)
+  (dolist (ghost pacmacs--ghosts)
     (pacmacs--track-object ghost)
     (pacmacs--step-object ghost)))
 
 (defun pacmacs--detect-pill-collision ()
   (plist-bind ((row :row)
                (column :column))
-      pacmacs-player-state
+      pacmacs--player-state
     (-when-let (pill (pacmacs--pill-at-p row column))
       (setq pacmacs-score (+ pacmacs-score 10))
-      (setq pacmacs-pills
-            (cl-remove-if #'(lambda (pill)
-                              (plist-bind ((p-row :row)
-                                           (p-column :column))
-                                  pill
-                                (and (= row p-row)
-                                     (= column p-column))))
-                          pacmacs-pills)))))
+      (setq pacmacs--pills (-remove (-partial #'eql pill) pacmacs--pills))
+      (pacmacs--remove-object pill))))
 
 (defun pacmacs--ghost-collision-p ()
   (plist-bind ((row :row)
                (column :column))
-      pacmacs-player-state
+      pacmacs--player-state
     (pacmacs--ghost-at-p row column)))
 
 (defun pacmacs-play-state-logic ()
   (when (not pacmacs-play-pause)
-    (pacmacs--anim-object-next-frame pacmacs-player-state 
pacmacs-tick-duration-ms)
-    (pacmacs--anim-object-list-next-frame pacmacs-ghosts 
pacmacs-tick-duration-ms)
-    (pacmacs--anim-object-list-next-frame pacmacs-pills 
pacmacs-tick-duration-ms)
+    (pacmacs--anim-object-next-frame pacmacs--player-state 
pacmacs-tick-duration-ms)
+    (pacmacs--anim-object-list-next-frame pacmacs--ghosts 
pacmacs-tick-duration-ms)
+    (pacmacs--anim-object-list-next-frame pacmacs--pills 
pacmacs-tick-duration-ms)
 
     (pacmacs--recalc-track-board)
-    (if pacmacs-pills
+    (if pacmacs--pills
         (progn
-          (pacmacs--step-object pacmacs-player-state)
+          (pacmacs--step-object pacmacs--player-state)
           (if (pacmacs--ghost-collision-p)
-              (progn (pacmacs--step-back-object pacmacs-player-state)
+              (progn (pacmacs--step-back-object pacmacs--player-state)
                      (pacmacs--switch-to-death-state))
             (pacmacs--detect-pill-collision)
             (pacmacs--step-ghosts)
             (when (pacmacs--ghost-collision-p)
-              (dolist (ghost pacmacs-ghosts)
+              (dolist (ghost pacmacs--ghosts)
                 (pacmacs--step-back-object ghost))
               (pacmacs--switch-to-death-state))))
       (pacmacs--switch-to-level-beaten-state))))
 
 (defun pacmacs-death-state-logic ()
-  (pacmacs--anim-object-next-frame pacmacs-player-state
+  (pacmacs--anim-object-next-frame pacmacs--player-state
                                    pacmacs-tick-duration-ms)
+  (pacmacs--anim-object-list-next-frame pacmacs--ghosts
+                                        pacmacs-tick-duration-ms)
   
   (when (= 0 (plist-get
-              (plist-get pacmacs-player-state
+              (plist-get pacmacs--player-state
                          :current-animation)
               :current-frame))
     (if (<= pacmacs-lives 0)
@@ -369,31 +369,48 @@
     (cl-decf pacmacs-waiting-counter
              pacmacs-tick-duration-ms)))
 
-(defun pacmacs--put-object (anim-object)
-  (when anim-object
+(defun pacmacs--put-object (game-object)
+  (when game-object
+    (plist-bind ((row :row)
+                 (column :column))
+        game-object
+      (let ((cell (pacmacs--cell-wrapped-get pacmacs--object-board
+                                             row column)))
+        (pacmacs--cell-wrapped-set pacmacs--object-board row column
+                                   (cons game-object cell))))))
+
+(defun pacmacs--remove-object (game-object)
+  (when game-object
     (plist-bind ((row :row)
                  (column :column))
-        anim-object
-      (pacmacs--cell-set pacmacs-board row column anim-object))))
+        game-object
+      (let ((cell (pacmacs--cell-wrapped-get pacmacs--object-board
+                                             row column)))
+        (pacmacs--cell-wrapped-set pacmacs--object-board
+                                   row column
+                                   (-remove (-partial #'eql game-object) 
cell))))))
 
 (defun pacmacs--switch-to-death-state ()
   (setq pacmacs-game-state 'death)
   (cl-decf pacmacs-lives)
-  (plist-put pacmacs-player-state :current-animation
-             (pacmacs-load-anim "Pacman-Death")))
+  (plist-put pacmacs--player-state :current-animation
+             (pacmacs-load-anim "Pacman-Death"))
+  (dolist (ghost pacmacs--ghosts)
+    (plist-put ghost :current-animation
+               (pacmacs-load-anim "Red-Ghost-Win"))))
 
 (defun pacmacs--switch-to-game-over-state ()
   (setq pacmacs-game-state 'game-over)
-  (pacmacs-load-map "game-over")
+  (pacmacs--load-map "game-over")
   (pacmacs--register-new-score pacmacs-score))
 
 (defun pacmacs--switch-to-play-state ()
   (setq pacmacs-game-state 'play)
   (setq pacmacs-play-pause nil)
-  (pacmacs--reset-object-position pacmacs-player-state)
-  (dolist (ghost pacmacs-ghosts)
+  (pacmacs--reset-object-position pacmacs--player-state)
+  (dolist (ghost pacmacs--ghosts)
     (pacmacs--reset-object-position ghost))
-  (pacmacs--switch-direction pacmacs-player-state 'right))
+  (pacmacs--switch-direction pacmacs--player-state 'right))
 
 (defun pacmacs--switch-to-prepare-state ()
   (setq pacmacs-game-state 'prepare)
@@ -403,7 +420,21 @@
   (setq pacmacs-game-state 'level-beaten)
   (setq pacmacs-waiting-counter 1000))
 
-(defun pacmacs-render-state ()
+(defun pacmacs--fill-object-board ()
+  (pacmacs--fill-board pacmacs--object-board nil)
+
+  (dolist (pill pacmacs--pills)
+    (pacmacs--put-object pill))
+
+  (dolist (ghost pacmacs--ghosts)
+    (pacmacs--put-object ghost))
+
+  (pacmacs--put-object pacmacs--player-state)
+  
+  (dolist (wall pacmacs--wall-cells)
+    (pacmacs--put-object wall)))
+
+(defun pacmacs--render-state ()
   (with-current-buffer pacmacs-buffer-name
     (let ((inhibit-read-only t))
       (erase-buffer)
@@ -411,31 +442,20 @@
       (insert (format "Score: %d\n\n" pacmacs-score))
 
       (when pacmacs-debug-output
-        (pacmacs--render-track-board pacmacs-track-board))
-
-      (pacmacs--fill-board pacmacs-board nil)
-
-      (dolist (pill pacmacs-pills)
-        (pacmacs--put-object pill))
-
-      (dolist (ghost pacmacs-ghosts)
-        (pacmacs--put-object ghost))
-
-      (pacmacs--put-object pacmacs-player-state)
-      
-      (dolist (wall pacmacs-wall-cells)
-        (pacmacs--put-object wall))
+        (pacmacs--render-track-board pacmacs--track-board))
 
       (plist-bind ((width :width)
                    (height :height))
-          pacmacs-board
+          pacmacs--object-board
         (dotimes (row height)
           (dotimes (column width)
-            (let ((anim-object (pacmacs--cell-get pacmacs-board row column)))
+            (let ((anim-object (car (pacmacs--cell-wrapped-get 
pacmacs--object-board
+                                                               row column))))
               (pacmacs--render-object anim-object)))
           (insert "\n")))
       (insert "\n")
       (dotimes (i pacmacs-lives)
+        (ignore i)
         (pacmacs--render-life-icon))
 
       (when (equal pacmacs-game-state 'game-over)
@@ -444,29 +464,29 @@
             (pacmacs--render-score-table)))
       (goto-char 0))))
 
+(defun pacmacs--unpaused-play-state-p ()
+  (and (equal pacmacs-game-state 'play)
+       (not pacmacs-play-pause)))
+
 (defun pacmacs-up ()
   (interactive)
-  (when (and (equal pacmacs-game-state 'play)
-             (not pacmacs-play-pause))
-    (pacmacs--switch-direction pacmacs-player-state 'up)))
+  (when (pacmacs--unpaused-play-state-p)
+    (pacmacs--switch-direction pacmacs--player-state 'up)))
 
 (defun pacmacs-down ()
   (interactive)
-  (when (and (equal pacmacs-game-state 'play)
-             (not pacmacs-play-pause))
-    (pacmacs--switch-direction pacmacs-player-state 'down)))
+  (when (pacmacs--unpaused-play-state-p)
+    (pacmacs--switch-direction pacmacs--player-state 'down)))
 
 (defun pacmacs-left ()
   (interactive)
-  (when (and (equal pacmacs-game-state 'play)
-             (not pacmacs-play-pause))
-    (pacmacs--switch-direction pacmacs-player-state 'left)))
+  (when (pacmacs--unpaused-play-state-p)
+    (pacmacs--switch-direction pacmacs--player-state 'left)))
 
 (defun pacmacs-right ()
   (interactive)
-  (when (and (equal pacmacs-game-state 'play)
-             (not pacmacs-play-pause))
-    (pacmacs--switch-direction pacmacs-player-state 'right)))
+  (when (pacmacs--unpaused-play-state-p)
+    (pacmacs--switch-direction pacmacs--player-state 'right)))
 
 (defun pacmacs-pause ()
   (interactive)
@@ -480,7 +500,7 @@
        (-sort #'string-lessp)
        (apply #'vector)))
 
-(defun pacmacs-load-map (map-name)
+(defun pacmacs--load-map (map-name)
   (let* ((lines (split-string (->> map-name
                                    (format "./maps/%s.txt")
                                    (pacmacs--find-resource-file)
@@ -488,33 +508,31 @@
                               "\n" t))
          (board-width (apply 'max (mapcar #'length lines)))
          (board-height (length lines)))
-    (setq pacmacs-board-width board-width)
-    (setq pacmacs-board-height board-height)
-
-    (setq pacmacs-board (pacmacs--make-board pacmacs-board-width
-                                             pacmacs-board-height))
-    (setq pacmacs-track-board (pacmacs--make-board pacmacs-board-width
-                                                   pacmacs-board-height))
+    (setq pacmacs--object-board (pacmacs--make-board board-width
+                                                     board-height))
+    (setq pacmacs--track-board (pacmacs--make-board board-width
+                                                    board-height))
 
-    (setq pacmacs-wall-cells nil)
-    (setq pacmacs-pills nil)
-    (setq pacmacs-ghosts nil)
-    (setq pacmacs-player-state nil)
+    (setq pacmacs--wall-cells nil)
+    (setq pacmacs--pills nil)
+    (setq pacmacs--ghosts nil)
+    (setq pacmacs--player-state nil)
 
     (cl-loop
      for line being the element of lines using (index row)
      do (cl-loop for x being the element of line using (index column)
                  do (cond ((char-equal x ?#)
-                           (add-to-list 'pacmacs-wall-cells 
(pacmacs--make-wall-cell row column)))
+                           (add-to-list 'pacmacs--wall-cells 
(pacmacs--make-wall-cell row column)))
 
                           ((char-equal x ?.)
-                           (add-to-list 'pacmacs-pills (pacmacs--make-pill row 
column)))
+                           (add-to-list 'pacmacs--pills (pacmacs--make-pill 
row column)))
 
                           ((char-equal x ?o)
-                           (setq pacmacs-player-state (pacmacs--make-player 
row column)))
+                           (setq pacmacs--player-state (pacmacs--make-player 
row column)))
 
                           ((char-equal x ?g)
-                           (add-to-list 'pacmacs-ghosts (pacmacs--make-ghost 
row column))))))))
+                           (add-to-list 'pacmacs--ghosts (pacmacs--make-ghost 
row column))))))
+    (pacmacs--fill-object-board)))
 
 (provide 'pacmacs)
 
diff --git a/sprites/Red-Ghost-Win.json b/sprites/Red-Ghost-Win.json
new file mode 100644
index 0000000000..f5cf13dce4
--- /dev/null
+++ b/sprites/Red-Ghost-Win.json
@@ -0,0 +1,27 @@
+{ "frames": {
+   "Ghost 0.ase": {
+    "frame": { "x": 0, "y": 0, "w": 40, "h": 40 },
+    "rotated": false,
+    "trimmed": false,
+    "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
+    "sourceSize": { "w": 40, "h": 40 },
+    "duration": 200
+   },
+   "Ghost 1.ase": {
+    "frame": { "x": 40, "y": 0, "w": 40, "h": 40 },
+    "rotated": false,
+    "trimmed": false,
+    "spriteSourceSize": { "x": 0, "y": 0, "w": 40, "h": 40 },
+    "sourceSize": { "w": 40, "h": 40 },
+    "duration": 200
+   }
+ },
+ "meta": {
+  "app": "http://www.aseprite.org/";,
+  "version": "1.1.0-dev",
+  "image": "Red-Ghost-Win.xpm",
+  "format": "RGBA8888",
+  "size": { "w": 80, "h": 40 },
+  "scale": "1"
+ }
+}
diff --git a/sprites/Red-Ghost-Win.xpm b/sprites/Red-Ghost-Win.xpm
new file mode 100644
index 0000000000..4079a28bb7
--- /dev/null
+++ b/sprites/Red-Ghost-Win.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char *Red_Ghost_Win[] = {
+/* columns rows colors chars-per-pixel */
+"80 40 3 1 ",
+"  c #AC3232",
+". c #CBDBFC",
+"X c None",
+/* pixels */
+"XXXXXXXXXXXXXXX          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX          
XXXXXXXXXXXXXXX",
+"XXXXXXXXXXXX                XXXXXXXXXXXXXXXXXXXXXXXX                
XXXXXXXXXXXX",
+"XXXXXXXXXX                    XXXXXXXXXXXXXXXXXXXX                    
XXXXXXXXXX",
+"XXXXXXXXX                      XXXXXXXXXXXXXXXXXX                      
XXXXXXXXX",
+"XXXXXXX                          XXXXXXXXXXXXXX                          
XXXXXXX",
+"XXXXXX                            XXXXXXXXXXXX                            
XXXXXX",
+"XXXXX                              XXXXXXXXXX                              
XXXXX",
+"XXXX                                XXXXXXXX                                
XXXX",
+"XXXX                                XXXXXXXX                                
XXXX",
+"XXX                                  XXXXXX                                  
XXX",
+"XX                                    XXXX                                    
XX",
+"XX                                    XXXX                                    
XX",
+"X          ..              ..          XX          ..              ..         
 X",
+"X         ....            ....         XX         ....            ....        
 X",
+"X        ..  ..          ..  ..        XX        ..  ..          ..  ..       
 X",
+"        ..    ..        ..    ..                ..    ..        ..    ..      
  ",
+"       ..      ..      ..      ..              ..      ..      ..      ..     
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"                                                                              
  ",
+"          XXX              XXX                            XXXX                
  ",
+"         XXXXX            XXXXX                 X        XXXXXX        X      
  ",
+"X       XXXXXXX          XXXXXXX       X       XX       XXXXXXXX       XX     
  ",
+"X       XXXXXXX          XXXXXXX       X      XXX       XXXXXXXX       XXX    
  ",
+"X      XXXXXXXXX        XXXXXXXXX      X     XXXX      XXXXXXXXXX      XXXX   
  ",
+"XX    XXXXXXXXXXX      XXXXXXXXXXX    XX    XXXXX     XXXXXXXXXXXX     XXXXX  
  ",
+"XX    XXXXXXXXXXX      XXXXXXXXXXX    XX   XXXXXX    XXXXXXXXXXXXXX    XXXXXX 
  ",
+"XXX  XXXXXXXXXXXXX    XXXXXXXXXXXXX  XXX  XXXXXXXX  XXXXXXXXXXXXXXXX  
XXXXXXXX  "
+};
diff --git a/sprites/src/Ghost.ase b/sprites/src/Ghost.ase
index c17db360a0..151d81f4eb 100644
Binary files a/sprites/src/Ghost.ase and b/sprites/src/Ghost.ase differ
diff --git a/test/pacmacs-board-test.el b/test/pacmacs-board-test.el
index 61a850ccc3..f236b0bf86 100644
--- a/test/pacmacs-board-test.el
+++ b/test/pacmacs-board-test.el
@@ -10,14 +10,14 @@
     (should (equal expected-board
                    (pacmacs--make-board width height)))))
 
-(ert-deftest pacmacs--cell-get-test ()
+(ert-deftest pacmacs--cell-wrapped-get-test ()
   (let ((input-board (list :width 3
                            :height 2
                            :data [[nil nil nil]
                                   [nil 42 nil]])))
-    (should (equal 42 (pacmacs--cell-get input-board 1 1)))))
+    (should (equal 42 (pacmacs--cell-wrapped-get input-board 1 1)))))
 
-(ert-deftest pacmacs--cell-set-test ()
+(ert-deftest pacmacs--cell-wrapped-set-test ()
   (let ((input-board (list :width 3
                            :height 2
                            :data [[nil nil nil]
@@ -26,21 +26,23 @@
                               :height 2
                               :data [[nil nil nil]
                                      [nil 42 nil]])))
-    (pacmacs--cell-set input-board 1 1 42)
+    (pacmacs--cell-wrapped-set input-board 1 1 42)
     (should (equal expected-board
                    input-board))))
 
-(ert-deftest pacmacs--object-at-p-test ()
-  (let ((board (list :width 5
-                     :height 4))
-        (objects (-map #'(lambda (x)
-                           (list :row x
-                                 :column x))
-                       (number-sequence 0 3))))
-    (should (pacmacs--object-at-p board 0 0 objects))
-    (should (not (pacmacs--object-at-p board 0 1 objects)))
-    (should (pacmacs--object-at-p board 0 5 objects))
-    (should (not (pacmacs--object-at-p board 1 5 objects)))))
+(ert-deftest pacmacs--object-type-at-p-test ()
+  (let ((board (pacmacs--make-board 5 4)))
+    (dotimes (i 4)
+      (pacmacs--cell-wrapped-set
+       board i i
+       (list (list :row i
+                   :column i
+                   :type 'khooy))))
+
+    (should (pacmacs--object-type-at-p board 0 0 'khooy))
+    (should (not (pacmacs--object-type-at-p board 0 1 'khooy)))
+    (should (pacmacs--object-type-at-p board 0 5 'khooy))
+    (should (not (pacmacs--object-type-at-p board 1 5 'khooy)))))
 
 (ert-deftest pacmacs--step-point-test ()
   (let ((board (list :width 3
diff --git a/test/pacmacs-test.el b/test/pacmacs-test.el
index e27a3af2e1..b60732262c 100644
--- a/test/pacmacs-test.el
+++ b/test/pacmacs-test.el
@@ -1,31 +1,31 @@
 
 (ert-deftest pacmacs--cell-tracked-p-test ()
-  (let ((pacmacs-track-board (list :width 2
-                                   :height 2
-                                   :data [[nil nil]
-                                          ['left 'right]])))
+  (let ((pacmacs--track-board (list :width 2
+                                     :height 2
+                                     :data [[nil nil]
+                                            ['left 'right]])))
     (should (not (pacmacs--cell-tracked-p 0 0)))
     (should (pacmacs--cell-tracked-p 1 0))))
 
 (ert-deftest pacmacs--track-point-test ()
-  (let ((pacmacs-track-board (list :width 2
-                                   :height 2
-                                   :data [[nil nil]
-                                          [nil nil]])))
+  (let ((pacmacs--track-board (list :width 2
+                                     :height 2
+                                     :data [[nil nil]
+                                            [nil nil]])))
     (pacmacs--track-point (cons 0 0) (cons 0 1))
     (should (equal [[right nil]
                     [nil nil]]
-                   (plist-get pacmacs-track-board :data)))
+                   (plist-get pacmacs--track-board :data)))
     (pacmacs--track-point (cons 1 0) (cons 1 -1))
     (should (equal [[right nil]
                     [left nil]]
-                   (plist-get pacmacs-track-board :data)))))
+                   (plist-get pacmacs--track-board :data)))))
 
 (ert-deftest pacmacs--track-object-test ()
-  (let ((pacmacs-track-board (list :width 2
-                                   :height 2
-                                   :data [[right down]
-                                          [up left]]))
+  (let ((pacmacs--track-board (list :width 2
+                                     :height 2
+                                     :data [[right down]
+                                            [up left]]))
         (game-object (list :row 0
                            :column 0)))
     (with-mock
@@ -33,14 +33,14 @@
      (pacmacs--track-object game-object))))
 
 (ert-deftest pacmacs--put-object-test ()
-  (let ((pacmacs-board (list :width 2
-                             :height 2
-                             :data [[nil nil]
-                                    [nil nil]]))
+  (let ((pacmacs--object-board (list :width 2
+                                      :height 2
+                                      :data [[nil nil]
+                                             [nil nil]]))
         (anim-object (list :row 0 :column 1)))
     (pacmacs--put-object anim-object)
     (should (equal (list :width 2
                          :height 2
-                         :data [[nil (:row 0 :column 1)]
+                         :data [[nil ((:row 0 :column 1))]
                                 [nil nil]])
-                   pacmacs-board))))
+                   pacmacs--object-board))))
diff --git a/tools/compile.el b/tools/compile.el
new file mode 100755
index 0000000000..62520fa090
--- /dev/null
+++ b/tools/compile.el
@@ -0,0 +1,17 @@
+(require 'cask "~/.cask/cask.el")
+
+(let ((bundle (cask-initialize default-directory)))
+  (require 'dash)
+  (require 'dash-functional)
+  (require 'f)
+  (require 'bytecomp)
+  (let* ((byte-compile-error-on-warn t)
+         (load-path (cons (cask-path bundle) (cask-load-path bundle))))
+    (when (->> (cask-files bundle)
+               (-filter (-lambda (path)
+                          (and (f-file? path)
+                               (f-ext? path "el"))))
+               (-map (-lambda (file)
+                       (byte-compile-file file nil)))
+               (-any #'null))
+      (kill-emacs 1))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]