【问题标题】:C#: How can I save a portion of the Command Screen for later use?C#:如何保存命令屏幕的一部分以供以后使用?
【发布时间】:2022-01-02 01:28:56
【问题描述】:

我正在学习如何从头开始编写 C# 代码。现在,我正在学习如何在命令行上构建场景并根据需要进行更新。

我想做的一部分是“在生成时滚动文本”。

场景是一个方形命令行(大小为 100 x 40),并由一个“#”字符框勾勒。这是展示一切的画布。

当用户通过简单的输入进行交互时,程序将提供文本反馈,就像基于文本的游戏一样。

但是,与普通的基于文本的游戏不同,我不能让命令行的自然流动来移动画布。换句话说,如果我允许命令行自然地运行,那么画布会慢慢向上移动,直到它不再可见。

我需要一种方法来读取屏幕上已经显示的内容并将其存储在内存中。然后,我可以删除屏幕的一部分并将之前复制的信息向上粘贴,为新信息腾出空间。

这是我想做的模型:

Image 1: desirable outcome

我的问题是:有没有办法只“读取”命令空间的特定部分并存储到内存中?

我知道您可以存储打印时正在打印的任何内容,或者我可以跟踪一定数量的先前显示的信息并再次打印,但我想“复制,然后粘贴移动”一部分屏幕。

PS:这是我试图避免的 Image 2: Undesirable outcome

【问题讨论】:

  • 您无需知道屏幕上的内容。只需清除并写入即可。您可以跟踪已编写的内容以及需要更新的内容。

标签: c# command-line command-line-interface


【解决方案1】:

由于顶行也需要移动,真正做到这一点的唯一方法是清除屏幕并重新绘制所有内容。不要直接打印到屏幕上,而是将新行保存到列表中,清除屏幕,然后将该列表连同边框一起打印到屏幕上。

【讨论】:

    【解决方案2】:

    虽然我还没有找到将命令行的一部分存储到变量以供以后使用的方法,但我已经成功地“滚动”了文本,并找到了一种“存储”它的解决方法。

    简单地说,Console.MoveBufferArea() 允许选择命令行缓冲区的一部分并将其移动到缓冲区的其他位置。

    这样我可以:

    -通过将光标移动到 (1,1) 并通过字符串写入一个空格框来清除顶部所需的任何空间。

    -Console.MoveBofferArea() 缓冲区向上几行的部分

    -在底部写入新文本

    作为副产品,我还可以“存储”屏幕的一部分以供以后使用:

    -使用 Console.SetBufferSize() 将缓冲区设置为更大的区域

    -使用 Console.MoveBufferArea() 到正常视图之外的缓冲区部分

    -在屏幕上做我需要做的事情

    -使用 Console.MoveBufferArea() 将“存储”部分检索回我需要的地方

    -减少缓冲区(我也可以不做)

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 2011-11-07
      • 1970-01-01
      相关资源
      最近更新 更多