-
Notifications
You must be signed in to change notification settings - Fork 199
Expand file tree
/
Copy pathMineMap.kt
More file actions
49 lines (43 loc) · 1.54 KB
/
Copy pathMineMap.kt
File metadata and controls
49 lines (43 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package minesweeper
class MineMap(
val mineMap: Map<Point, MapTile>,
val mapInfo: MineMapInfo
) {
val totalSize = mapInfo.totalNumber
companion object {
fun create(
mineMapInfo: MineMapInfo,
createStrategy: MinePointCreateStrategy = RandomPointCreateStrategy()
): MineMap {
val mineList: MineList =
MineList.createMineList(mineMapInfo, createStrategy)
return MineMap(
emptyMap(mineMapInfo.mapSize).apply {
for (mine in mineList.mineList) {
this[mine] = MapTile.Mine
}
for (mine in mineList.mineList) {
createNear(this, mine, mineMapInfo.mapSize)
}
},
mineMapInfo
)
}
private fun emptyMap(mapSize: MapSize): MutableMap<Point, MapTile> {
return mutableMapOf<Point, MapTile>().apply {
for (i in 1..mapSize.row.count) {
for (j in 1..mapSize.column.count) {
put(Point(i, j), MapTile.Blank(0))
}
}
}
}
private fun createNear(map: MutableMap<Point, MapTile>, mine: Point, mapSize: MapSize) {
val adjacentPoints = mine.getAdjacentPoints(mapSize)
for (adj in adjacentPoints) {
val nearInfo = map[adj]
if (nearInfo is MapTile.Blank) map[adj] = nearInfo + 1
}
}
}
}