2.2跟踪光标的位置
我使用printf(33[%u;%uH,y+1,x+1)来跟踪光标的位置。33是声明了转义序列的开始,上文已经介绍,不再累叙,[y;xH是设置光标位置的格式。x和y分别表示横轴和纵轴。
3 键盘输入
键盘输入函数PC_GetKey在windows环境下,由于有库函数kbhit返回最近所敲的按键.就很容易实现。而在linux环境下我们需要构造自己的kbhit,在参考文献2中John.Wiley.Sons先生提供了一种现成的实现方法(这个方法会阻塞read函数.在本文中并不适用),这里我们使用了另外的一种实现方法,下面介绍给出其实现代码.
int kbhit(void){
struct timeval tv;
fd_set readFd;
struct termios newKbdMode;
if(!inited){
newKbdMode.c_lflag&=~(ICANON | ECHO);
newKbdMode.c_cc[VTIME]=0;
newKbdMode.c_cc[VMIN]=1;
tcsetattr(0,TCSANOW,&newKbdMode);
atexit(rekbd);
inited=1;
}
tv.tv_sec=0;
tv.tv_usec=0;
FD_ZERO(&readFd);
FD_SET(STDIN_FILENO,&readFd);
select(1,&readFd,NULL,NULL,&tv);
if(FD-ISSET(STDIN-FILENO,&readFd))
return 1;
else
return 0;
}
2.2跟踪光标的位置
我使用printf(33[%u;%uH,y+1,x+1)来跟踪光标的位置。33是声明了转义序列的开始,上文已经介绍,不再累叙,[y;xH是设置光标位置的格式。x和y分别表示横轴和纵轴。
3 键盘输入
键盘输入函数PC_GetKey在windows环境下,由于有库函数kbhit返回最近所敲的按键.就很容易实现。而在linux环境下我们需要构造自己的kbhit,在参考文献2中John.Wiley.Sons先生提供了一种现成的实现方法(这个方法会阻塞read函数.在本文中并不适用),这里我们使用了另外的一种实现方法,下面介绍给出其实现代码.
int kbhit(void){
struct timeval tv;
fd_set readFd;
struct termios newKbdMode;
if(!inited){
newKbdMode.c_lflag&=~(ICANON | ECHO);
newKbdMode.c_cc[VTIME]=0;
newKbdMode.c_cc[VMIN]=1;
tcsetattr(0,TCSANOW,&newKbdMode);
atexit(rekbd);
inited=1;
}
tv.tv_sec=0;
tv.tv_usec=0;
FD_ZERO(&readFd);
FD_SET(STDIN_FILENO,&readFd);
select(1,&readFd,NULL,NULL,&tv);
if(FD-ISSET(STDIN-FILENO,&readFd))
return 1;
else
return 0;
}
举报