2016-03-05 83 views
1

我正在创建一个简单的双人棋盘游戏,每个玩家都必须在自己的棋盘上放置棋子。我希望做的是两种:Python隐藏已经打印的文本

  • 打开一个新的终端窗口(无论哪个OS程序上运行),因此主板已保存的变量内,但其他球员无法滚动为双方球员看看他们在哪里放置他们的作品。

  • 完全清除当前终端,这样任何玩家都不能滚动并看到其他玩家的棋盘。我知道unix'clear'命令,但它并没有达到我以后的效果,并且不适用于所有操作系统(尽管这可能是我必须牺牲的东西才能获得工作解决方案)

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

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

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

+0

可能重复的[在Python中清除终端](http://stackoverflow.com/questions/2084508/clear-terminal-in-python) – zondo

+0

这仍然允许用户滚动备份,并看到所谓的清除文本。我正在寻找一个解决方案,如果可能的话用户不能再看到这个文本? –

+0

不要只读最上面的答案。那里有答案,会做你想做的。例如,'print('\ 033c')'适用于Linux。 – zondo

回答

0

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

如果您使用的是Windows,你必须先导入colorama模块,使窗口提示可以使用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("\033[<{0}>A".format(numLines), "This came AFTER hello world line") 
+1

对我来说,我必须从ANSI代码(“\ 033 [{0} A”.format(numLines))中删除<>。 –

+0

ANSI转义码的行为在某些操作系统与另一个操作系统之间有些不同,我发现大多数情况下最好的方法是尝试和错误 – Mixone

1

我个人只是用这个。

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

我试过这个,但是你仍然可以向上滚动并看到事先印好的东西。例如。使用for循环打印一定数量的文本,然后使用os.system('cls',如果os.name =='nt'else'clear')会清除终端,但用户仍然可以向上滚动并查看无论如何,文本。 –

+0

@MichaelMorgan有趣。我没有意识到是这样。 – GarethPW

+0

@MichaelMorgan:as [我说](http://stackoverflow.com/questions/35813667/python-hide-already-printed-text-solved#comment59299691_35813667),答案适用于我。 – jfs

0

你可能不喜欢这个,它比基本的双人棋盘游戏高一点,但总是使用某种图形用户界面。 我个人喜欢tkinter我自己。

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

研究一个GUI界面,并尝试制作游戏。否则,你可以让我创建一个说明如何使用tkinter的解释性代码片段。如果你这样做,链接我的游戏,所以我可以理解你想要什么。

+0

我有计划围绕它开发一个图形用户界面,但我很好奇是否有办法在图形环境中实现简单的(ish),而不是基于文本的。 –

+0

清除终端屏幕和要求打印机清除页面上的墨水是有区别的:清除终端屏幕已经以多种方式完成。 – zondo

+0

教你我奇妙的方式@zondo我对此一无所知。据我所知,用简单的代码实际上没有办法做到这一点。 –

2

考虑使用便携式终端处理库。他们抽象出像清除“屏幕”(即终端)这样的常见任务的特定系统,或者将输出放置在“屏幕”(也就是文本终端)的特定位置。但是,为了有效地使用这样的库,您通常不得不切换到在屏幕上生成输出的样式,而不是天真的字符串。

curses是一个这样的库(基于C库ncurses)并包含在Python标准库中。要开始使用,请务必查看官方Python文档中的curses tutorial

+0

我刚刚在文档中看到,Windows版本的Python不包含'curses'模块。 [本教程的较新版本](https://docs.python.org/3/howto/curses.html#what-is-curses)提及['UniCurses'包](https://pypi.python.org/pypi/UniCurses)作为替代。 –

+0

也许OP不需要'curses'(它的Windows模拟)和更轻的东西,比如'colorama' +'祝福'就足够了。 – jfs