我正在尝试用 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 上运行此脚本。
您可以从 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")