如何在C++中刷新终端页面

How to refresh terminal page in C++?

本文关键字:终端 刷新 C++      更新时间:2023-10-16

我正在开发一款文字冒险游戏,菜单画面与此类似

******************************
|      Hello, Adventurer     |
|                            |
|     What is your name?     |
******************************
Name: 

所以诅咒者会对这个名字眨眼。但是当玩家输入名称时,它会像这样显示

现在让我们假设我输入"约翰"作为名字

******************************
|         Hello, John        |
|                            |
|     Welcome to Text-RPG    |
******************************

但随后它会在单独的部分中打印上述文本。

是否可以用第二个文本集

替换第一个文本集,而无需将其单独部分?

使用OSX终端,您可以使用所谓的"ANSI转义序列",包括:

33[2J
33[H

分别清除屏幕并将光标移动到"主页"位置(左上角)。 如果您正在编写一个简单的程序,该程序打印一些信息,然后提示输入,那么在提示之间重新绘制整个屏幕效果相当好。 top程序执行以下操作:

cout << "33[2J33[H";

大多数终端在发送表单馈送('f'^L)时不会清除显示,因为大多数终端都基于 VT100 仿真。 OSX终端不是该规则的罕见例外之一。

延伸阅读:

  • 为什么键入 control/L 时屏幕不清晰?

您是否在游戏中使用图形?如果是,您可以使用要在什么时间向用户显示的帧 但是,如果您是初学者,那么您现在可能没有一个非常准确的问题解决方案。但是,有一个简单的技巧可以在您的情况下起作用。

  1. 显示第一个框后,您可以打印很多空白区域,例如一大块空白区域,这可能会给用户一个虚幻的幻想,即第一个框已经消失,但显然这将使您的滚动条向下滚动。

  2. 你对猛击有任何想法吗?如果是,则在编码文件中使用"clear"命令。与此相关的事情

putchar('f');将清除大多数终端中的屏幕。

这只会发送一个"表单馈送"字符(ASCII 终端为 12,即控制L),该字符会清除屏幕。

1.You can try the logic of displaying newlines as follows
#include <iostream>
using namespace std;

void clear_scr()
{
    /*printing 100 new lines to clear everything on screen*/
    cout << string( 100, 'n' ); 
}
int main()
{  
    cout << "Clearning Screen" << endl;
    clear_scr();
    cout<<"SCREEN CLEARED"<<endl;
    return 0;
}
2. I have seen this code on various websites. This might work but i am not sure about it. Try it.
In Windows:
#include <cstdlib>
int main() { 
    std::system("cls");
    return 0;
}
In Linux/Unix:
#include <cstdlib>
int main() { 
    std::system("clear");
    return 0;
}

首先使用system("CLS")清除屏幕,然后他们使用玩家的名称打印新屏幕,就像您想要的那样cout << "Hello, " << playerName << endl;