[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/pacmacs cede2ffb48 202/472: Optimize object look up (#126)
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/pacmacs cede2ffb48 202/472: Optimize object look up (#126): |
Date: |
Thu, 6 Jan 2022 21:59:24 -0500 (EST) |
branch: elpa/pacmacs
commit cede2ffb48a043b175bd06f1b16ec951533ca2ac
Author: rexim <reximkut@gmail.com>
Commit: rexim <reximkut@gmail.com>
Optimize object look up (#126):
- Gradually update the object board
- Make loop-up function use object board
---
pacmacs-board.el | 27 ++++++++++++++------
pacmacs.el | 78 ++++++++++++++++++++++++++++++--------------------------
2 files changed, 61 insertions(+), 44 deletions(-)
diff --git a/pacmacs-board.el b/pacmacs-board.el
index f00c47b2d0..18e8814bb1 100644
--- a/pacmacs-board.el
+++ b/pacmacs-board.el
@@ -32,6 +32,8 @@
;;; Code:
+(require 'dash)
+(require 'dash-functional)
(require 'pacmacs-utils)
(defun pacmacs--make-board (width height)
@@ -63,14 +65,23 @@
(plist-bind ((width :width)
(height :height))
board
- (member (cons (mod row height)
- (mod column width))
- (mapcar #'(lambda (object)
- (plist-bind ((row :row)
- (column :column))
- object
- (cons row column)))
- objects))))
+ (let ((wrapped-row (mod row height))
+ (wrapped-column (mod column width)))
+ (-find (-lambda (object)
+ (plist-bind ((object-row :row)
+ (object-column :column))
+ object
+ (and (= object-row wrapped-row)
+ (= object-column wrapped-column))))
+ objects))))
+
+(defun pacmacs--object-type-at-p (board row column type)
+ (let ((cell (pacmacs--cell-wrapped-get board row column)))
+ (-find (-lambda (game-object)
+ (plist-bind ((object-type :type))
+ game-object
+ (equal object-type type)))
+ cell)))
(defun pacmacs--step-point (board row column direction)
(plist-bind ((width :width)
diff --git a/pacmacs.el b/pacmacs.el
index 2d8d696d78..2dee7a0ee2 100644
--- a/pacmacs.el
+++ b/pacmacs.el
@@ -122,12 +122,14 @@
(list :current-animation (pacmacs-make-anim (list (pacmacs-make-frame '(0 0
40 40) 100))
(pacmacs-create-color-block 40
40 "red"))
:row row
- :column column))
+ :column column
+ :type 'wall))
(defun pacmacs--make-pill (row column)
(list :current-animation (pacmacs-load-anim "Pill")
:row row
- :column column))
+ :column column
+ :type 'pill))
(defun pacmacs--make-ghost (row column)
(list :row row
@@ -143,7 +145,8 @@
'up (pacmacs-load-anim "Red-Ghost-Up")
'down (pacmacs-load-anim
"Red-Ghost-Down"))
:speed 1
- :speed-counter 0))
+ :speed-counter 0
+ :type 'ghost))
(defun pacmacs--make-player (row column)
(list :row row
@@ -159,21 +162,26 @@
'up (pacmacs-load-anim
"Pacman-Chomping-Up")
'down (pacmacs-load-anim
"Pacman-Chomping-Down"))
:speed 0
- :speed-counter 0))
+ :speed-counter 0
+ :type 'player))
(defun pacmacs--reset-object-position (game-object)
(plist-bind ((init-row :init-row)
(init-column :init-column))
game-object
+ (pacmacs--remove-object game-object)
(plist-put game-object :row init-row)
- (plist-put game-object :column init-column)))
+ (plist-put game-object :column init-column)
+ (pacmacs--put-object game-object)))
(defun pacmacs--step-back-object (game-object)
(plist-bind ((prev-row :prev-row)
(prev-column :prev-column))
game-object
+ (pacmacs--remove-object game-object)
(plist-put game-object :row prev-row)
- (plist-put game-object :column prev-column)))
+ (plist-put game-object :column prev-column)
+ (pacmacs--put-object game-object)))
(defun pacmacs--kill-buffer-and-its-window (buffer-or-name)
(let ((buffer-window (get-buffer-window buffer-or-name)))
@@ -184,24 +192,16 @@
(kill-buffer buffer-or-name))))
(defun pacmacs--wall-at-p (row column)
- (pacmacs--object-at-p pacmacs--object-board
- row column
- pacmacs--wall-cells))
+ (pacmacs--object-type-at-p pacmacs--object-board
+ row column 'wall))
(defun pacmacs--pill-at-p (row column)
- (pacmacs--object-at-p pacmacs--object-board
- row column
- pacmacs--pills))
+ (pacmacs--object-type-at-p pacmacs--object-board
+ row column 'pill))
(defun pacmacs--ghost-at-p (row column)
- (pacmacs--object-at-p pacmacs--object-board
- row column
- pacmacs--ghosts))
-
-(defun pacmacs-quit ()
- (interactive)
- (when (get-buffer pacmacs-buffer-name)
- (pacmacs--kill-buffer-and-its-window pacmacs-buffer-name)))
+ (pacmacs--object-type-at-p pacmacs--object-board
+ row column 'ghost))
(defun pacmacs--cell-tracked-p (row column)
(pacmacs--cell-wrapped-get pacmacs--track-board row column))
@@ -227,8 +227,10 @@
(new-column (cdr new-point)))
(plist-put game-object :speed-counter speed)
(when (not (pacmacs--wall-at-p new-row new-column))
+ (pacmacs--remove-object game-object)
(plist-put game-object :row new-row)
- (plist-put game-object :column new-column)))
+ (plist-put game-object :column new-column)
+ (pacmacs--put-object game-object)))
(plist-put game-object :speed-counter (1- speed-counter)))))
(defun pacmacs--possible-ways (row column)
@@ -312,14 +314,8 @@
pacmacs--player-state
(-when-let (pill (pacmacs--pill-at-p row column))
(setq pacmacs-score (+ pacmacs-score 10))
- (setq pacmacs--pills
- (cl-remove-if #'(lambda (pill)
- (plist-bind ((p-row :row)
- (p-column :column))
- pill
- (and (= row p-row)
- (= column p-column))))
- pacmacs--pills)))))
+ (setq pacmacs--pills (-remove (-partial #'eql pill) pacmacs--pills))
+ (pacmacs--remove-object pill))))
(defun pacmacs--ghost-collision-p ()
(plist-bind ((row :row)
@@ -368,15 +364,26 @@
(cl-decf pacmacs-waiting-counter
pacmacs-tick-duration-ms)))
-(defun pacmacs--put-object (anim-object)
- (when anim-object
+(defun pacmacs--put-object (game-object)
+ (when game-object
(plist-bind ((row :row)
(column :column))
- anim-object
+ game-object
(let ((cell (pacmacs--cell-wrapped-get pacmacs--object-board
row column)))
(pacmacs--cell-wrapped-set pacmacs--object-board row column
- (cons anim-object cell))))))
+ (cons game-object cell))))))
+
+(defun pacmacs--remove-object (game-object)
+ (when game-object
+ (plist-bind ((row :row)
+ (column :column))
+ game-object
+ (let ((cell (pacmacs--cell-wrapped-get pacmacs--object-board
+ row column)))
+ (pacmacs--cell-wrapped-set pacmacs--object-board
+ row column
+ (-remove (-partial #'eql game-object)
cell))))))
(defun pacmacs--switch-to-death-state ()
(setq pacmacs-game-state 'death)
@@ -432,8 +439,6 @@
(when pacmacs-debug-output
(pacmacs--render-track-board pacmacs--track-board))
- (pacmacs--fill-object-board)
-
(plist-bind ((width :width)
(height :height))
pacmacs--object-board
@@ -521,7 +526,8 @@
(setq pacmacs--player-state (pacmacs--make-player
row column)))
((char-equal x ?g)
- (add-to-list 'pacmacs--ghosts (pacmacs--make-ghost
row column))))))))
+ (add-to-list 'pacmacs--ghosts (pacmacs--make-ghost
row column))))))
+ (pacmacs--fill-object-board)))
(provide 'pacmacs)
- [nongnu] elpa/pacmacs ad201e341a 271/472: Add UT for pacmacs--bits-to-xpm, (continued)
- [nongnu] elpa/pacmacs ad201e341a 271/472: Add UT for pacmacs--bits-to-xpm, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs ea74310be3 275/472: Add README for sprites. Close #148, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 80f16102c5 291/472: Implement unterrifying timed out ghosts (#153), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 609416d41a 057/472: Fix delete minibuffer or sole ordinary window error. Close #42, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 43cc1205c6 066/472: Try to fix pacman-image UTs after #52, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs e44bade6bf 087/472: Fix lambda expressions (#68), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 2dac90bc61 092/472: Merge branch 'entire-code-coverage-70'. Close #70, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 2fdeb1dbdf 188/472: Try to remove compilation step (#124), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs a8bbb61bf8 189/472: Try to remove elcs after the compilation (#124), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 7729f08230 196/472: Rename render-board to object-board (#126), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs cede2ffb48 202/472: Optimize object look up (#126):,
ELPA Syncer <=
- [nongnu] elpa/pacmacs 9e29a7aa19 207/472: Add information about cask install., ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs c6ddeab3f2 215/472: Roughly implement it replayer (#122), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 17a82dffec 205/472: Add UT for object-type-at-p, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs ce03d91967 227/472: Introduce xbm flip bit hack (#133), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs b0bc866a7b 218/472: Measure tick time during replay (#122), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 6f55a2df10 236/472: Add UT for pacmacs--put-bits-dot function (#131), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 48dacba354 238/472: Refactor wall generator with bar functions (#131), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 62bcd78913 243/472: Refactor possible ways functions (#131):, ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs c2303269c0 249/472: Drop XBM support for empty cells (#141), ELPA Syncer, 2022/01/06
- [nongnu] elpa/pacmacs 0f403095f0 265/472: Update README after repo transferring (#140), ELPA Syncer, 2022/01/06