在Python 3中清除多行之前的行

问题描述 投票:0回答:1

我正在尝试用 python 创建一个简单的控制台输出俄罗斯方块游戏,类似于最初的版本,但我在清除之前的行/游戏场以将新的放置在上面时遇到问题。

from time import sleep

blocks = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
          [1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
          [1, 1, 1, 1, 1, 1, 0, 0, 0, 0]]

running = True

while running:
    for y in range(20):
        for x in range(10):
            if blocks[y][x] == 1:
                print('[#]', end='')
            else:
                print(' . ', end='')
        print("\n", end="")
    sleep(1)

    #trying to clear the lines
    for i in range(20):
        print(f"\033[F", "\r", end="")

如何最有效地删除之前打印的 20 行?能够删除选定数量的行(例如通过 for 循环)会更好,但如果这似乎是唯一的解决方案,则清除整个屏幕可能会起作用。

作为上下文,我在 Mac 上的 PyCharm 上运行此脚本。

python
1个回答
0
投票

您可以从 os 模块中使用 os.system("clear") 。这将清除打印的文本,以便您可以在游戏的下一次更新中重新渲染它

import os
from time import sleep
while running:
for y in range(20):
    for x in range(10):
        if blocks[y][x] == 1:
            print('[#]', end='')
        else:
            print(' . ', end='')
    print("\n", end="")
sleep(1)


os.system("clear")
© www.soinside.com 2019 - 2024. All rights reserved.