如何在 Linux 上使用 kbhit() 和 getch()? C++
How can I use kbhit() and getch() on Linux? C++
我正在用 C++ 编写一个简单的贪吃蛇游戏。但是我有一个问题:我需要使用 kbhit()
和 getch()
来读取用户输入的内容。要使用它,我需要 conio.h
但 Linux 上没有这个库。我尝试使用 ,但遇到了一个问题:代码正在编译,但我无法使用程序,它只是停止了。
那么如何使用 kbhit()
和 getch()
?或者有什么替代品吗?
我的代码:
#include <iostream>
#include <conio.h>
using namespace std;
bool GameOver;
const int height = 20;
const int width = 20;
int x, y, fruit_x, fruit_y, score;
enum eDirection { STOP, RIGHT, LEFT, UP, DOWN };
eDirection dir;
void setup() {
GameOver = false;
dir = STOP;
x = width / 2 - 1;
y = height / 2 - 1;
fruit_x = rand() % width;
fruit_y = rand() % height;
score = 0;
}
void draw() {
system("clear");
for (int i = 0; i < width; i++)
{
cout << "#";
}
cout << endl;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if (j == 0 || j == width - 1)
{
cout << "#";
}
if (i == y && j == x)
{
cout << "0";
}
else if (i == fruit_y && j == fruit_x)
{
cout << "F";
}
else
{
cout << " ";
}
}
cout << endl;
}
for (int i = 0; i < width; i++)
{
cout << "#";
}
cout << endl;
}
void input() {
if (_kbhit)
{
switch(getch())
{
case 'a':
dir = LEFT;
break;
case 'd':
dir = RIGHT;
break;
case 'w':
dir = UP;
break;
case 's':
dir = DOWN;
break;
case 'x':
GameOver = true;
break;
}
}
}
void logic() {
switch(dir)
{
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
case UP:
y--;
break;
case DOWN:
y++;
break;
}
}
int main() {
setup();
while(!GameOver)
{
draw();
input();
logic();
}
}
第 1 步:
打开终端 sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git
git clone https://github.com/zoelabbb/conio.h.git
cd conio.h
第 2 步:
sudo cp conio.h /usr/include/
或(步骤 2)
在 GUI 中,使用 open-as-administrator
包:
Copy file conio.h --> !! copy file not folder !!
Go to /usr/include/
Right click on folder /usr/include/
Choose Open as Administrator
Paste file conio.h
最后在步骤1和步骤2之后你可以使用#include <conio.h>
在你的代码中。
我正在用 C++ 编写一个简单的贪吃蛇游戏。但是我有一个问题:我需要使用 kbhit()
和 getch()
来读取用户输入的内容。要使用它,我需要 conio.h
但 Linux 上没有这个库。我尝试使用
那么如何使用 kbhit()
和 getch()
?或者有什么替代品吗?
我的代码:
#include <iostream>
#include <conio.h>
using namespace std;
bool GameOver;
const int height = 20;
const int width = 20;
int x, y, fruit_x, fruit_y, score;
enum eDirection { STOP, RIGHT, LEFT, UP, DOWN };
eDirection dir;
void setup() {
GameOver = false;
dir = STOP;
x = width / 2 - 1;
y = height / 2 - 1;
fruit_x = rand() % width;
fruit_y = rand() % height;
score = 0;
}
void draw() {
system("clear");
for (int i = 0; i < width; i++)
{
cout << "#";
}
cout << endl;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if (j == 0 || j == width - 1)
{
cout << "#";
}
if (i == y && j == x)
{
cout << "0";
}
else if (i == fruit_y && j == fruit_x)
{
cout << "F";
}
else
{
cout << " ";
}
}
cout << endl;
}
for (int i = 0; i < width; i++)
{
cout << "#";
}
cout << endl;
}
void input() {
if (_kbhit)
{
switch(getch())
{
case 'a':
dir = LEFT;
break;
case 'd':
dir = RIGHT;
break;
case 'w':
dir = UP;
break;
case 's':
dir = DOWN;
break;
case 'x':
GameOver = true;
break;
}
}
}
void logic() {
switch(dir)
{
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
case UP:
y--;
break;
case DOWN:
y++;
break;
}
}
int main() {
setup();
while(!GameOver)
{
draw();
input();
logic();
}
}
第 1 步: 打开终端 sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git
git clone https://github.com/zoelabbb/conio.h.git
cd conio.h
第 2 步:
sudo cp conio.h /usr/include/
或(步骤 2)
在 GUI 中,使用 open-as-administrator
包:
Copy file conio.h --> !! copy file not folder !!
Go to /usr/include/
Right click on folder /usr/include/
Choose Open as Administrator
Paste file conio.h
最后在步骤1和步骤2之后你可以使用#include <conio.h>
在你的代码中。