2017-11-17 9 views
0

私はスードクソルバーを自分自身のようなテストにしています。私は壁に衝突するようです。C++でリアルタイム更新グリッドを作るには

ユーザーにグリッドに値を入力させようとしていて、グリッドに入れた次の値を表示するために2秒ごとに自動的に更新されます。

私はグリッド自体にユーザー入力を取得する方法がわかりません。

グリッド自体のコードです。

void draw() 
{ 
int given; 
cout << endl; 
for (int i = 0; i < 13; i++) 
{ 
    for (int j = 0; j <= 9; j++) 
    { 
     if (j == 0) 
     { 
      cout << "|"; 
     } 
     if (j == 3 || j == 6 || j == 9) 
     { 
      cout << "|"; 
     } 
     if (i == 0 || i == 4 || i == 8 || i == 12) 
     { 
      cout << "#"; 
     } 
     else 
     { 
      cout << " "; 
     } 
    } 

    cout << endl; 

} 

}

これがリフレッシュするために取得するには、私はこのループを持っています。

while (gameOver != TRUE) 
{ 
    system("cls"); 
    draw(); 
    cout << "\nEnter the next given number, or 0 for a blank space: "; 
    Sleep(600); 
} 

だから私はどのような方法で保存(私は配列が最もよく働くかもしれないと思う?)

両方

  1. グリッド上の表示

  2. にユーザーの入力値を取得する助けが必要

ありがとうございました。

+0

私はWindowsコンソールでマインスイーパを書いて、私は何とか私が使用したものは何でもトリック覚えています。 – iBug

+0

ユーザーの入力をどのように実装しているか、それ以上調べることはできません。 – iBug

+0

あなたは本当に何らかの種類の表示システムを使いたいと思っています。 Cursesはターミナルの古典的なソリューションです。使用しているプラ​​ットフォームによって異なりますが、iostreamを使用してこれを実行しようとすると、深刻な不満が生じます。 –

答えて

0

値を視覚化(および格納)する最も簡単な方法は、2次元配列になると個人的には思っています。

あなたはこのような* m個の配列を宣言するとnことができます。

int x[n][m]; 

その後、あなたにそれを表示するには、forループでは、このようなアクセス要素(i、j)はこの線で

x[i][j] 
+0

これは、標準C++言語の一部ではないVLAを使用します。 'std :: vector'や' std :: array'を使うか、メモリを動的に割り当てる必要があります。 –

0

を私は、Windows上でプログラミングをしていると思います:

system("cls"); 

だから私の答えはそれに基づいており、WinAPIのをたくさん利用されます。

通常、ユーザーがEnterキーを押した後にcinに固定してグリッドを更新できます。しかし、リアルタイム表示をリフレッシュしたいので、これは最適ではないようです。あなたは、Windows上でconio.hを持っているので、それのために行く:

#include <conio.h> 
... 
char ch; 
while (true) { 
    while (!kbhit()); // Wait for user input 
    ch = getch(); 
    switch (ch) { 
     // Process input here. 
    } 
} 
関連する問題