ユーザー入力に大きく依存してゲームボードを移動する、単純な小さなコンソールゲームがあります。当初、私たちは標準入力を実装し、移動ごとにエンターを押さなければならないことに対処していました。ただし、現在、プラットフォーム固有のユーザー入力方法を検討しているため、Enter キーを押すのではなく、char キーを押して移動することに固執できます。
これを行うために、次のように環境をセットアップしました。
#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 サーバーのヘッダー ファイルとして含まれていないため、結果は未定義になります。conio.h
Windows システムでのみヘッダーにインクルードするのと同様に、Windows 以外でコンパイラにこの行を完全に無視させるにはどうすればよいでしょうか。
ありがとうございました!