Skip to content

Instantly share code, notes, and snippets.

@zetashift
Last active December 31, 2018 00:08
Show Gist options
  • Select an option

  • Save zetashift/65b6a89f8cf322682ab01e7aac1878b4 to your computer and use it in GitHub Desktop.

Select an option

Save zetashift/65b6a89f8cf322682ab01e7aac1878b4 to your computer and use it in GitHub Desktop.
Bare dungeon map generation
proc generateMap*(map: GameMap, maxRooms, roomMinSize, roomMaxSize: int,
mapWidth, mapHeight: int, player: Entity,
entities: seq[Entity], maxMonsterPerRoom: int): GameMap =
var
rooms: seq[Rect] = @[]
numRooms = 0
result = map
randomize()
for r in 0 ..< maxRooms:
var
w = rand(roomMinSize ..< roomMaxSize)
h = rand(roomMinSize ..< roomMaxSize)
x = rand(0 ..< (mapWidth-w-1))
y = rand(0 ..< mapHeight-h-1)
newRoom = initRect(x,y,w,h)
block genMap:
for otherRoom in rooms:
if rooms.len <= 1 and newRoom.intersects(otherRoom):
break genMap
result = result.createRoom(newRoom)
var
(newX, newY) = newRoom.center()
if numRooms == 0:
player.x = newX
player.y = newY
echo($player.x & " " & $player.y)
else:
var (prevX, prevY) = rooms[numRooms-1].center()
if rand(0..1) == 1:
result = result.createHorizTunnel(prevX, newX, prevY)
result = result.createVertTunnel(prevY, newY, newX)
else:
result = result.createVertTunnel(prevY, newY, prevX)
result = result.createHorizTunnel(prevX, newX, newY)
map.placeEntities(newRoom, entities, maxMonsterPerRoom)
rooms.add(newRoom)
numRooms.inc(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment