55 lines
1.1 KiB
Nim
55 lines
1.1 KiB
Nim
import strutils
|
|
import sequtils
|
|
import random
|
|
|
|
import input_type
|
|
|
|
type
|
|
Tile* = enum
|
|
tileEmpty, tileTreasure
|
|
Map* = seq[seq[Tile]]
|
|
|
|
proc generateMap*(input: Input): Map =
|
|
let treasureCount = input.treasure_count
|
|
|
|
# create empty map
|
|
for i in 0..input.size:
|
|
result.add(@[])
|
|
for j in 0..input.size:
|
|
result[i].add(tileEmpty)
|
|
|
|
# populate treasures
|
|
var addedTreasures = 0
|
|
while addedTreasures < treasureCount:
|
|
let randX = rand(input.size - 1)
|
|
let randY = rand(input.size - 1)
|
|
if result[randX][randY] == tileEmpty:
|
|
result[randX][randY] = tileTreasure
|
|
inc addedTreasures
|
|
|
|
func tileToString*(tile: Tile): string =
|
|
case tile:
|
|
of tileEmpty:
|
|
" "
|
|
of tileTreasure:
|
|
"T"
|
|
|
|
func lineToString*(line: seq[Tile]): string =
|
|
line.map(tileToString).join()
|
|
|
|
proc mapToString*(map: Map): string =
|
|
map.map(lineToString).join("\n")
|
|
|
|
proc printMap*(map: Map) =
|
|
map.mapToString().echo()
|
|
|
|
func getTreasures*(map: Map): seq[(int, int)] =
|
|
var treasures: seq[(int, int)]
|
|
|
|
for y in 0..map.high():
|
|
for x in 0..map[0].high():
|
|
if map[y][x] == tileTreasure:
|
|
treasures.add((x, y))
|
|
|
|
return treasures
|