2010-12-08 31 views
0

私は現在、いくつかの変更を加えた古典的な "snake"プログラムと非常によく似た、C++でプログラムを書いています。私はそれを書いているので、ctimeに基づいてスクリーンを5回1秒間更新します。もしそれが処理できれば、さらに多くのことが起こります。私がしたいことの1つは、プログラムに.hファイル "currkeypressed"の変数があるようにすることです。この変数は、ユーザーが現在押しているキーを保持し、スネークヘッドはその方向に移動します。ヘビの各ノードは別々のオブジェクトになるので、currkeypressedは頭にのみ影響します。方向性データおよび位置データは、各更新時にノードからノードへスネークの下を通過します。ライブ入力でキーボード入力を受け入れるにはどうすればよいですか?

私の質問は:cinで更新するのではなく、一定の間隔でこのデータを一定に保つにはどうすればよいですか?私は、ある種のforループで矢印キーのascii値を受け入れることができることを知っていますが、キーが押されていてもループが非常に長い場合は、それを押すことができません。誰もこれを行う方法を知っていますか?

編集:私はあなたが単純な行指向や文字オリエント入力を超えて探していたら、ユーザ入力装置の詳細にあり、より正確な

答えて

1

最も簡単な方法は、ncurseライブラリを使用することです。

ただし、あなたは「生」のLinuxプログラミングを好むならば、あなたはselectgetcharを使用することができます。

#include <sys/time.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main() { 
     fd_set readfs; 
     struct timeval timeout; 
     int res, key; 

     while (1) { 
     /* .. do something else .. */ 

     FD_SET(0, &readfs); /* 0 is STDIN */ 
     timeout.tv_usec = 10; /* milliseconds */ 
     timeout.tv_sec = 0; /* seconds */ 
     res = select(maxfd, &readfs, NULL, NULL, &timeout); 
     if (res) { 
      /* key pressed */ 
      key = getchar(); 
      if (key == 'A') { /* blar */ } 
     } 
     } 
} 
+0

私はusecがマイクロ秒(ミリ秒ではない)を意味すると確信しています。私は眠りのためのマニュアルページのためにこれを言う。 –

+0

エラー: 'maxfd'は宣言されていません(この関数では最初に使用されます) –

1

するLinuxのOSは、Ubuntuを使用しています。各オペレーティングシステムには、キーダウンやキーアップなどのイベントをプログラムに通知するための特定のメカニズムがあります。

あなたがしているどのプログラミング環境のためのタグを追加、答えを得るには:などMSWINDOWS、Linuxでは、Androidの、MacOSのは、

+0

が変更されました。 Linux OS –

+0

XWindows、Gnome、またはプレーンな端末ウィンドウですか? – wallyk

+0

端末。私は、ヘビの「食べ物」が周期として画面に現れ、ヘビの頭が@であり、体がo(s)の束であるようなアルゴリズムを書いた。 –

-1

最も簡単な方法のスレッドを持っているだろう(実際にはそれほど単純ではないのが)ユーザーの入力をキャプチャして、ヘビの先頭を知らせる何らかの種類のイベント駆動型システムを持つか、ヘビが現在のキーをポーリングすることができます。

0

あなたはライブラリconio.hを使用することができますし、あなたが生きて取得するループ内で機能_getch()を使用することができます何の制限もなく入力します。

#include<conio.h> 
#include<iostream> 
using namespace std; 
int main() 
{ 
    char n='a';//Just for initialization 
    while(n!='e') 
    { 
     n=_getch(); 
    } 
    return 0; 
} 
+0

私のメソッドがうまくいけば、それに投票してください。 – Weaboo

関連する問題