2017-03-29 16 views
0

まず、私の英語には申し訳ありません。 私はコンソールゲームを作ろうとしていました。ゲームの最後に、キーボードの矢印キーを使用して「はい」または「いいえ」を選択することによって、ユーザーがゲームを続行するかどうかを選択できるようにしたかった。しかし、今は変だと思う。矢印キーを押すと、カーソルが動くはずですが、それはちょっとしたことだけで、「はい」を選択することに戻ります。私は本当にここで何が起こっているのか分かりませんでしたので、なぜこれが起こっているのか知っている人に尋ねたいと思っていました。私が間違っていることを教えてください。 ありがとうございます。なぜ私の_getch()が正しく動作していないのですか?

void askForRestart() { 
bool yesOrNo = true; 

system("cls"); 
cout << "You died." << endl; 
cout << "Restart?" << endl; 
cout << "> YES" << endl << " NO"; 
while (true) { 
    int arrowKeycode = 0; 




    switch (arrowKeycode = _getch()) { 
    case KEY_ENTER: 
     break; 
    default: 
     if (yesOrNo) { 
      yesOrNo = false; 
      system("cls"); 
      cout << "You died." << endl; 
      cout << "Restart?" << endl; 
      cout << " YES" << endl << "> NO"; 
      break; 
     } 
     else { 
      yesOrNo = true; 
      system("cls"); 
      cout << "You died." << endl; 
      cout << "Restart?" << endl; 
      cout << "> YES" << endl << " NO"; 
      break; 
     } 


    } 
    cin.clear(); 
    //cin.ignore(10000, '\n'); 
} 

}

答えて

0

これは、それがどのように動作するかですので。通常の文字キー(数字、アルファベット)の場合、キーコードを返します。しかし、矢印キーまたは機能キーをタップすると、_getchは0を返します。これは、_getchを再度呼び出して実際のキーコードを取得する必要があることを示します。

MSDN:

ファンクションキーや矢印キーを読み出す場合、各関数は二回呼び出さなければなりません。最初の呼び出しは0または0xE0を返し、2番目の呼び出しは実際のキーコードを返します。

キーの読み取り手順を変更する必要があります。

+0

はい実際に上記のEnterキーのキーコードを定義しました。だから、私がやっていることは、getchがkeycodeを入力してキーを返さない場合は、再度尋ねます。しかし、それはちょうど2番目のループのためにゲッチに入ることなく、はいに戻ります。 –

関連する問題