2012-09-23 21 views
3

我正在使用ncurses庫在C++中編寫Pacman遊戲,但我無法正確移動Pacman。我使用getch()將它向上,向下,向左和向右移動,但只有向右移動,並且在按其他任何按鍵時不會移動到其他任何地方。我是否正確使用ncurses庫中的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()錯誤,還是有其他事情我必須做?

回答

1

鍵盤上的許多「特殊」鍵 - 上,下,左,右,家庭,結束,功能鍵等實際上會將兩個掃描碼從鍵盤控制器返回給CPU。 「標準」鍵全部返回。所以如果你想檢查特殊鍵,你需要調用getch()兩次。

例如向上的箭頭是第一224,然後72.

+0

所以我需要存儲這兩個值,並檢查if語句,如果他們等於向上的箭頭。 – User14229754

+0

是的,這就是你應該做的 – meirrav

+0

它不工作。 – User14229754

0
261

KEY_RIGHT(八進制0405curses.h)是一致的。這告訴我們至少keypad被用來允許getch讀取特殊鍵。

顯示的片段並沒有提供如何將其納入程序其餘部分的線索。但是,在循環中使用getch可能會造成混淆,因爲在退出循環時,該值將被丟棄。如果你希望做不同的事情(從KEY_RIGHT),你可以使用ungetch在循環中保存(否則丟棄)值,例如,

if (h != KEY_RIGHT) //break current loop if another key is pressed 
{ 
    ungetch(h);  //added 
    break; 
} 

這樣做,將允許下一個調用getch返回退出循環的關鍵。