summaryrefslogtreecommitdiff
path: root/app/src/main/java/space/jakob/mines/Grid.kt
diff options
context:
space:
mode:
authorJakob L. Kreuze <jakob@memeware.net>2019-01-11 13:34:49 -0500
committerJakob L. Kreuze <jakob@memeware.net>2019-01-11 13:34:49 -0500
commitcc84e4eaec11580fcaf0b70a7782566917ed286e (patch)
tree0a2ba0544260ccec48d5849c268c57a1ec6d6459 /app/src/main/java/space/jakob/mines/Grid.kt
parentd321bb13a9a2ea7af10400b3ce3848733039cbd4 (diff)
Initial implementation of flagging.
Diffstat (limited to 'app/src/main/java/space/jakob/mines/Grid.kt')
-rw-r--r--app/src/main/java/space/jakob/mines/Grid.kt24
1 files changed, 23 insertions, 1 deletions
diff --git a/app/src/main/java/space/jakob/mines/Grid.kt b/app/src/main/java/space/jakob/mines/Grid.kt
index 2eec411..963f8cb 100644
--- a/app/src/main/java/space/jakob/mines/Grid.kt
+++ b/app/src/main/java/space/jakob/mines/Grid.kt
@@ -14,7 +14,12 @@ package space.jakob.mines
import java.util.Random
-data class Tile(val adjacentMines: Int = 0, val mine: Boolean = false, val masked: Boolean = true)
+data class Tile(
+ val adjacentMines: Int = 0,
+ val mine: Boolean = false,
+ val masked: Boolean = true,
+ val flagged: Boolean = false
+)
/**
* The Minesweeper "grid", containing instances of [Tile].
@@ -118,6 +123,23 @@ class Grid(val width: Int, val height: Int, val tiles: Array<Tile>) {
}
}
+ /**
+ * Mark the tile at the given coordinates as flagged.
+ *
+ * @throws IllegalArgumentException if the X coordinate is outside
+ * the range of [0, width), or if the Y coordinate is outside the
+ * range of [0, height).
+ */
+ fun flag(x: Int, y: Int) {
+ if (!valid(x, y) || !this[x, y].masked) {
+ return;
+ }
+
+ with (this[x, y]) {
+ place(x, y, copy(flagged = true))
+ }
+ }
+
override fun toString(): String = buildString {
for (y in 0 until height) {
for (x in 0 until width) {