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

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

[elpa] externals/mines 82f1a92 17/43: Refactor code


From: Stefan Monnier
Subject: [elpa] externals/mines 82f1a92 17/43: Refactor code
Date: Mon, 30 Nov 2020 18:44:15 -0500 (EST)

branch: externals/mines
commit 82f1a92db82ddaac97bf7dfa76b98f3a6442d2dc
Author: Tino Calancha <tino.calancha@gmail.com>
Commit: Tino Calancha <tino.calancha@gmail.com>

    Refactor code
    
    * mines.el (mines--near-bombs): New defun.
    (mines-set-numbers): Use it.
---
 mines.el | 58 ++++++++++++++++++++++++++--------------------------------
 1 file changed, 26 insertions(+), 32 deletions(-)

diff --git a/mines.el b/mines.el
index dc9f702..6771975 100644
--- a/mines.el
+++ b/mines.el
@@ -277,44 +277,38 @@ If `custom' then ask user for these numbers."
       (aset mines-grid (pop numbers) t))
     (setq mines-mine-positions (mines--find-pos t mines-grid))))
 
+(defun mines--near-bombs (i j)
+  (let ((numb 0))
+    ;; Horizontal neighbours.
+    (when (> j 0)
+      (and (aref mines-grid (mines-matrix-2-index i (1- j))) (cl-incf numb)))
+    (when (< j (1- mines-number-cols))
+      (and (aref mines-grid (mines-matrix-2-index i (1+ j))) (cl-incf numb)))
+    ;; Previous row neighbours.
+    (when (> i 0)
+      (and (aref mines-grid (mines-matrix-2-index (1- i) j)) (cl-incf numb))
+      (when (> j 0)
+        (and (aref mines-grid (mines-matrix-2-index (1- i) (1- j))) (cl-incf 
numb)))
+      (when (< j (1- mines-number-cols))
+        (and (aref mines-grid (mines-matrix-2-index (1- i) (1+ j))) (cl-incf 
numb))))
+    ;; Next row neighbours.
+    (when (< i (1- mines-number-rows))
+      (and (aref mines-grid (mines-matrix-2-index (1+ i) j)) (cl-incf numb))
+      (when (> j 0)
+        (and (aref mines-grid (mines-matrix-2-index (1+ i) (1- j))) (cl-incf 
numb)))
+      (when (< j (1- mines-number-cols))
+        (and (aref mines-grid (mines-matrix-2-index (1+ i) (1+ j))) (cl-incf 
numb))))
+    numb))
+
 (defun mines-set-numbers ()
   "Set numbers for cells adjacent to cells with bombs."
   (let ((tmp-grid (copy-sequence mines-grid)))
     (dotimes (i mines-number-rows)
       (dotimes (j mines-number-cols)
-        (let ((idx (mines-matrix-2-index i j))
-              (numb 0))
+        (let ((idx (mines-matrix-2-index i j)))
           (unless (aref mines-grid idx)
-            ;; Horizontal neighbours.
-            (when (> j 0)
-              (let ((tmp-idx (mines-matrix-2-index i (1- j))))
-                (and (aref mines-grid tmp-idx) (cl-incf numb))))
-            (when (< j (1- mines-number-cols))
-              (let ((tmp-idx (mines-matrix-2-index i (1+ j))))
-                (and (aref mines-grid tmp-idx) (cl-incf numb))))
-            ;; Previous row neighbours.
-            (when (> i 0)
-              (let ((tmp-idx (mines-matrix-2-index (1- i) j)))
-                (and (aref mines-grid tmp-idx) (cl-incf numb)))
-              (when (> j 0)
-                (let ((tmp-idx (mines-matrix-2-index (1- i) (1- j))))
-                  (and (aref mines-grid tmp-idx) (cl-incf numb))))
-              (when (< j (1- mines-number-cols))
-                (let ((tmp-idx (mines-matrix-2-index (1- i) (1+ j))))
-                  (and (aref mines-grid tmp-idx) (cl-incf numb)))))
-            ;; Next row neighbours.
-            (when (< i (1- mines-number-rows))
-              (let ((tmp-idx (mines-matrix-2-index (1+ i) j)))
-                (and (aref mines-grid tmp-idx) (cl-incf numb)))
-              (when (> j 0)
-                (let ((tmp-idx (mines-matrix-2-index (1+ i) (1- j))))
-                  (and (aref mines-grid tmp-idx) (cl-incf numb))))
-              (when (< j (1- mines-number-cols))
-                (let ((tmp-idx (mines-matrix-2-index (1+ i) (1+ j))))
-                  (and (aref mines-grid tmp-idx) (cl-incf numb)))))
-            ;; Update `mines-grid'.
-            (unless (zerop numb)
-              (aset tmp-grid idx numb))))))
+            (let ((numb (mines--near-bombs i j)))
+              (unless (zerop numb) (aset tmp-grid idx numb)))))))
     (setq mines-grid tmp-grid)))
 
 (defun mines-list-game-conditions ()



reply via email to

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