文字冒险的指南针

A compass for a textadventure

我正在尝试为文本冒险编写一个 ascii 指南针。我发现了我想做的事情 url:

https://codereview.stackexchange.com/questions/207997/map-generator-for-a-text-based-role-playing-game

我为我做了这个修改:

north = "The Hills"
west = "A realy dark room"  
#west = "A longer text destroy the positions"  
east = "Entrance to the Dungeon"
south = "[X]"

n = "N"
s = "S"
vert_line = "║"
hzt_line = " ⯇ W ══ (C) ══ E ⯈ "

print(north.center(72, " "))
print(r"▲".rjust(len(west)+10))
print(r""+n.rjust(len(west)+10))
print(r""+vert_line.rjust(len(west)+10))
print(r""+vert_line.rjust(len(west)+10))
print(west.rjust(len(east)) + hzt_line + east)
print(r""+vert_line.rjust(len(west)+10))
print(r""+vert_line.rjust(len(west)+10))
print(r""+s.rjust(len(west)+10))
print(r"▼".rjust(len(west)+10))
print(south.center(len(west)+len(hzt_line)+len(east)-5, " "))

问题是计算标签的正确空格。视文字长度而定,从中心打断。

我也卡在计算空白处..结果应该是这样的:

                   This is up
                       ▲
                       N               
                       |               
 To the left   ◀ W ── [C] ── E ⯈   Dining Room
                       |               
                       S              
                       ▼ 
                    Kitchen            
 

代码看起来也很丑,也许有人知道更聪明的解决方案。

非常感谢您的帮助!

Rufnex

我 运行 在使用您的代码时遇到了问题。出于某种原因,左箭头图形弄乱了居中。当我改变角色时,效果很好:

north = "The Hills"
west = "A realy dark room"
east = "Entrance to the Dungeon"
south = "[X]"

n = "N"
s = "S"
vert_line = "║"
#hzt_line = " ⯇ W ══ (C) ══ E ⯈ " # for some reason the left arrow graphic messes up the centering
hzt_line = " < W == (C) == E > "

# synchronize east/west lengths and get line length

labelsize= max(len(west),len(east))
westpad = west.rjust(labelsize)
eastpad = east.ljust(labelsize)
long_line = westpad+hzt_line+eastpad
line_length = len(long_line)

# print compass

print(north.center(line_length))
print(r"▲".center(line_length))
print(n.center(line_length))
print(vert_line.center(line_length))
print(vert_line.center(line_length))
print(long_line.center(line_length))
print(vert_line.center(line_length))
print(vert_line.center(line_length))
print(s.center(line_length))
print(r"▼".center(line_length))
print(south.center(line_length))