我正在为c ++做简单的pacman版本。当我在互联网上查找一些例子时,我发现了一些我不太懂的代码。请帮我解释一下,对此感激不尽。
void GoToXY(int column, int line)
{
// Create a COORD structure and fill in its members.
// This specifies the new position of the cursor that we will set.
COORD coord;
coord.X = column;
coord.Y = line;
// Obtain a handle to the console screen buffer.
// (You're just using the standard console, so you can use STD_OUTPUT_HANDLE
// in conjunction with the GetStdHandle() to retrieve the handle.)
// Note that because it is a standard handle, we don't need to close it.
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// Finally, call the SetConsoleCursorPosition function.
if (!SetConsoleCursorPosition(hConsole, coord))
{
// Uh-oh! The function call failed, so you need to handle the error.
// You can call GetLastError() to get a more specific error code.
// ...
}
}
我的问题是: 这条线做什么? :HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 为什么我们有空?一个空的if语句有什么意义呢?
答案 0 :(得分:3)
您询问的行为您提供标准输出的文件处理程序。它下面可能用于向控制台打印某些内容,或者可能是在那里绘制实际的Pacman游戏。
这里有一些文档,可能会有所帮助:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682075(v=vs.85).aspx
关于你的第二个问题,空if
通常是毫无意义的。在您的特定情况下,该示例的作者只是指出,GetStdHandle
可能会失败(实际上这不太可能),并且您可能希望以某种方式处理它(可能会打印一些错误消息并且优雅地退出),但他自己并没有填写。
现在,当您在该示例的基础上开发游戏时,您可能会选择忽略该错误(在这种情况下,您可能只是删除整个if
块),或以某种方式处理它(在在哪种情况下,您将填写if
声明的正文
答案 1 :(得分:0)
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); GetStdHandle(STD_OUTPUT_HANDLE)检索标准输出的HANDLE(通常是活动控制台)see here
HANDLE是指向任何东西的指针。 You can see here
回答你的第二个和第三个问题是,这里没有必要写一个空的if语句。如果SetConsoleCursorPosition()函数无法正常工作,则控件将转到if语句。因此,您可以在if中处理错误,如果您不想处理错误,请将if语句留空。