[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))))
- [nongnu] elpa/pacmacs bb622648e3 162/472: Add Package-Requires header for dependencies, (continued)
- [nongnu] elpa/pacmacs bb622648e3 162/472: Add Package-Requires header for dependencies, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 0c0aee723a 170/472: Fix regexp bug in pacmacs--levelname-from-filename, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs f28d928e89 177/472: Update README.md, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 8b44939a29 179/472: Merge pull request #121 from kRITZCREEK/master, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 368609060e 182/472: Add Win animation for Ghost. Close #90, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 2c1881afdf 185/472: Compile the project on CI (#123), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 94c3a3cc1e 191/472: Merge branch 'master' into board-refactoring-105, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs b03ee65528 195/472: Merge branch 'board-refactoring-105'. Close #105, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs f84acb56ad 201/472: Double dash load-map function (#126), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs e13b23bc34 206/472: Remove object-at-p predicate, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 0c0f6c141c 210/472: Merge branch 'master' into integration-test-recorder-115,
ELPA Syncer <=
- [nongnu] elpa/pacmacs e64420ace4 209/472: Fix meta for Red-Ghost-Win animation, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs bfb089d1de 213/472: Exctract init code to a function (#115), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 09c0a15f40 217/472: Get pacmacs--object-at-p back (#122), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs daca08b8b1 219/472: Add another it case (#122), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs ed46a4b500 221/472: Add big pills sprites. Close #82, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs ca32745bcb 224/472: Refactor char making duplicate code (#81), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 5f7b4fcb12 235/472: Rename pacmacs--put-dot function (#131), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs ba28d344be 068/472: Remove copypaste (#54), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 49e0ff0fe8 020/472: Cask: take package info from pacman.el file, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 7a8db8e06c 228/472: Merge branch 'xbm-flip-bit-hack-133'. Close #133, ELPA Syncer, 2022/01/06