C#:如何保存命令屏幕的一部分以供以后使用



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

我想做的一部分是";生成时滚动文本";。

该场景是一个正方形的命令行(大小100乘40(#"字符。这是展现一切的画布。

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

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

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

这是我想做的事情的模型:

图1:理想结果

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

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

附言:这是我试图避免的图2:不良结果

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

虽然我还没有找到将命令行的一部分存储到变量中供以后使用的方法,但我成功地"滚动的";文本,并找到了一个变通方法;存储";

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

我可以这样做:

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

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

-在底部写下新文本

作为副产品,我也可以";存储";屏幕的一部分供后期使用:

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

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

-做任何我需要做的屏幕

-使用Console.MoveBufferArea((检索";存储";部分返回到我需要的地方

-减少缓冲区(我也可以让它保持原样(

最新更新