diff options
| author | Jakob L. Kreuze <jakob@memeware.net> | 2019-01-11 13:34:49 -0500 |
|---|---|---|
| committer | Jakob L. Kreuze <jakob@memeware.net> | 2019-01-11 13:34:49 -0500 |
| commit | cc84e4eaec11580fcaf0b70a7782566917ed286e (patch) | |
| tree | 0a2ba0544260ccec48d5849c268c57a1ec6d6459 /app/src/main/java/space/jakob/mines/Grid.kt | |
| parent | d321bb13a9a2ea7af10400b3ce3848733039cbd4 (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.kt | 24 |
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) { |