branch: elpa/pacmacs
commit 25193bcdbfe4e934be7b3a3a31bc5ea65a46be55
Author: rexim <[email protected]>
Commit: rexim <[email protected]>
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)