1

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

  • 为两个玩家打开一个新的终端窗口(无论程序在哪个操作系统上运行),以便将棋盘保存在变量中,但另一个玩家无法向上滚动以查看他们放置棋子的位置。

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

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

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

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

4

4 回答 4

2

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

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

于 2016-03-05T12:30:14.003 回答
1

我个人只是使​​用这个。

import os
os.system("cls" if os.name == "nt" else "clear") #"cls" for Windows, otherwise "clear"
于 2016-03-05T11:46:03.310 回答
0

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

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

研究一个 GUI 界面,并尝试在其中制作游戏。否则,您可以让我尝试创建一段解释性代码,向您展示如何使用 tkinter。如果您这样做,请将您拥有的游戏链接我,以便我了解您想要什么。

于 2016-03-05T12:14:38.090 回答
0

我会推荐一个简单的 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("\033[<{0}>A".format(numLines), "This came AFTER hello world line")
于 2016-03-05T15:27:51.797 回答