我有一个简单的小游戏,主要依靠用户输入来移动游戏板。最初,我们实现了标准的输入,并处理了每次移动都要按回车键的问题;但是,我们现在正在研究特定平台的用户输入方法,这样我们就可以坚持按字符键移动,而不是等待回车键。
为此,我们设置了这样的环境。
#if defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS_)
#define PLATFORM_NAME "windows" // Windows
#include <conio.h>
#elif defined(__APPLE__) || defined(__linux__)
#define PLATFORM_NAME "unix"
#endif
我们计划使用 _getch()
当检测到windows平台时,则使用 getchar()
基于unix的。
目前我们的输入调用是这样设置的。
void handleKeybinds() {
char ascii = 0;
if (PLATFORM_NAME == "windows") {
ascii = tolower(_getch());
} else {
system("/bin/stty raw");
ascii = tolower(getchar());
system("/bin/stty cooked");
}
//move player
}
这在windows下编译时完全正常(因为conio.h是兼容的),但是,结果是一个未定义的 _getch()
因为在linux服务器上,conio不作为头文件被包含。我们如何让编译器在windows以外的任何地方完全忽略这一行,就像头文件只包含了 conio.h
当在windows系统上。
谢谢你!我有一个简单的小游戏机,主要是依靠用户输入来移动游戏板。
感谢BessieTheCow的帮助。我让我的用户输入在两个平台上都能正常工作了! 正如上面他们的评论中提到的,我已经把平台定义检查移到了输入被记录的地方,这使得编译器可以忽略备用平台上的未声明方法!
char GameBoard::getInputs() {
char ascii = 0;
#if defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS_)
ascii = tolower(_getch());
#else
system("/bin/stty raw");
ascii = tolower(getchar());
system("/bin/stty cooked");
#endif
return ascii;
}
谢谢你的帮助