[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/mines bea3ad8 42/43: * packages/mines/mines.el (mines-a
From: |
Stefan Monnier |
Subject: |
[elpa] externals/mines bea3ad8 42/43: * packages/mines/mines.el (mines-auto-flag): New custom var |
Date: |
Mon, 30 Nov 2020 18:44:21 -0500 (EST) |
branch: externals/mines
commit bea3ad84032648c6bcfa1cf6be69196d6f895b51
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* packages/mines/mines.el (mines-auto-flag): New custom var
(mines-empty-cell-char): Use SPC instead, it makes the board more legible.
(mines--show-all): Disable mines-auto-flag while revealing all the bombs.
(mines--update-cell): Implement mines-auto-flag.
---
mines.el | 34 +++++++++++++++++++++++++++++-----
1 file changed, 29 insertions(+), 5 deletions(-)
diff --git a/mines.el b/mines.el
index 7ca2c65..6ae3f97 100644
--- a/mines.el
+++ b/mines.el
@@ -54,6 +54,12 @@
;;; Code:
+;; TODO:
+;; - Arrange for the remaining number of mines to be displayed in the
+;; modeline.
+;; - Center the board in the window (when smaller than the window).
+;; - Add colors to the numbers
+
(require 'gamegrid)
(require 'cl-lib)
(require 'cookie1) ; For `cookie-shuffle-vector'.
@@ -75,6 +81,10 @@
:type 'hook
:version "27.1")
+(defcustom mines-auto-flag t
+ "Auto-add flags when they're obvious."
+ :type 'boolean)
+
(defvar mines-uncover-cell-char ?.
;; FIXME: "uncover" means to remove the cover, so this is counter-intuitive,
;; because I think of this "." as covering the cell and `mines-dig' as
@@ -85,7 +95,7 @@
(defvar mines-flagged-cell-char ?!
"Char to display flagged cells as maybe having a mine.")
-(defvar mines-empty-cell-char ?@
+(defvar mines-empty-cell-char ?\s
"Char to display a cell without mine nor numbers.")
(defvar mines-empty-cell-mine ?x ;FIXME: Use ?💣 when a glyph is available!
@@ -358,10 +368,11 @@ Each cell can be either:
(defun mines--show-all ()
"Show all mines after game over."
- (dotimes (idx mines-number-cells)
- (when (and (eq 'bomb (aref mines-grid idx))
- (aref mines-state idx))
- (mines--update-cell idx nil))))
+ (let ((mines-auto-flag nil))
+ (dotimes (idx mines-number-cells)
+ (when (and (eq 'bomb (aref mines-grid idx))
+ (aref mines-state idx))
+ (mines--update-cell idx nil)))))
(defun mines-game-over ()
"Offer play a new game after uncover a bomb."
@@ -494,6 +505,19 @@ If called again then unflag it."
(cl-pushnew nidx mines-undone-neighbours))))
(delete-region from to)
(mines--insert elt idx)
+ (when (and mines-auto-flag (eq newstate nil))
+ (dolist (nidx (cons idx (mines-get-neighbours idx)))
+ (when (null (aref mines-state nidx))
+ (let ((nc 0) ;Number of neighbors still covered.
+ (nb (aref mines-grid nidx))) ;Number of bomb in neighbors.
+ (when (integerp nb)
+ (dolist (nidx (mines-get-neighbours nidx))
+ (unless (null (aref mines-state nidx))
+ (cl-incf nc)))
+ (when (eql nc nb)
+ (dolist (nidx (mines-get-neighbours nidx))
+ (when (eq t (aref mines-state nidx))
+ (mines--update-cell nidx 'flag)))))))))
(mines-goto idx)))
(defun mines--clear-first-move (idx)
- [elpa] externals/mines 909152f 19/43: * mines.el (mines-dig): Update element at point after avoid gameover in 1st trial, (continued)
- [elpa] externals/mines 909152f 19/43: * mines.el (mines-dig): Update element at point after avoid gameover in 1st trial, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 7660b39 21/43: Add test suite, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 3de39fb 22/43: * README.md: Show build state, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 6e7fc5c 24/43: * mines.el: Update dependency to Emacs-24.4, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 226776a 25/43: * mines: Fix compilation warnings, Stefan Monnier, 2020/11/30
- [elpa] externals/mines abc8c9d 26/43: Move game documentation into `mines-mode' docstring, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 7133550 28/43: * mines/mines.el (mines-mode): Move the docstring to where it belongs., Stefan Monnier, 2020/11/30
- [elpa] externals/mines 2241dcd 36/43: * mines/mines.el: Various minor changes, wave 1, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 3308a99 38/43: * packages/mines/mines.el: Keep flag in mines-state, Stefan Monnier, 2020/11/30
- [elpa] externals/mines e090a90 40/43: * mines.el: Make sure the first move is successful, Stefan Monnier, 2020/11/30
- [elpa] externals/mines bea3ad8 42/43: * packages/mines/mines.el (mines-auto-flag): New custom var,
Stefan Monnier <=
- [elpa] externals/mines 97e0a05 43/43: * mines.el: Adjust docs for the @ => SPC change, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 92399df 29/43: * packages/mines/mines.el: Bump version to 1.2, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 868e9b9 35/43: * mines.el: Bump version to v1.6, Stefan Monnier, 2020/11/30
- [elpa] externals/mines e127c84 30/43: Add fallback function for read-multiple-choice, Stefan Monnier, 2020/11/30
- [elpa] externals/mines bf577b0 31/43: Sort the score file from better to worst results, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 179ed77 32/43: Dont prompt user when updating the score file, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 9b07cb6 33/43: Do not uncover flagged cells if the user dont want that, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 34d088c 34/43: Reimplement mines-end-p, Stefan Monnier, 2020/11/30
- [elpa] externals/mines 5920f2d 37/43: * mines/mines.el (mines-grid): Use `bomb` instead of t, Stefan Monnier, 2020/11/30
- [elpa] externals/mines f11e546 41/43: * mines.el (mines-mode-map): Add mouse bindings, Stefan Monnier, 2020/11/30