所以,我正在做一个游戏,你的小角色,你通过键入方向移动。我已经完成了所有这些工作,但现在我想要一些可视化。我做了两个这样的网格:
["╔═══════════════════╗",
"║ | | | | ║",
"║-------------------║",
"║ | | | | ║",
"║-------------------║",
"║ | | | | ║",
"║-------------------║",
"║ | | | | ║",
"║-------------------║",
"║ | | | | ║",
"╚═══════════════════╝"]
["╔═══════════════════╗",
"║0,4|1,4|2,4|3,4|4,4║",
"║-------------------║",
"║0,3|1,3|2,3|3,3|4,3║",
"║-------------------║",
"║0,2|1,2|2,2|3,2|4,2║",
"║-------------------║",
"║0,1|1,1|2,1|3,1|4,1║",
"║-------------------║",
"║0,0|1,0|2,0|3,0|4,0║",
"╚═══════════════════╝"]
我有一个看起来像这样的小家伙:ツ。我已经设置了代表一种“坐标”的代码。这是一个元组中的两个整数形式。每当这两个整数发生变化时,我希望字符出现在相应的整数上。我能想到的唯一方法就是在他们身上制作25个不同的网格,以及一堆if if语句。这不是太糟糕,但我也想添加另一个角色,我不想制作625个不同的网格。例如,如果元组是(4,3),我希望角色出现在那里。他移动时需要更新到其他方格。我已经有清算声明了。所以,我对任何想法和想法持开放态度。提前谢谢!
def basicIdea(playerCoordinates):
if playerCoordinates == (0, 0):
print("╔═══════════════════╗",
"║ | | | | ║",
"║-------------------║",
"║ | | | | ║",
"║-------------------║",
"║ | | | | ║",
"║-------------------║",
"║ | | | | ║",
"║-------------------║",
"║ツ | | | | ║",
"╚═══════════════════╝"]
我会在这些行上做25次,但是有两个字符,大约有625种可能性,我不想手动设置625个不同的网格。
答案 0 :(得分:1)
有两种方法可以解决这个问题:
替换渲染网格中的字符。为此,您可以将网格保存为行列表或全部保存在一个字符串中,其中包含换行符。只要你以某种方式将变量保存在变量中,这并不重要。从那里你必须计算你的特殊角色(例如笑脸)需要去哪里。请记住,这是关于输出中的位置,而不是逻辑网格。例如,第10行,第2列。如果您的网格按行划分,则行rows[9]
和位置1
处的字符。您可以在该位置拆分字符串,在其间添加笑脸,然后保存连接的字符串。然后打印。如果您的网格都在一个字符串中,则行数增加9倍,加上2,例如在9 * 22 + 2
替换字符。
第二种方式可能更灵活,更可扩展。它涉及从逻辑网格/表创建可见网格。示例代码:
# small 3x3 grid, implemented as a 2-dimensional list.
rows = [[" ", " ", " "],
[" ", " ", " "],
["ツ", " ", " "]]
output = ""
# draw first row
output += "╔"
# three signs for every column, one for the space in-between
output += "═" * (4 * num_of_columns - 1)
output += "╗\n"
for row in rows:
for cell in row:
output += "║"
if cell == " ":
output += " " # empty cell
elif cell == "ツ":
output += " ツ "
output += "║\n"
# TODO: draw lines between rows
# TODO: draw last line
print(output)