2012-03-09 11 views
-8

私はTic-Tac-Toeボードを表示する宿題用のプログラムを作成しようとしています。ユーザーがボタンをクリックすると、すべてのボックスに乱数が表示されます。番号1 = "X"、0 = "O"。私は "label1、label2 ... etc"とラベルされた9つのラベルを作成しました。ラベルが一杯になったら、私は誰がX、Oという文字で勝ったかを表示する必要があります。私はこのために配列を使用していますが、この時点では紛失しています。乱数をラベルに表示するにはどうすればよいですか?ここまではクリックイベントハンドラのために書いたコードです。Tic-Tac-Toeプログラミング

ここ
Random rand = new Random(2); 

     int click; 

     click = rand.Next(2); 
     const int ROWS = 3; 
     const int COLS = 3; 

     int[,] letters = new int[ROWS,COLS]; 

     int ROW = ROWS; 
     int COL = COLS; 
     for(int row = 0; row < ROWS; ROW++) 
     { 
      for (int col = 0; col < COLS; COL++) 
      { 

       letters[row, col] = rand.Next(2); 
       int X = 1;//??? 
       int O = 0;//??? 

       label1.Text = [ROW,COL].ToString();//??? 

      } 
+1

要件がわかりません。 Tic-Tac-Toeのゲームには乱数が含まれています。 –

+0

プレイヤーが元に戻すためのフラグを設定する必要があります。次に、現在の順番に応じてボタンの値をXまたはOに設定できます。次に、3人のプレイヤーが連続しているかどうかを確認し、その移動が行われた後に勝ちます。 – jzworkman

+0

@ジョナサン・ウッド:チック・タック・トゥですが、Xは1、Oは0です。 –

答えて

0

説明の試み:

まず、あなたはあなたの問題を表現するデータを持っている:

const int ROWCOUNT = 3; 
const int COLCOUNT = 3; 
private int[,] letters = new int[ROWCOUNT,COLCOUNT]; 
Random rand = new Random(DateTime.Now.Ticks); 

、あなたはランダムにそのデータを記入したい:

private void randomize() 
{ 
    for(int row = 0; row < ROWCOUNT; row++){ //start with row=0, do row=row+1 until row no longer < ROWCOUNT 
     for(int col = 0; col < COLCOUNT; col++){ 
     letters[row,col] = rand.nextInt(2); 
     } 
    } 
} 

最後に、あなたのどこかに(あなたのケースラベルに)配列を表示したい:

そう
//These need to be added to a GridLayoutManager 
private JLabel[,] labels = new JLabel[ROWCOUNT,COLCOUNT]; 

private void updateView(){ 
    for(int row = 0; row < ROWCOUNT; row++){ //start with row=0, do row=row+1 until row no longer < ROWCOUNT 
     for(int col = 0; col < COLCOUNT; col++){ 
     var current = letters[row,col]; 
     var labelText = "O"; 
     if(current > 0) 
      labelText = "X"; 
     labels[row,col].Text = labelText; 
     } 
    } 
} 

、ユーザーがボタンをクリックすると、あなたが呼び出す:

 var labelText = "O"; 
    if(current > 0) 
     labelText = "X"; 
    labels[row,col].Text = labelText; 

randomize(); 
updateView(); 

が、それはあなたのコメントから

を役に立てば幸い、それはラベルのテキストは、より詳細な説明が必要と設定するようです

多分、私はこのように書くべきです:

 String textForLabel = "O"; //0 represents O, 1 represents X 
    //test to see, if it really is a 0, not a 1 
    if(current != 0){ 
     //oh, it is not a zero, therefore, set 
     textForLabel = "X"; 
    } 
    JLabel labelAtRowAndCol = labels[row,col]; 
    labelAtRowAndCol.Text = textForLabel; 
+0

誰が勝利したかを知り、別の方法を作り、同じループを使い、行と列で0と1を数えてください。 – mindandmedia

+0

ありがとうございます。正直、私はこれで初めてです。私のコードを使って、私が作成したラベルに異なるxまたはoを表示するのを止めました。その部分は私が立ち往生している。また、私は明示的に "文字列X = 1"を設定することができないので、私は何をすることができますか?私は前にJlabelを聞いたり、使ったことがありません。私はこの部分を把握してから誰が勝ったのかを把握することができます。あなたの助けをありがとう – EASTON

+0

私はいくつかの調整を行いました。私はxとoという文字にキャストを使うことを考えています。ラベルの異なる文字をどのように表示するかについては、私はまだ失われています。 – EASTON

0

私はこのエクササイズの全体点を点にする方法を学んだので、あなたは正確な答えを提供することを拒否します。

私はゲームを開始する前に、私はランダムに最初の移動を選択します:XまたはO

私は、次の操作を行います:

1)私は、コレクションの中に、すべてのラベルを置くだろうし。 2)私はランダムにコレクション内のラベルの1つを選択し、Textプロパティを変更します。 3)コレクションから同じラベルを削除します。 4)すすぎとリピート。

これには2つの次元の配列は必要ありません。

勝者を理解するために...私は各プレーヤーの動きを記録しています。このゲームには静的な数の勝利の動きしかありません。一番上の行に3つのXがあるかどうかを判断する簡単な作業でしょうか。

+0

それは、2Dアレイを使用するための指示に述べています。また、誰もシミュレーターを試していません。 – EASTON

0
#include<iostream> 
#include<iomanip> 
#include<set> 
using namespace std; 

    char s[3][3] = {{'*','*','*'},{'*','*','*'},{'*','*','*'}}; 
    void show(char os[3][3]); 
    int def[9]; 
    void changeo(int n); 
    void changex(int n); 
    int stop(); 
    set<int> cset; 
    int search (int n){ 

    } 

int main(){ 
    int n; show(s); 
    int ss = 2; 
    cout<<endl; 
    while (stop()){ 

     if (ss%2==0){ 
      cout<<"player One(O) : enter n "; cin>>n; 

      if (!cset.count(n) && n<10){ 
      cset.insert(n); 
      changeo(n); 
      show(s); 
      ss++; 
      } 
      else{ 
       cout<<"invalid move"<<endl; 
      } 

     } 
     else{ 

      cout<<"player Two(X) : enter n "; cin>>n; 
      if (!cset.count(n)&& n<10){ 
      cset.insert(n); 
      changex(n); 
      show(s); 
      ss++; 
      } 

     } 


    } 
    cout<<"\nyou can see the winner"<<endl; 
    cout<<"your moves are "<<ss; 
    return 0; 
} 

void show(char s[3][3]){ 
    cout<< setw(7)<< "1: " <<s[0][0]<<setw(5)<<"2: " <<s[0][1]<<setw(5)<<"3: " <<s[0][2]<<endl; 
    cout<< setw(7)<< "4: " <<s[1][0]<<setw(5)<<"5: " <<s[1][1]<<setw(5)<<"6: " <<s[1][2]<<endl; 
    cout<< setw(7)<< "7: " <<s[2][0]<<setw(5)<<"8: " <<s[2][1]<<setw(5)<<"9: " <<s[2][2]<<endl; 
    cout<<endl; 
} 
void changeo(int n){ 
    switch(n){ 
     case 1: 
      s[0][0] = 'O'; 
      break; 
     case 2: 
      s[0][1] = 'O'; 
      break; 
     case 3: 
      s[0][2] = 'O'; 
      break; 
     case 4: 
      s[1][0] = 'O'; 
      break; 
     case 5: 
      s[1][1] = 'O'; 
      break; 
     case 6: 
      s[1][2] = 'O'; 
      break; 
     case 7: 
      s[2][0] = 'O'; 
      break; 
     case 8: 
      s[2][1] = 'O'; 
      break; 
     case 9: 
      s[2][2] = 'O'; 
      break; 
    } 
} 

void changex(int n){ 
    switch(n){ 
     case 1: 
      s[0][0] = 'X'; 
      break; 
     case 2: 
      s[0][1] = 'X'; 
      break; 
     case 3: 
      s[0][2] = 'X'; 
      break; 
     case 4: 
      s[1][0] = 'X'; 
      break; 
     case 5: 
      s[1][1] = 'X'; 
      break; 
     case 6: 
      s[1][2] = 'X'; 
      break; 
     case 7: 
      s[2][0] = 'X'; 
      break; 
     case 8: 
      s[2][1] = 'X'; 
      break; 
     case 9: 
      s[2][2] = 'X'; 
      break; 
    } 
} 
int stop(){ 
    int m=0; 
     for (int i=0; i<3; i++){ 
      for (int j=0; j<3; j++){ 
       if(s[i][j]=='*'){ 
        m=1; 
        break; 
       } 

      } 
     } 
     return m; 
    } 
関連する問題