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

[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)))



reply via email to

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