Python 隐藏已打印的文本

Python hide already printed text

我正在创建一个简单的两人棋盘游戏,每个玩家都必须将棋子放在自己的棋盘上。我想做的是:

我试过清除屏幕,但无法完全删除所有文本。我没有偏好;无论哪种方法更容易。此外,如果使用我没有想到的不同方法会更容易,欢迎所有其他建议。提前致谢!

编辑:其他解决方案看起来文本已被清除,但用户仍然可以向上滚动并查看已清除的文本。我想要一种方法来删除用户可以看到此文本的任何方式。

编辑 2:请阅读其他答案和评论,因为它们提供了有关整个主题的大量信息。特别感谢@zondo。

我个人只会用这个。

import os
os.system("cls" if os.name == "nt" else "clear") #"cls" for Windows, otherwise "clear"

你可能不喜欢这个,它比基本的两人棋盘游戏级别高一点,但总是使用某种 GUI。 我个人很喜欢 tkinter。

您不希望人们向上滚动以查看打印文本的选项,但您不能删除已打印的内容,这就像要求打印机去除页面上的墨水一样。它会留在那里。

研究一个GUI界面,并尝试在其中制作游戏。否则,您可以让我尝试创建一段解释性代码,向您展示如何使用 tkinter。如果你这样做了,link 把你的游戏告诉我,这样我就能明白你想要什么。

考虑使用便携式终端处理库。它们抽象出常见任务的系统规范,例如擦除 "screen"(即终端),或将输出放置在 "screen"(再次表示文本终端)上的特定位置。然而,要有效地使用这样的库,您通常必须切换到它在屏幕上生成输出的风格,而不是天真地 printing 字符串。

curses is one such library (based on the C library ncurses) and included in the Python standard library. To get started, be sure to have a look at the curses tutorial 在官方 Python 文档中。

我会推荐一个简单的 ANSI 转义码,每次都将光标位置 Cursor Escape Codes 移动到棋盘的开头。还有一个 ANSI 转义码可以完全清除控制台,所以你可以选择。

如果您在 windows 上,您必须首先导入 colorama 一个模块,使 windows 提示符能够使用 ANSI 代码:

import colorama   # OR: from colorama import init
colorama.init()   # AND THEN: init()

因此,如果您的面板有 n 行,在轮到用户输入后,您将光标向上移动 n 行 + 但是用户输入需要很多,所以如果您写 Input row, col: ... 然后你会上升 n+1, 等等...

一个简单的例子:

numLines = 1
print("Hello world!")
print("3[<{0}>A".format(numLines), "This came AFTER hello world line")