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