Tôi đang tạo ứng dụng bảng điều khiển trong C. Đây là trò chơi trong đó các ký tự rơi xuống và người dùng phải bấm phím cụ thể đó trên bàn phím. Tôi không biết làm thế nào để phát hiện những phím được nhấn bởi người sử dụng mà không cần tạm dừng các ký tự rơi xuống. Khi tôi sử dụng scanf chương trình chờ đợi cho đầu vào và tất cả mọi thứ tạm dừng. Xin hãy giúp tôi sớm!Nhập bàn phím liên tục trong C
Trả lời
Có một chức năng gọi là kbhit()
hoặc _kbhit
đó là trong thư viện <conio.h>
nó trả true
hoặc false
tùy dù một phím được nhấn. Vì vậy, bạn có thể đi với một cái gì đó như thế này:
while (1){
if (_kbhit())
key_code = _getch();
// do stuff depending on key_code
else
continue;
Cũng sử dụng getch()
hoặc _getch
mà đọc một nhân vật trực tiếp từ giao diện điều khiển và không phải từ bộ đệm. Bạn có thể đọc thêm về các chức năng conio.h
here chúng có thể rất hữu ích cho những gì bạn muốn làm.
Lưu ý: conio.h
không phải là thư viện chuẩn và việc triển khai có thể thay đổi từ trình biên dịch sang trình biên dịch.
với getch() trò chơi của tôi vẫn tạm dừng và đợi cho đầu vào. Tôi chỉ không cần nhấn phím enter sau khi nhập char. Đó không phải là vấn đề! – zaingz
@zaingz đó là lý do bạn phải sử dụng 'if (kbhit())' để nó "chờ" chỉ khi có điều gì đó được nhấn. Nhưng bởi vì nó đã được nhấn khi nói đến 'key_code = getch();' nó đọc chìa khóa đã được nhấn. –
Cảm ơn rất nhiều ...Điều này thực sự đã giúp tôi. Một mẹo cho những người sử dụng Visual studio nên thêm dấu gạch dưới "_" vào đầu mỗi chức năng conio. tức là: _kbhit() và _getch() – zaingz
Bạn có thể tìm kiếm ncurses
ncurses (lời nguyền mới) là một thư viện lập trình cung cấp một API cho phép các lập trình viên để viết giao diện người dùng dựa trên văn bản một cách terminal độc lập. Nó là một bộ công cụ để phát triển phần mềm ứng dụng "GUI-like" chạy dưới trình giả lập thiết bị đầu cuối.
Ngoài ra kiểm tra C/C++: Capture characters from standard input without waiting for enter to be pressed
#include <conio.h>
if (kbhit()!=0) {
cout<<getch()<<endl;
}
Tôi nghĩ đây có thể là đầu vào bàn phím không chặn mà bạn đang tìm kiếm.
void simple_keyboard_input() //win32 & conio.h
{
if (kbhit())
{
KB_code = getch();
//cout<<"KB_code = "<<KB_code<<"\n";
switch (KB_code)
{
case KB_ESCAPE:
QuitGame=true;
break;
}//switch
}//if kb
}//void
Và đối với các ký tự rơi xuống .. ở đây bạn đi.
Mã vì nếu bạn đang ở trên Windows:
/* The Matrix falling numbers */
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
using namespace std;
#define KB_UP 72
#define KB_DOWN 80
#define KB_LEFT 75
#define KB_RIGHT 77
#define KB_ESCAPE 27
#define KB_F8 66
/* Variables*/
char screen_buffer[2000]={' '};
int y_coord[2000]={0};
int x=0, y=0,dy=0;
int XMAX=77;
int YMAX=23;
int KB_code=0;
bool QuitGame=false;
int platformX=35, platformY=23;
/* function prototypes*/
void gotoxy(int x, int y);
void clrscr(void);
void setcolor(WORD color);
void simple_keyboard_input();
void draw_falling_numbers();
void draw_platform();
/* main */
int main(void)
{
/* generate random seed */
srand (time(NULL));
/* generate random number*/
for(int i=0;i<XMAX;i++) y_coord[i]= rand() % YMAX;
while(!QuitGame)
{
/* simple keyboard input */
simple_keyboard_input();
/* draw falling numbers */
draw_falling_numbers();
}
/* restore text color */
setcolor(7);
clrscr();
cout<<" \n";
cout<<" \nPress any key to continue\n";
cin.ignore();
cin.get();
return 0;
}
/* functions */
void draw_falling_numbers()
{
for(x=0;x<=XMAX;x++)
{
/* generate random number */
int MatixNumber=rand() % 2 ;
/* update falling number */
y_coord[x]=y_coord[x]+1;
if (y_coord[x]>YMAX) y_coord[x]=0;
/* draw dark color */
setcolor(2);
gotoxy(x ,y_coord[x]-1); cout<<" "<<MatixNumber<<" ";
/* draw light color */
setcolor(10);
gotoxy(x ,y_coord[x]); cout<<" "<<MatixNumber<<" ";
}
/* wait some milliseconds */
Sleep(50);
//clrscr();
}
void draw_platform()
{
setcolor(7);
gotoxy(platformX ,platformY);cout<<" ";
gotoxy(platformX ,platformY);cout<<"ÜÜÜÜÜÜ";
setcolor(7);
Sleep(5);
}
void simple_keyboard_input()
{
if (kbhit())
{
KB_code = getch();
//cout<<"KB_code = "<<KB_code<<"\n";
switch (KB_code)
{
case KB_ESCAPE:
QuitGame=true;
break;
case KB_LEFT:
//Do something
platformX=platformX-4;if(platformX<3) platformX=3;
break;
case KB_RIGHT:
//Do something
platformX=platformX+4;if(platformX>74) platformX=74;
break;
case KB_UP:
//Do something
break;
case KB_DOWN:
//Do something
break;
}
}
}
void setcolor(WORD color)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
return;
}
void gotoxy(int x, int y)
{
static HANDLE hStdout = NULL;
COORD coord;
coord.X = x;
coord.Y = y;
if(!hStdout)
{
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
}
SetConsoleCursorPosition(hStdout,coord);
}
void clrscr(void)
{
static HANDLE hStdout = NULL;
static CONSOLE_SCREEN_BUFFER_INFO csbi;
const COORD startCoords = {0,0};
DWORD dummy;
if(!hStdout)
{
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdout,&csbi);
}
FillConsoleOutputCharacter(hStdout,
' ',
csbi.dwSize.X * csbi.dwSize.Y,
startCoords,
&dummy);
gotoxy(0,0);
}
- 1. Nhập bằng bàn phím Java Stream
- 2. Cách ẩn bàn phím khi nhập phím
- 3. SendInput() Chữ cái bàn phím C/C++
- 4. Nhập bằng bàn phím sử dụng stdio.StandardIO trong python xoắn
- 5. Tắt Android Nhập phím bằng bàn phím mềm
- 6. Tại sao bàn phím mềm bị ẩn khi tiếp tục?
- 7. C# Gửi đầu vào bàn phím
- 8. Bàn phím Android (AOSP) liên tục dừng với trình giả lập Android O
- 9. Tại sao móc khóa bàn phím của tôi nhận được các sự kiện liên tục và nhấn phím nhiều lần?
- 10. cách ẩn bàn phím sau khi nhập EditText trong Android?
- 11. Ẩn bàn phím trong AlertDialog
- 12. Nhập Cấu hình Bàn phím Emacs vào Eclipse?
- 13. PhoneGap android: trường nhập chồng lên bàn phím
- 14. Ẩn bàn phím nhập mềm khi hộp thoại đóng
- 15. Nhập sơ đồ bàn phím Netbeans vào Eclipse
- 16. Thay đổi bàn phím Android L nhập màu chính
- 17. Tắt nhập bằng bàn phím trên Android TimePicker
- 18. Ít được nhập bằng bàn phím từ stderr?
- 19. Chụp bàn phím toàn cầu trong ứng dụng C#
- 20. Phát hiện sự kiện bàn phím trong C
- 21. Bàn phím UITextViewDismissMode Bug
- 22. Tắt bàn phím <enter> phím
- 23. Nhập bằng bàn phím mức thấp trên Windows
- 24. ẩn bàn phím ios
- 25. Bàn phím Android. Phím nền
- 26. Bàn phím số trong Xcode
- 27. Ẩn Bàn phím trong Fragment
- 28. Nhận Bàn phím Vị trí Con trỏ Bàn phím Android
- 29. Đọc từ bàn phím trong UTF-8
- 30. Buộc Bàn phím mềm mở
này thực sự thú vị .. mong một số câu trả lời – sukhvir
http://stackoverflow.com/a/13035523/1119701 – ouah
Is có cách nào khác để làm điều này mà không cần ncurses – sukhvir