Python 隐藏已打印的文本
Python hide already printed text
我正在创建一个简单的两人棋盘游戏,每个玩家都必须将棋子放在自己的棋盘上。我想做的是:
为两个玩家打开一个新终端window(不管OS程序是运行),以便将棋盘保存在一个变量中但是其他玩家无法向上滚动查看他们放置棋子的位置。
完全清除当前终端,这样两个玩家都无法滚动并看到其他玩家的棋盘。我知道 unix 'clear' 命令但它没有达到我想要的效果并且不适用于所有 OS(尽管这可能是我必须的牺牲以获得可行的解决方案)
我试过清除屏幕,但无法完全删除所有文本。我没有偏好;无论哪种方法更容易。此外,如果使用我没有想到的不同方法会更容易,欢迎所有其他建议。提前致谢!
编辑:其他解决方案看起来文本已被清除,但用户仍然可以向上滚动并查看已清除的文本。我想要一种方法来删除用户可以看到此文本的任何方式。
编辑 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"(再次表示文本终端)上的特定位置。然而,要有效地使用这样的库,您通常必须切换到它在屏幕上生成输出的风格,而不是天真地 print
ing 字符串。
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")
我正在创建一个简单的两人棋盘游戏,每个玩家都必须将棋子放在自己的棋盘上。我想做的是:
为两个玩家打开一个新终端window(不管OS程序是运行),以便将棋盘保存在一个变量中但是其他玩家无法向上滚动查看他们放置棋子的位置。
完全清除当前终端,这样两个玩家都无法滚动并看到其他玩家的棋盘。我知道 unix 'clear' 命令但它没有达到我想要的效果并且不适用于所有 OS(尽管这可能是我必须的牺牲以获得可行的解决方案)
我试过清除屏幕,但无法完全删除所有文本。我没有偏好;无论哪种方法更容易。此外,如果使用我没有想到的不同方法会更容易,欢迎所有其他建议。提前致谢!
编辑:其他解决方案看起来文本已被清除,但用户仍然可以向上滚动并查看已清除的文本。我想要一种方法来删除用户可以看到此文本的任何方式。
编辑 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"(再次表示文本终端)上的特定位置。然而,要有效地使用这样的库,您通常必须切换到它在屏幕上生成输出的风格,而不是天真地 print
ing 字符串。
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")