[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/pacmacs 1414723d42 059/472: Implement wall mechanics. Clos
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/pacmacs 1414723d42 059/472: Implement wall mechanics. Close #36 |
Date: |
Thu, 6 Jan 2022 21:59:12 -0500 (EST) |
branch: elpa/pacmacs
commit 1414723d42efa4099f02cfe60cc153895eb9e39d
Author: rexim <reximkut@gmail.com>
Commit: rexim <reximkut@gmail.com>
Implement wall mechanics. Close #36
---
pacman-utils.el | 6 +++---
pacman.el | 56 +++++++++++++++++++++++++++++++++++++++++++-------------
2 files changed, 46 insertions(+), 16 deletions(-)
diff --git a/pacman-utils.el b/pacman-utils.el
index 42630b2184..46ff4901d2 100644
--- a/pacman-utils.el
+++ b/pacman-utils.el
@@ -3,9 +3,9 @@
(declare (indent 2) (debug t))
(let ((expr-name (gensym)))
`(let* ((,expr-name ,expr)
- ,@(mapcar '(lambda (key)
- (cons (car key)
- `((plist-get ,expr-name ,(cadr key)))))
+ ,@(mapcar #'(lambda (key)
+ (cons (car key)
+ `((plist-get ,expr-name ,(cadr key)))))
keys))
,@body)))
diff --git a/pacman.el b/pacman.el
index ced8f1a934..dbff9f7b22 100644
--- a/pacman.el
+++ b/pacman.el
@@ -37,6 +37,7 @@
(require 'pacman-anim)
(require 'pacman-resources)
+(require 'pacman-utils)
(defconst pacman-buffer-name "*Pacman*")
@@ -74,6 +75,22 @@
40 (make-bool-vector 40 nil))
'xbm t :width 40 :height 40))))
+(defun pacman--make-wall-cell (row column)
+ (list :animation (pacman-make-anim '((0 0 40 40))
+ (create-image
+ (make-vector
+ 40 (make-bool-vector 40 t))
+ 'xbm t :width 40 :height 40
+ :foreground "red"))
+ :row row
+ :column column))
+
+(defvar pacman-wall-cells nil)
+(setq pacman-wall-cells
+ (mapcar (lambda (n)
+ (pacman--make-wall-cell n n))
+ (number-sequence 1 9)))
+
(defun pacman-init-board (width height)
(let ((board (make-vector height nil)))
(dotimes (row height)
@@ -113,23 +130,33 @@
(kill-buffer-and-window))
(kill-buffer buffer-or-name))))
+(defun pacman--wall-at-p (row column)
+ (member (cons row column)
+ (mapcar (lambda (wall)
+ (plist-bind ((row :row)
+ (column :column))
+ wall
+ (cons row column)))
+ pacman-wall-cells)))
+
(defun pacman-quit ()
(interactive)
(when (get-buffer pacman-buffer-name)
(pacman--kill-buffer-and-its-window pacman-buffer-name)))
(defun pacman-step-object (game-object)
- (let* ((row (plist-get game-object :row))
- (column (plist-get game-object :column))
- (direction (plist-get game-object :direction))
- (velocity (plist-get pacman-direction-table direction))
- (new-row (+ row (cdr velocity)))
- (new-column (+ column (car velocity))))
- (when (and (<= 0 new-row (1- pacman-board-height))
- (<= 0 new-column (1- pacman-board-width)))
- (plist-put game-object :row new-row)
- (plist-put game-object :column new-column))))
-
+ (plist-bind ((row :row)
+ (column :column)
+ (direction :direction))
+ game-object
+ (let* ((velocity (plist-get pacman-direction-table direction))
+ (new-row (+ row (cdr velocity)))
+ (new-column (+ column (car velocity))))
+ (when (and (<= 0 new-row (1- pacman-board-height))
+ (<= 0 new-column (1- pacman-board-width))
+ (not (pacman--wall-at-p new-row new-column)))
+ (plist-put game-object :row new-row)
+ (plist-put game-object :column new-column)))))
(defun pacman-tick ()
(interactive)
@@ -157,14 +184,17 @@
(aset (aref pacman-board row) column pacman-empty-cell))))
(defun pacman-put-object (anim-object)
- (let* ((row (plist-get anim-object :row))
- (column (plist-get anim-object :column)))
+ (plist-bind ((row :row) (column :column))
+ anim-object
(aset (aref pacman-board row) column anim-object)))
(defun pacman-render-state ()
(pacman-clear-board)
(pacman-put-object pacman-player-state)
+ (dolist (wall pacman-wall-cells)
+ (pacman-put-object wall))
+
(dotimes (row pacman-board-height)
(dotimes (column pacman-board-width)
(let ((anim-object (aref (aref pacman-board row) column)))
- [nongnu] elpa/pacmacs 3554251103 033/472: Add coveralls badge (#27), (continued)
- [nongnu] elpa/pacmacs 3554251103 033/472: Add coveralls badge (#27), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 56968d5966 034/472: Require undercover in test-helpers (#27), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 833e2d8de2 041/472: Add a note about the licensing to README (#28), ELPA Syncer, 2022/01/06
- [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 <=
- [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, 2022/01/06
- [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