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

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

[nongnu] elpa/pacmacs c6436982fe 462/472: Merge pull request #207 from c


From: ELPA Syncer
Subject: [nongnu] elpa/pacmacs c6436982fe 462/472: Merge pull request #207 from codingteam/feature/awesome-score-sign-203
Date: Thu, 6 Jan 2022 21:59:49 -0500 (EST)

branch: elpa/pacmacs
commit c6436982fef6f75ef9adebf17df0b02cbce31106
Merge: 9fd3009e5a cdae42dba5
Author: Alexey Kutepov <reximkut@gmail.com>
Commit: Alexey Kutepov <reximkut@gmail.com>

    Merge pull request #207 from codingteam/feature/awesome-score-sign-203
    
    Awesome score sign
---
 pacmacs-render.el | 32 +++++++++++++++++++------
 pacmacs-score.el  | 18 ++++++--------
 pacmacs.el        | 70 ++++++++++++++++++++++++++++++++++---------------------
 signs/scores.txt  |  6 +++++
 4 files changed, 81 insertions(+), 45 deletions(-)

diff --git a/pacmacs-render.el b/pacmacs-render.el
index 274a16a1d6..7c996a9b01 100644
--- a/pacmacs-render.el
+++ b/pacmacs-render.el
@@ -38,6 +38,12 @@
 
 (defvar pacmacs--life-icon nil)
 
+(defmacro with-render-target (render-target-buffer &rest body)
+  (declare (indent 1) (debug (sexp &rest form)))
+  `(with-current-buffer ,render-target-buffer
+     (let ((inhibit-read-only t))
+       ,@body)))
+
 (defun pacmacs--render-empty-cell ()
   (pacmacs-insert-image (pacmacs--create-wall-tile
                          40 40
@@ -62,19 +68,31 @@
         (pacmacs--render-anim anim))
     (pacmacs--render-empty-cell)))
 
-(defun pacmacs--render-track-board (track-board)
+(defun pacmacs--render-track-cell (track-cell)
+  (insert "\t")
+  (if track-cell
+      (insert (int-to-string track-cell))
+    (insert ".")))
+
+(defun pacmacs--render-board (board cell-renderer)
   (plist-bind ((width :width)
                (height :height))
-      track-board
+      board
     (dotimes (row height)
       (dotimes (column width)
-        (let ((x (pacmacs--cell-wrapped-get track-board row column)))
-          (insert "\t")
-          (if x
-              (insert (int-to-string x))
-            (insert "."))))
+        (let ((cell (pacmacs--cell-wrapped-get board row column)))
+          (funcall cell-renderer cell)))
       (insert "\n"))))
 
+(defun pacmacs--render-track-board (track-board)
+  (pacmacs--render-board track-board
+                         #'pacmacs--render-track-cell))
+
+(defun pacmacs--render-object-board (object-board)
+  (pacmacs--render-board object-board
+                         (-compose #'pacmacs--render-object #'car))
+  (insert "\n"))
+
 (provide 'pacmacs-render)
 
 ;;; pacmacs-render.el ends here
diff --git a/pacmacs-score.el b/pacmacs-score.el
index 50b1381eb9..92c1c73ff0 100644
--- a/pacmacs-score.el
+++ b/pacmacs-score.el
@@ -41,17 +41,6 @@
 (defconst pacmacs--score-file-name "~/.pacmacs-score")
 (defconst pacmacs--score-buffer-name "*Pacmacs Score*")
 
-(defun pacmacs-score ()
-  (interactive)
-  (switch-to-buffer-other-window pacmacs--score-buffer-name)
-  (text-mode)
-  (read-only-mode)
-  (with-current-buffer pacmacs--score-buffer-name
-    (let ((inhibit-read-only t))
-      (erase-buffer)
-      (-> (pacmacs--read-score-table)
-          (pacmacs--render-score-table)))))
-
 (defun pacmacs--read-score-table ()
   (when (file-exists-p pacmacs--score-file-name)
     (->> pacmacs--score-file-name
@@ -79,6 +68,13 @@
        (-take-while (-lambda ((_ . score)) (< new-score score)))
        (length)))
 
+(defun pacmacs--render-score-page (render-score-sign)
+  (funcall render-score-sign)
+  (let ((score-table (pacmacs--read-score-table)))
+    (if score-table
+        (pacmacs--render-score-table score-table)
+      (insert "(there are not records yet)"))))
+
 (defun pacmacs--render-score-table (score-table)
   (-each score-table #'pacmacs--render-score-record))
 
diff --git a/pacmacs.el b/pacmacs.el
index 3a39786d6b..488bb3e4cc 100644
--- a/pacmacs.el
+++ b/pacmacs.el
@@ -106,11 +106,22 @@
   (setq cursor-type nil)
   (setq truncate-lines t))
 
-(define-derived-mode pacmacs-game-over-mode special-mode "Pacmacs Game Over"
+(define-derived-mode pacmacs-game-over-mode special-mode "Pacmacs-Game-Over"
   (define-key pacmacs-game-over-mode-map (kbd "q") 'pacmacs-quit)
   (setq cursor-type nil)
   (setq truncate-lines t))
 
+(define-derived-mode pacmacs-scores-mode special-mode "Pacmacs-Scores"
+  (define-key pacmacs-game-over-mode-map (kbd "q")
+    (-partial #'pacmacs--kill-buffer-and-its-window
+              pacmacs--score-buffer-name))
+  (setq cursor-type nil)
+  (setq truncate-lines t))
+
+(defun pacmacs-toggle-debug-output ()
+  (interactive)
+  (setq pacmacs-debug-output (not pacmacs-debug-output)))
+
 ;;;###autoload
 (defun pacmacs-start ()
   (interactive)
@@ -422,7 +433,10 @@
                                (pacmacs--switch-to-prepare-state)))))
 
   (when (not (equal pacmacs-game-state 'game-over))
-    (pacmacs--render-state)))
+    (with-render-target pacmacs-buffer-name
+      (erase-buffer)
+      (pacmacs--render-state)
+      (goto-char (point-min)))))
 
 (defun pacmacs--step-ghosts ()
   (dolist (ghost pacmacs--ghosts)
@@ -601,14 +615,14 @@
   (pacmacs--load-map-sign "game-over")
   (pacmacs-destroy)
   (setq pacmacs-game-state 'game-over)
-  (pacmacs--render-state)
 
   (fundamental-mode)
-  (setq truncate-lines t)
   (read-only-mode 0)
 
   (with-current-buffer pacmacs-buffer-name
-    (goto-char (point-max))
+    (erase-buffer)
+
+    (pacmacs--render-state)
 
     (let* ((score-table (pacmacs--read-score-table))
            (new-score-position (pacmacs--position-of-new-score
@@ -668,29 +682,16 @@
     (pacmacs--put-object wall)))
 
 (defun pacmacs--render-state ()
-  (with-current-buffer pacmacs-buffer-name
-    (let ((inhibit-read-only t))
-      (erase-buffer)
+  (insert (format "Score: %d\n\n" pacmacs-score))
+
+  (when pacmacs-debug-output
+    (pacmacs--render-track-board pacmacs--track-board))
 
-      (insert (format "Score: %d\n\n" pacmacs-score))
-
-      (when pacmacs-debug-output
-        (pacmacs--render-track-board pacmacs--track-board))
-
-      (plist-bind ((width :width)
-                   (height :height))
-          pacmacs--object-board
-        (dotimes (row height)
-          (dotimes (column width)
-            (let ((anim-object (car (pacmacs--cell-wrapped-get 
pacmacs--object-board
-                                                               row column))))
-              (pacmacs--render-object anim-object)))
-          (insert "\n")))
-      (insert "\n")
-      (dotimes (i pacmacs-lives)
-        (ignore i)
-        (pacmacs--render-life-icon))
-      (goto-char 0))))
+  (pacmacs--render-object-board pacmacs--object-board)
+
+  (dotimes (i pacmacs-lives)
+    (ignore i)
+    (pacmacs--render-life-icon)))
 
 (defun pacmacs--unpaused-play-state-p ()
   (and (equal pacmacs-game-state 'play)
@@ -737,6 +738,21 @@
        (-sort #'string-lessp)
        (apply #'vector)))
 
+;;;###autoload
+(defun pacmacs-score ()
+  (interactive)
+
+  (switch-to-buffer pacmacs--score-buffer-name)
+  (pacmacs-scores-mode)
+  (pacmacs--load-map-sign "scores")
+
+  (with-render-target pacmacs--score-buffer-name
+    (erase-buffer)
+    (pacmacs--render-score-page
+     (-partial #'pacmacs--render-object-board
+               pacmacs--object-board))
+    (goto-char (point-min))))
+
 (defun pacmacs--wall-tile-at (row column)
   (pacmacs--create-wall-tile
    40 40
diff --git a/signs/scores.txt b/signs/scores.txt
new file mode 100644
index 0000000000..34867a145b
--- /dev/null
+++ b/signs/scores.txt
@@ -0,0 +1,6 @@
+                     
+ ### ### ### ###  ### ###
+ #   #   # # # #  #   #  
+ ### #   # # #### ### ###
+   # #   # # #  # #     #
+ ### ### ### #  # ### ###



reply via email to

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