I need to have a 2 radius map drawn off the player's current room in a MUD I'm building in python (or more, if possible). Rooms are set up as containers with a self.exits = {'west':1, 'north':2} where the key is the direction that the value (UID of the adjacent room) is located. Rooms are linked only in this way. A player with a self.location of 0 could type 'n' and their location, based on the above variable, would then be 2 and that room's contents would have the player's UID appended to its contents.
So, I would like to have a map displayed that looks like the following, based on the above variable, where 'u' is the player's current location..
[ ]
|
[ ]-[u]
I've achieved this portion, as this is just a radius of 1. Here is a small (heavily modified for posting here) snippet of how I did this, and you'll see why I'm posting, as it's poor code.
mloc = '[u]'
mn = ' '
mw = ' '
spn= ' '
spw= ' '
for Exit in room.exits.keys():
if Exit == 'north':
mn = '[ ]'
spn = '|'
if Exit == 'west':
mw = '[ ]-'
# player.hear() is our function for printing a line to the player's screen
player.hear(' '+mn)
player.hear(' '+sp)
player.hear(mw+mloc)
In my insanity, I managed to make this work with all 8 different directions (diagonals, and not including up or down). But I then have to for loop the rooms I just parsed with my first for loop, and then draw those, and then space it all out, and then take into account the overlap of the (sp)aces such as '\' or '|' if there are paths that cross each other. This small task turned nightmarish immediately, and well into 200 lines before I was done.
Another hurdle is that I can only print line by line. So if the map is 50 characters high, I have to have player.hear() on 50 lines, which I'm not opposed to. Just keep that in mind before posting an answer.
I'm also not picky about formatting. I just simply want a 'map at a glance' to aid players while traveling around the world.
Thanks guys. I hope I provided enough info. Let me know, if not. (Here is a link to the entire (unfinished and HORRIBLE) module I'm referencing. Map.py