2016-03-05 10 views
1

Я создаю простую двухпользовательскую настольную игру, в которой каждый игрок должен размещать куски на своих досках. То, что я хотел бы сделать, это либо:Python скрыть уже напечатанный текст

  • открывает новое окно терминала (независимо от того, какая операционная система программа запускается на) для обоих игроков, так что плата сохраняется в переменной, но другой игрок не может прокручивать чтобы увидеть, где они разместили свои куски.

  • полностью очищает текущий терминал, чтобы ни один игрок не мог прокручивать и видеть плату другого игрока. Я знаю команду unix «clear», но она не достигает эффекта, который я выполняю, и не работает со всеми ОС (хотя это может быть что-то, что мне придется пожертвовать, чтобы получить рабочее решение)

Я пробовал очистить экран, но не смог полностью удалить весь текст. У меня нет предпочтения; какой бы способ ни был проще. Кроме того, если было бы проще использовать другой метод, о котором я не думал, все другие предложения приветствуются. Заранее спасибо!

EDIT: Другие решения показывают, что текст был очищен, но пользователь все еще может прокручивать вверх и видеть текст, который был очищен. Я хотел бы, чтобы удалить любой способ, которым пользователь мог видеть этот текст.

РЕДАКТИРОВАТЬ 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, в начало каждой доски. Также есть escape-код ANSI, который полностью очищает консоль, поэтому вы можете выбрать.

Если вы на окнах вы должны сначала импортировать colorama модуль, который делает окно подсказка иметь возможность использовать коды ANSI, как, например:

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

Так что, если ваша плата имеет n строки, после ввода пользователя для их очередь, вы переместите курсор вверх n строки +, однако многие из них были необходимы для ввода данных пользователем, так что если вы написали Input row, col: ..., то вы бы UP 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

Коды escape-кода 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: как [я сказал] (http://stackoverflow.com/questions/35813667/python-hide-already-printed-text-solved#comment59299691_35813667), ответ работает отлично для меня. – jfs

0

Вы не можете, как это, это немного более высокий уровень, чем основные игры два игрока борта, но всегда использует какое-то графический интерфейс. Мне лично нравится сам tkinter.

Вы не хотите, чтобы люди прокручивали вверх, чтобы видеть напечатанный текст, но вы не можете удалить напечатанное изображение, например, попросить принтер удалить чернила с страницы. Он останется там.

Изучите интерфейс графического интерфейса и попробуйте сделать игру в этом. В противном случае вы можете позволить мне сделать удар по созданию пояснительной части кода, которая покажет вам, как использовать tkinter. Если да, напишите мне свою игру, чтобы я мог понять, чего вы хотите.

+0

У меня есть планы по созданию графического интерфейса вокруг него, но мне было любопытно, был ли способ достичь того, что было бы просто (иш) в графической среде, но вместо текстового. –

+0

Существует различие между очисткой экрана терминала и запросом принтера на удаление чернил с страницы: очистка экрана терминала была выполнена разными способами. – zondo

+0

Научите меня своим чудесным путям @zondo. Я ничего не знаю об этом. Насколько я знал, не было никакого способа сделать это с помощью упрощенного кода. –

2

Рассмотрите возможность использования портативной библиотеки обработки терминала. Они абстрагируют системную специфику общих задач, таких как стирание «экрана» (т. Е. Терминал) или размещение вывода в определенной позиции на «экране» (опять же, что означает текстовый терминал). Однако, чтобы эффективно использовать такую ​​библиотеку, вам часто приходится переключаться на свой стиль генерации вывода на экране вместо наивно print строк.

curses - одна из таких библиотек (основанная на библиотеке C ncurses) и включена в стандартную библиотеку Python. Чтобы начать работу, обязательно ознакомьтесь с curses tutorial в официальной документации Python.

+0

Я только что видел в документации, что версия Python для Windows не включает модуль 'curses'. [Новые версии учебника] (https://docs.python.org/3/howto/curses.html#what-is-curses) упоминают пакет ['UniCurses'] (https://pypi.python.org/pypi/UniCurses) в качестве альтернативы. –

+0

Возможно, OP не нуждается в 'curses' (его аналог Windows), и чего-то более легкого, такого как' colorama' + 'blessings', будет достаточно. – jfs