我通过Visual Studio community(在Windows中(用c ++制作了一个简单的乒乓球游戏。我做到了,但最终产品一直在闪烁,看起来不太好。
我是 c++ 的新手。这是我尝试做的第一批大项目之一。做了一些研究,我发现我制作了一个控制台应用程序,为了停止闪烁,我将不得不在图形中重新制作我的应用程序,但我不能,所以我正在寻找一种方法来修改我的控制台应用程序以减少闪烁。
我的绘图功能-:
void Draw()
{
system("cls");
for (int i = 0; i < width + 2; i++)
cout << "xB2";
cout << endl;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
int ballx = ball->getX();
int bally = ball->getY();
int player1x = player1->getX();
int player2x = player2->getX();
int player1y = player1->getY();
int player2y = player2->getY();
if (j == 0)
cout << "xB2";
if (ballx == j && bally == i)
cout << "O";//ball
else if (player1x == j && player1y == i)
cout << "xDB";//player1_segment0
else if (player2x == j && player2y == i)
cout << "xDB";//player2_segment0
/*Prints different segments of player1 in y-dir*/
else if (player1x == j && player1y + 1 == i)
cout << "xDB";//player1_segment1
else if (player1x == j && player1y + 2 == i)
cout << "xDB";//player1_segment2
else if (player1x == j && player1y + 3 == i)
cout << "xDB";//player1_segment3
/*Prints different segments of player2 in y-dir*/
else if (player2x == j && player2y + 1 == i)
cout << "xDB";//player2_segment1
else if (player2x == j && player2y + 2 == i)
cout << "xDB";//player2_segment2
else if (player2x == j && player2y + 3 == i)
cout << "xDB";//player2_segment3
else
cout << " ";
if (j == width - 1)
cout << "xB2";
}
cout << endl;
}
for (int i = 0; i < width + 2; i++)
cout << "xB2";
cout << endl;
cout << "Score 1: " << score1 << endl;
cout << "Score 2: " << score2 << endl;
}
谢谢。
这就是没有闪烁的样子
清除屏幕会使整个屏幕在开始绘制之前变黑,从而导致闪烁。
我建议查看Windows控制台API(假设您很高兴它仅在Windows中工作(。设置光标位置,然后绘制所有内容。
COORD coord;
coord.X = 0;
coord.Y = 0;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
这不是我测试过的代码,我不知道它是否可以与 cout 正常工作。您可能希望替换其他操作,例如"WriteConsole(...(">
而不是'system("cls"(;实现代码来"删除"移动元素,然后将它们绘制在新位置。