[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/pacmacs d2c449734e 124/472: Merge branch 'pacman-death-69'
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/pacmacs d2c449734e 124/472: Merge branch 'pacman-death-69'. Close #69 |
Date: |
Thu, 6 Jan 2022 21:59:18 -0500 (EST) |
branch: elpa/pacmacs
commit d2c449734e938b75f54cf24c1d7ab4366e407aa9
Merge: 7e8970628c 91c317819c
Author: rexim <reximkut@gmail.com>
Commit: rexim <reximkut@gmail.com>
Merge branch 'pacman-death-69'. Close #69
---
maps/map05.txt | 7 +++
pacmacs.el | 132 ++++++++++++++++++++++++++++++++++++++++-----------------
2 files changed, 99 insertions(+), 40 deletions(-)
diff --git a/maps/map05.txt b/maps/map05.txt
new file mode 100644
index 0000000000..a045f8d51e
--- /dev/null
+++ b/maps/map05.txt
@@ -0,0 +1,7 @@
+##########
+#o.......#
+#. #
+#. #
+#. #
+#. g#
+##########
diff --git a/pacmacs.el b/pacmacs.el
index 691946b85d..0bb23a78b6 100644
--- a/pacmacs.el
+++ b/pacmacs.el
@@ -70,6 +70,8 @@
(defvar pacmacs-board nil)
(defvar pacmacs-track-board nil)
+(defvar pacmacs-game-state 'play)
+
(define-derived-mode pacmacs-mode special-mode "pacmacs-mode"
(define-key pacmacs-mode-map (kbd "<up>") 'pacmacs-up)
(define-key pacmacs-mode-map (kbd "<down>") 'pacmacs-down)
@@ -83,7 +85,7 @@
(interactive)
(switch-to-buffer-other-window pacmacs-buffer-name)
(pacmacs-mode)
- (pacmacs-load-map "map02")
+ (pacmacs-load-map "map05")
(unless pacmacs-timer
(setq pacmacs-timer (run-at-time nil (* pacmacs-tick-duration-ms 0.001)
'pacmacs-tick))))
@@ -106,6 +108,8 @@
(defun pacmacs--make-ghost (row column)
(list :row row
:column column
+ :init-row row
+ :init-column column
:direction 'right
:current-animation (pacmacs-load-anim "Red-Ghost-Right")
:direction-animations (list 'left (pacmacs-load-anim "Red-Ghost-Left")
@@ -118,6 +122,8 @@
(defun pacmacs--make-player (row column)
(list :row row
:column column
+ :init-row row
+ :init-column column
:direction 'right
:current-animation (pacmacs-load-anim "Pacman-Chomping-Right")
:direction-animations (list 'left (pacmacs-load-anim
"Pacman-Chomping-Left")
@@ -127,6 +133,13 @@
:speed 0
:speed-counter 0))
+(defun pacmacs--reset-object-position (game-object)
+ (plist-bind ((init-row :init-row)
+ (init-column :init-column))
+ game-object
+ (plist-put game-object :row init-row)
+ (plist-put game-object :column init-column)))
+
(defun pacmacs--kill-buffer-and-its-window (buffer-or-name)
(let ((buffer-window (get-buffer-window buffer-or-name)))
(if (and buffer-window
@@ -145,6 +158,11 @@
row column
pacmacs-pills))
+(defun pacmacs--ghost-at-p (row column)
+ (pacmacs--object-at-p pacmacs-board
+ row column
+ pacmacs-ghosts))
+
(defun pacmacs-quit ()
(interactive)
(when (get-buffer pacmacs-buffer-name)
@@ -243,37 +261,56 @@
(interactive)
(with-current-buffer pacmacs-buffer-name
(let ((inhibit-read-only t))
- (pacmacs-anim-object-next-frame pacmacs-player-state
pacmacs-tick-duration-ms)
- (dolist (ghost pacmacs-ghosts)
- (pacmacs-anim-object-next-frame ghost pacmacs-tick-duration-ms))
- (dolist (pill pacmacs-pills)
- (pacmacs-anim-object-next-frame pill pacmacs-tick-duration-ms))
-
- (pacmacs-step-object pacmacs-player-state)
-
- (plist-bind ((row :row)
- (column :column))
- pacmacs-player-state
- (let ((pill (pacmacs--pill-at-p row column)))
- (when pill
- (setq pacmacs-score (+ pacmacs-score 10))
- (setq pacmacs-pills
- (remove-if #'(lambda (pill)
- (plist-bind ((p-row :row)
- (p-column :column))
- pill
- (and (= row p-row)
- (= column p-column))))
- pacmacs-pills)))))
-
- (pacmacs--recalc-track-board)
- (dolist (ghost pacmacs-ghosts)
- (pacmacs--track-object ghost)
- (pacmacs-step-object ghost))
-
+
+ (cond
+ ((equal pacmacs-game-state 'play)
+ (pacmacs-play-state-logic))
+ ((equal pacmacs-game-state 'death)
+ (pacmacs-death-state-logic)))
+
(erase-buffer)
(pacmacs-render-state))))
+(defun pacmacs-play-state-logic ()
+ (pacmacs-anim-object-next-frame pacmacs-player-state
pacmacs-tick-duration-ms)
+ (dolist (ghost pacmacs-ghosts)
+ (pacmacs-anim-object-next-frame ghost pacmacs-tick-duration-ms))
+ (dolist (pill pacmacs-pills)
+ (pacmacs-anim-object-next-frame pill pacmacs-tick-duration-ms))
+
+ (pacmacs-step-object pacmacs-player-state)
+ (pacmacs--recalc-track-board)
+ (dolist (ghost pacmacs-ghosts)
+ (pacmacs--track-object ghost)
+ (pacmacs-step-object ghost))
+
+ (plist-bind ((row :row)
+ (column :column))
+ pacmacs-player-state
+ (-when-let (pill (pacmacs--pill-at-p row column))
+ (setq pacmacs-score (+ pacmacs-score 10))
+ (setq pacmacs-pills
+ (remove-if #'(lambda (pill)
+ (plist-bind ((p-row :row)
+ (p-column :column))
+ pill
+ (and (= row p-row)
+ (= column p-column))))
+ pacmacs-pills)))
+
+ (-when-let (ghost (pacmacs--ghost-at-p row column))
+ (pacmacs--switch-to-death-state))))
+
+
+(defun pacmacs-death-state-logic ()
+ (pacmacs-anim-object-next-frame pacmacs-player-state
+ pacmacs-tick-duration-ms)
+ (when (= 0 (plist-get
+ (plist-get pacmacs-player-state
+ :current-animation)
+ :current-frame))
+ (pacmacs--switch-to-play-state)))
+
(defun pacmacs-render-object (anim-object)
(let* ((anim (plist-get anim-object :current-animation))
(sprite-sheet (plist-get anim :sprite-sheet))
@@ -286,6 +323,18 @@
anim-object
(pacmacs--cell-set pacmacs-board row column anim-object)))
+(defun pacmacs--switch-to-death-state ()
+ (setq pacmacs-game-state 'death)
+ (plist-put pacmacs-player-state :current-animation
+ (pacmacs-load-anim "Pacman-Death")))
+
+(defun pacmacs--switch-to-play-state ()
+ (setq pacmacs-game-state 'play)
+ (pacmacs--reset-object-position pacmacs-player-state)
+ (dolist (ghost pacmacs-ghosts)
+ (pacmacs--reset-object-position ghost))
+ (pacmacs--switch-direction pacmacs-player-state 'right))
+
(defun pacmacs-render-track-board ()
(plist-bind ((width :width)
(height :height))
@@ -314,13 +363,13 @@
(pacmacs--fill-board pacmacs-board (pacmacs--make-empty-cell))
- (pacmacs--put-object pacmacs-player-state)
-
(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))
@@ -336,19 +385,23 @@
(defun pacmacs-up ()
(interactive)
- (pacmacs--switch-direction pacmacs-player-state 'up))
+ (when (equal pacmacs-game-state 'play)
+ (pacmacs--switch-direction pacmacs-player-state 'up)))
(defun pacmacs-down ()
(interactive)
- (pacmacs--switch-direction pacmacs-player-state 'down))
+ (when (equal pacmacs-game-state 'play)
+ (pacmacs--switch-direction pacmacs-player-state 'down)))
(defun pacmacs-left ()
(interactive)
- (pacmacs--switch-direction pacmacs-player-state 'left))
+ (when (equal pacmacs-game-state 'play)
+ (pacmacs--switch-direction pacmacs-player-state 'left)))
(defun pacmacs-right ()
(interactive)
- (pacmacs--switch-direction pacmacs-player-state 'right))
+ (when (equal pacmacs-game-state 'play)
+ (pacmacs--switch-direction pacmacs-player-state 'right)))
(defun pacmacs--file-content (filename)
(with-temp-buffer
@@ -381,13 +434,12 @@
(add-to-list 'pacmacs-pills (pacmacs--make-pill row
column)))
((char-equal x ?o)
- (if (not pacmacs-player-state)
- (setq pacmacs-player-state (pacmacs--make-player
row column))
- (plist-put pacmacs-player-state :row row)
- (plist-put pacmacs-player-state :column 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--switch-to-play-state)))
(provide 'pacmacs)
- [nongnu] elpa/pacmacs 69d47fbb9a 075/472: Merge branch 'pacman-utils-ut-54'. Close #54, (continued)
- [nongnu] elpa/pacmacs 69d47fbb9a 075/472: Merge branch 'pacman-utils-ut-54'. Close #54, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 7d16738069 077/472: Implement custom map format. Close #61, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 6d1831c746 081/472: Implement ghost mechanics. Close #62, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 427b4f823e 088/472: Add edebug specs for plist-bind macro (#68), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 1ed7f14e30 099/472: UTs for pacmacs--init-board-test (#75), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs a802074eea 109/472: Add set/get functions for board (#74), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs de66c1ce17 112/472: Refactor out pacmacs--step-point (#74), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs b0561eb59f 111/472: Refactor pacmacs--cell-tracked-p (#74), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 317f9b85b7 114/472: Refactor pacmacs--track-point (#74), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 5233bac0c5 105/472: UT for pacmacs--put-object-test (#75), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs d2c449734e 124/472: Merge branch 'pacman-death-69'. Close #69,
ELPA Syncer <=
- [nongnu] elpa/pacmacs 1ed9c057cc 127/472: Add padding above the lives, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 9e7f67e368 126/472: Implement live mechanics. Close #86, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 86d701a167 131/472: Introduce pacmacs--load-next-level, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 3d49405193 136/472: Reset the score on start, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs a0e3b6fe73 138/472: Implement level is beaten state. Close #99, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 359a0facc5 140/472: Optimize empty cell rendering, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 420dbec3e6 150/472: Register score on Game Over (#92), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 6f174d6239 156/472: Access resources in more general way (#95), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 330c69201f 160/472: Fix UTs, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 131a070556 163/472: Merge pull request #110 from syohex/fix-package, ELPA Syncer, 2022/01/06