我正在使用ncurses库在c ++中编写一个Pacman游戏,但我无法正确移动Pacman。我已经使用getch()
向上,向下,向左和向右移动它,但它只是向右移动,当我按任何其他键时它不会移动到其他地方。
这是一个向上移动的代码片段。我编写了类似的代码,其中一些条件因左,右,下移动而相应改变。
int ch = getch();
if (ch == KEY_RIGHT)
{
int i,row,column;
//getting position of cursor by getyx function
for (i=column; i<=last_column; i+=2)
{
//time interval of 1 sec
mvprintw(row,b,"<"); //print < in given (b,row) coordinates
//time interval of 1 sec
mvprintw(row,(b+1),"O"); //print "O" next to "<"
int h = getch(); //to give the option for pressing another key
if (h != KEY_RIGHT) //break current loop if another key is pressed
{
break;
}
}
}
if (condition)
{
//code to move left
}
我是否使用了getch()错误,或者我还有其他事情需要做什么?
答案 0 :(得分:1)
键盘上的许多“特殊”键 - 上,下,左,右,主页,结束,功能键等实际上将两个扫描码从键盘控制器返回到CPU。 “标准”键都返回一个。因此,如果您想检查特殊键,则需要两次调用getch()。
例如,向上箭头首先是224,然后是72。
答案 1 :(得分:0)
261
与KEY_RIGHT
一致(0405
中的八进制curses.h
)。这告诉我们至少keypad
用于允许getch
读取特殊键。
显示的片段并未提供有关如何将其合并到程序其余部分的线索。但是,在循环中使用getch
可能会引起混淆,因为在退出循环时,该值将被丢弃。如果您希望执行不同的操作(来自KEY_RIGHT
),则可以使用ungetch
来保存循环中的(否则丢弃的)值,例如,
if (h != KEY_RIGHT) //break current loop if another key is pressed
{
ungetch(h); //added
break;
}
执行此操作将允许 next 调用getch
以返回退出循环的键。