Я пытаюсь запрограммировать компас ascii для текстового приключения. Я нашел что-то вроде того, что хочу сделать по этому URL-адресу:
Я сделал эту модификацию для меня:
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
Код тоже выглядит очень уродливо, может кто знает более умное решение.
Большое спасибо за помощь!
Руфнекс
@quamrana спасибо, это полезно для дальнейшего тестирования.






Я столкнулся с проблемой, играя с вашим кодом. По какой-то причине стрелка влево искажает центрирование. Когда я изменил персонажа, это сработало хорошо:
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))
Большое спасибо! Это работает идеально. Я думаю, что тема массива - это проблема с юникодом. просто.. об этом я не подумал ;о)
Отвечает ли это на ваш вопрос? Создайте красивый вывод столбца в python