[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/pacmacs 07e18ca1e6 067/472: Implement pills. Close #34
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/pacmacs 07e18ca1e6 067/472: Implement pills. Close #34 |
Date: |
Thu, 6 Jan 2022 21:59:13 -0500 (EST) |
branch: elpa/pacmacs
commit 07e18ca1e608afd70f177f862949c49899a06aa3
Author: rexim <reximkut@gmail.com>
Commit: rexim <reximkut@gmail.com>
Implement pills. Close #34
---
pacman.el | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 62 insertions(+), 13 deletions(-)
diff --git a/pacman.el b/pacman.el
index 695ffd4eb3..23507e240b 100644
--- a/pacman.el
+++ b/pacman.el
@@ -46,28 +46,34 @@
(defvar pacman-board-width 10)
(defvar pacman-board-height 10)
+
(defvar pacman-player-state nil)
+(setq pacman-player-state
+ (list :row 0
+ :column 0
+ :direction 'right
+ :animation (pacman-load-anim "Pacman-Chomping-Right")))
+
(defvar pacman-direction-table
(list 'left (cons -1 0)
'right (cons 1 0)
'up (cons 0 -1)
'down (cons 0 1)))
+
(defvar pacman-direction-animation-table
(list 'left (pacman-load-anim "Pacman-Chomping-Left")
'right (pacman-load-anim "Pacman-Chomping-Right")
'up (pacman-load-anim "Pacman-Chomping-Up")
'down (pacman-load-anim "Pacman-Chomping-Down")))
-(setq pacman-player-state
- (list :row 0
- :column 0
- :direction 'right
- :animation (pacman-load-anim "Pacman-Chomping-Right")))
+
(defvar pacman-empty-cell nil)
(setq pacman-empty-cell
(list :animation
(pacman-make-anim '((0 0 40 40))
(pacman-create-transparent-block 40 40))))
+(defvar pacman-score 0)
+
(defun pacman--make-wall-cell (row column)
(list :animation (pacman-make-anim '((0 0 40 40))
(pacman-create-color-block 40 40 "red"))
@@ -80,6 +86,18 @@
(pacman--make-wall-cell n n))
(number-sequence 1 9)))
+
+(defun pacman--make-pill (row column)
+ (list :animation (pacman-load-anim "Pill")
+ :row row
+ :column column))
+
+(defvar pacman-pills nil)
+(setq pacman-pills
+ (mapcar (lambda (n)
+ (pacman--make-pill n (1+ n)))
+ (number-sequence 1 8)))
+
(defun pacman-init-board (width height)
(let ((board (make-vector height nil)))
(dotimes (row height)
@@ -119,14 +137,20 @@
(kill-buffer-and-window))
(kill-buffer buffer-or-name))))
-(defun pacman--wall-at-p (row column)
+(defun pacman--object-at-p (row column objects)
(member (cons row column)
- (mapcar (lambda (wall)
+ (mapcar (lambda (object)
(plist-bind ((row :row)
(column :column))
- wall
+ object
(cons row column)))
- pacman-wall-cells)))
+ objects)))
+
+(defun pacman--wall-at-p (row column)
+ (pacman--object-at-p row column pacman-wall-cells))
+
+(defun pacman--pill-at-p (row column)
+ (pacman--object-at-p row column pacman-pills))
(defun pacman-quit ()
(interactive)
@@ -151,13 +175,30 @@
(interactive)
(with-current-buffer pacman-buffer-name
(let ((inhibit-read-only t))
- (setq pacman-player-state
- (pacman-anim-object-next-frame pacman-player-state))
+ (pacman-anim-object-next-frame pacman-player-state)
+ (dolist (pill pacman-pills)
+ (pacman-anim-object-next-frame pill))
+
(pacman-step-object pacman-player-state)
(let* ((direction (plist-get pacman-player-state :direction))
(animation (plist-get pacman-direction-animation-table
direction)))
(plist-put pacman-player-state :animation animation))
+ (plist-bind ((row :row)
+ (column :column))
+ pacman-player-state
+ (let ((pill (pacman--pill-at-p row column)))
+ (when pill
+ (setq pacman-score (+ pacman-score 10))
+ (setq pacman-pills
+ (remove-if (lambda (pill)
+ (plist-bind ((p-row :row)
+ (p-column :column))
+ pill
+ (and (= row p-row)
+ (= column p-column))))
+ pacman-pills)))))
+
(erase-buffer)
(pacman-render-state))))
@@ -173,14 +214,22 @@
(aset (aref pacman-board row) column pacman-empty-cell))))
(defun pacman-put-object (anim-object)
- (plist-bind ((row :row) (column :column))
+ (plist-bind ((row :row)
+ (column :column))
anim-object
- (aset (aref pacman-board row) column anim-object)))
+ (when (and (<= 0 row (1- pacman-board-height))
+ (<= 0 column (1- pacman-board-width)))
+ (aset (aref pacman-board row) column anim-object))))
(defun pacman-render-state ()
+ (insert (format "Score: %d\n" pacman-score))
+
(pacman-clear-board)
(pacman-put-object pacman-player-state)
+ (dolist (pill pacman-pills)
+ (pacman-put-object pill))
+
(dolist (wall pacman-wall-cells)
(pacman-put-object wall))
- [nongnu] elpa/pacmacs cb29133875 045/472: Add UT for pacman-load-anim function, (continued)
- [nongnu] elpa/pacmacs cb29133875 045/472: Add UT for pacman-load-anim function, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 14e4a5a771 046/472: Mystical cookies appear! Close #15, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 39f6dbc6a3 049/472: Merge branch 'pacman-mechanics-5'. Close #5, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 4aa010be6e 051/472: Fix the Aseprite animation UTs. Close #31, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 4e935a6d89 050/472: The 4th mystical cookie appears! Close #30, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs fbde339ff0 052/472: All the mystical cookies are merged into one! Close #15, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 1efc678194 053/472: Implement сonveyor rendering. Close #35, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 1414723d42 059/472: Implement wall mechanics. Close #36, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 420c485197 054/472: Implement pacman mechanics. Close #32, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs c20aa8089c 058/472: Implement plist-bind macro. Close #47, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 07e18ca1e6 067/472: Implement pills. Close #34,
ELPA Syncer <=
- [nongnu] elpa/pacmacs ef0cd69d99 072/472: Add copyright header to pacman-utils module, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 66f585899a 080/472: Fix pacman image UTs, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs f7b17f7cde 079/472: Set same background as foreground for color block. Close #59, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 28fc537f40 084/472: Multiple ghost support. Close #64, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs d637985f0b 095/472: Fix BFS wraparound bug. Close #73, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 952801d94a 098/472: UT for pacmacs--fill-board-test (#75), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 428b994240 096/472: Remove debug output stuff, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 9614f394e7 106/472: Merge branch 'board-functions-uts-75'. Close #75, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 1e29c2f943 101/472: UTs for pacmacs--cell-tracked-p (#75), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 0839611f42 108/472: Refactor out pacmacs--make-board function (#74), ELPA Syncer, 2022/01/06