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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/pacmacs 25193bcdbf 289/472: Better running away algorithm


From: ELPA Syncer
Subject: [nongnu] elpa/pacmacs 25193bcdbf 289/472: Better running away algorithm (#153)
Date: Thu, 6 Jan 2022 21:59:32 -0500 (EST)

branch: elpa/pacmacs
commit 25193bcdbfe4e934be7b3a3a31bc5ea65a46be55
Author: rexim <reximkut@gmail.com>
Commit: rexim <reximkut@gmail.com>

    Better running away algorithm (#153)
---
 pacmacs-utils.el |  6 ++++++
 pacmacs.el       | 37 ++++++++++++++++++++++++++++---------
 2 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/pacmacs-utils.el b/pacmacs-utils.el
index f00b07a980..c3650756d6 100644
--- a/pacmacs-utils.el
+++ b/pacmacs-utils.el
@@ -64,6 +64,12 @@ side-effects."
                                'down  (cons  1  0))))
     (plist-get direction-table direction)))
 
+(defun pacmacs--squared-distance (row1 column1 row2 column2)
+  (let ((d-row (- row2 row1))
+        (d-column (- column2 column1)))
+      (+ (* d-row d-row)
+         (* d-column d-column))))
+
 (defun pacmacs--direction-name (direction-vector)
   (let ((direction-table '((( 0 . -1) . left)
                            (( 0 .  1) . right)
diff --git a/pacmacs.el b/pacmacs.el
index 439e8ec689..3b444f6696 100644
--- a/pacmacs.el
+++ b/pacmacs.el
@@ -336,13 +336,6 @@
     (let ((direction (pacmacs--cell-wrapped-get pacmacs--track-board row 
column)))
       (pacmacs--switch-direction game-object direction))))
 
-(defun pacmacs--back-track-object (game-object)
-  (plist-bind ((row :row)
-               (column :column))
-      game-object
-    (let ((direction (pacmacs--cell-wrapped-get pacmacs--track-board row 
column)))
-      (pacmacs--switch-direction game-object (pacmacs--opposite-direction-name 
direction)))))
-
 (defun pacmacs-tick ()
   (interactive)
 
@@ -365,10 +358,36 @@
     (pacmacs--track-object ghost)
     (pacmacs--step-object ghost)))
 
+(defun pacmacs--run-away-direction (game-object-1 game-object-2)
+  (plist-bind ((row-1 :row)
+               (column-1 :column))
+      game-object-1
+    (plist-bind ((row-2 :row)
+                 (column-2 :column))
+        game-object-2
+      (let* ((current-distance (pacmacs--squared-distance row-1 column-1
+                                                          row-2 column-2))
+             (possible-ways
+              (->> (pacmacs--possible-side-ways row-1 column-1)
+                   (-remove (-lambda ((row . column))
+                              (or (pacmacs--wall-at-p row column)
+                                  (> current-distance
+                                     (pacmacs--squared-distance row column
+                                                                row-2 
column-2))))))))
+        (-when-let ((row . column) (car possible-ways))
+          (pacmacs--direction-name (cons (- row row-1)
+                                         (- column column-1))))))))
+
 (defun pacmacs--step-terrified-ghosts ()
   (dolist (terrified-ghost pacmacs--terrified-ghosts)
-    (pacmacs--back-track-object terrified-ghost)
-    (pacmacs--step-object terrified-ghost)))
+    (plist-bind ((row :row)
+                 (column :column))
+        terrified-ghost
+      (-when-let (direction (pacmacs--run-away-direction
+                             terrified-ghost
+                             pacmacs--player-state))
+        (pacmacs--switch-direction terrified-ghost direction))
+      (pacmacs--step-object terrified-ghost))))
 
 (defun pacmacs--detect-pill-collision ()
   (plist-bind ((row :row)



reply via email to

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