我有一个简单的小型控制台游戏,它严重依赖用户输入在游戏板上移动。最初,我们实现标准输入并处理每次移动都必须按 Enter 键;但是,我们现在正在研究特定于平台的用户输入方法,因此我们可以坚持按字符而不是等待输入键。
为此,我们已经像这样设置了我们的环境:
#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()
由于 conio 不包含在 linux 服务器上的头文件中,因此会导致未定义。我们如何让编译器在除 windows 之外的任何东西上完全忽略这一行,类似于标题仅conio.h
在 windows 系统上包含时的方式。
谢谢!