- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想为我 cout
-ing 的 40x20 字符 block 制作动画。我想用 system("cls");
清除控制台,然后立即出现下一个字符 block 。目前,下一个街区将采用打字机风格。
对于我的问题,最简单的答案就是立即输出一个 20 行 x 40 个字符的 oss stream cout,而不是像打字机那样处理。
主要.cpp:
mazeCreator.cout();
Sleep(5000);
system("cls");
输出()
void MazeCreator::cout() {
char wallChar = (char) 219;
char pavedChar = (char) 176;
char lightChar = ' ';
char startChar = 'S';
char finishChar = 'F';
char errorChar = '!';
char removedWallChar = 'R';
char landmarkLocationChar = 'L';
ostringstream oss;
for (int row = 0; row < rows; row++) {
oss << " ";
for (int col = 0; col < columns; col++) {
if (mazeArray[row][col] == wall)
oss << wallChar;
else if (mazeArray[row][col] == paved)
oss << pavedChar;
else if (mazeArray[row][col] == light)
oss << lightChar;
else if (mazeArray[row][col] == start)
oss << startChar;
else if (mazeArray[row][col] == finish)
oss << finishChar;
else if (mazeArray[row][col] == removedWall)
oss << removedWallChar;
else if (mazeArray[row][col] == landmarkLocation)
oss << landmarkLocationChar;
else
oss << errorChar;
}
oss << "\n";
}
oss << "\n\n";
cout << oss.str();
}
最佳答案
您可以在代码中维护两个二维数组,一个包含屏幕上的当前字符 block (我们称之为 cur
),另一个包含下一个 block (我们称之为 next
)。
假设 cur
存储当前屏幕上的 block 。通过写入 next
数组来设置下一个 block 。当您准备好将其显示在屏幕上时,同时循环遍历 cur
和 next
,仅针对不同的字符,使用 SetConsoleCursorPosition
跳转到该位置并写入新字符。
完成后,将 next
的内容复制到 cur
并继续下一个 block 。
更新:这是一个例子:
class console_buffer
{
public:
console_buffer(int rows, int columns)
// start out with spaces
: cur(rows, vector<char>(columns, ' ')),
next(rows, vector<char>(columns, ' '))
{
}
void sync()
{
// Loop over all positions
for (int row = 0; row < cur.size(); ++row)
for (int col = 0; col < cur[row].size(); ++col)
// If the character at this position has changed
if (cur[row][col] != next[row][col])
{
// Move cursor to position
COORD c = {row, col};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
// Overwrite character
cout.put(next[row][col]);
}
// 'next' is the new 'cur'
cur = next;
}
void put(char c, int row, int col)
{
next[row][col] = c;
}
private:
vector<vector<char> > cur;
vector<vector<char> > next;
};
...
int main()
{
console_buffer buf(40, 20);
// set up first block
... some calls to buf.put() ...
// make first block appear on screen
buf.sync();
// set up next block
... some calls to buf.put()
// make next block appear on screen
buf.sync();
// etc.
}
关于c++ - 控制台 cout 动画 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10476550/
我想知道 cout<
这可能是一个初学者问题,了解 cout 的工作原理可能是这里的关键。如果有人可以链接到一个好的解释,那就太好了。 cout(&cout) 的地址. cout << &cout打印出 cout 的地址.
经过一整天的编码,我不小心写了 cout << "some text" << cout; 代替 cout << "some text" << endl; 现在它打印出一个内存地址。它指向什么? 最佳答
这与 difference-between-cout-x-and-cout-operator-x 有关问题,但还是有点不同... #include int main(){ std::cout
我是 C++ 的新手,最近我花了几天时间阅读有关指针的内容。我意识到下面的 2 段代码给我不同的结果,尽管它们看起来相同。 第一段代码: int a = 5; int* ptr = &a; cout
我尝试使用更短的语法并避免在任何地方使用 std::,所以我开始使用新的别名语法。在一些例子中,我看到人们这样使用它: using json = nlohmann::json; 并尝试使用 std::
这是我的头文件 #ifndef KINGDOM_H_ #define KINGDOM_H_ #include using namespace std; namespace sict{ cla
我经常遇到要将二维数组打印到屏幕或文件的情况。我的标准方法是这样的: for(int q=0; q #include void printNumber(int x) { std::cout
有一些 cout 语句,但第一个 cout 语句末尾的空格出现在第二个 cout 语句的开头。这是代码: #include int main() { using namespace std;
我在搞乱代码时遇到了这种相当模糊的行为,这是示例: #include using namespace std; int print(void); int main(void) { cout
我收到所有 cout 和 endl 的这些错误消息: main.cc:17:5: error: ‘cout’ was not declared in this scope main.cc:17:5:
这个问题在这里已经有了答案: What is the meaning of prepended double colon "::"? (9 个回答) 关闭 7 个月前。 有一个简单的代码,包含::操
我有下面的代码,我不太明白为什么结果恰好像下面这样: #include #include using namespace std; int main () { std::stringstre
在 C++ 中,当我在 .h 文件中声明自己的命名空间时,如下所示: namespace my_own { //... } 那么,如果我在命名空间 my_own 内部或外部声明 using s
背景 IIRC,来自 Release 2.0 C++ 将单字符常量存储为类型 char而不是 int .但是在 Release 2.0 之前声明如下 cout #include using name
Problem was in IDE I am using - CLion 1.2.4 gives incorrect output inside its own output window, sol
我知道有几个这样的拷贝,但到目前为止,没有一个对我有用。我正在尝试使用 g++ 在 Ubuntu 上编译一个非常简单的 C++ 程序,但它给了我范围错误。 #include using namesp
我在这里有一个难题,我无法解决,也没有在网上找到正确的答案: 我创建了一个带有清理路由的分离线程,问题是在我的 Imac 和 Ubuntu 9.1(双核)上。我无法正确取消空闲代码中的分离线程: #i
#include #include #include using namespace std; int main() { ofstream fout("test.txt"); f
我是一名优秀的程序员,十分优秀!