我通过Visual Studio社区(在Windows中)用c ++制作了一个简单的乒乓游戏。我做到了,但是最终产品一直闪烁,而且看起来也不好。
我是C ++的新手。这是我尝试进行的首批大型项目之一。做一些研究,我发现自己制作了一个控制台应用程序,并且要停止闪烁,我将不得不在Graphics中重新制作我的应用程序,但是我做不到,所以我正在寻找一种方法来修改控制台应用程序以减少闪烁。
我的绘画功能-:
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;
}
谢谢。
答案 0 :(得分:1)
代替'system(“ cls”);'实施代码以“删除”运动元素,然后将其绘制到新位置。
答案 1 :(得分:1)
在开始绘制之前,清除屏幕会使整个屏幕变黑,从而导致闪烁。
我建议您研究Windows Console API(假设您很高兴仅在Windows中可以使用此功能)。设置光标位置,然后绘制所有内容。
COORD coord;
coord.X = 0;
coord.Y = 0;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
这不是我测试过的代码,我不知道它是否可以在cout中正常工作。您可能需要替换一下其他操作,例如“ WriteConsole(...)”