2016-03-05 120 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