2016-10-25 4 views
0

3列3行(3x3)のグリッドレイアウトを構築しました。各セルにはボタンが含まれています(グリッド全体で9つのボタン)。 は、私はそれ(そのXターンまたはOを有効にした場合)と、現在のターンに応じてテキストを設定することで回しているチェックしています各ボタンにチェックグリッドレイアウトの組み合わせを確認する方法

final TextView note = (TextView) findViewById(R.id.textView2); 
    final TextView turn = (TextView) findViewById(R.id.textView1); 
    turn.setText("O"); 
    final Button button = (Button) findViewById(R.id.button1); 
    button.setText("Empty"); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick (View v) { 
      if(button.getText() == "Empty") { 
       if (turn.getText() == "O") { 
        button.setText("O"); 
        turn.setText("X"); 
       } else { 
        button.setText("X"); 
        turn.setText("O"); 
       } 
      } 
      else { 
       note.setText("NOTE: This place is taken already."); 
      } 
     } 
    }); 

のこの種をやりました。

とにかく、セル間の組み合わせをチェックしたいのですが(XまたはOが行/列/斜めに3回表示される場合は、note.setTextを使用し、「ゲームは終了しました。勝った")。

それぞれのif文を使用するのではなく、機械加工した組み合わせをチェックする方法がありますか?

グリッドレイアウト:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView1"/> 
<GridLayout 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_centerHorizontal="true" 
    android:id="@+id/grid" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:columnCount="3" 
    android:rowCount="3" 
    android:orientation="horizontal"> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button1" /> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button2" /> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button3" /> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button4"/> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button5"/> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button6"/> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button7"/> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button8"/> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button9"/> 
</GridLayout> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_below="@id/grid" 
    android:id="@+id/textView2"/> 

答えて

0

私の最初の提案は、あなたのビューに行くためにモデルを設定することです。

private char[][] mGrid = new char[3][3]; 
    private char mNext; // x or o, to show who's turn it is 

これは、状態を保存/復元するときにも役立ちます。これは、最終的に行う必要があります。

あなたはこのように、単一OnClickListenerを使用して少し簡略化することができます。

 View.OnClickListener listener = new View.OnClickListener() { 

       @Override 
       public void onClick (View v) { 

        int row, col; 
        switch (v.getId()) { 
        case R.id.button1: 
         row = 0; 
         col = 0; 
         break; 
        case R.id.button2: 
         row = 0; 
         col = 1; 
         break; 

        // etc. etc. 
        } 

        // now you have a grid, a row & column and a next 
        // indicator to do your logic 

        mGrid[row][col] = mNext; 

        // check your game state, make any updates, ... 

        mNext = (mNext == 'X') ? 'O' : 'X'; // switch players 
       } 
     } 

     final Button button1 = (Button) findViewById(R.id.button1); 
     button1.setText(mGrid[0][0] == '\0' ? "Empty" : Character.toString(mGrid[0][0])); 
     button1.setEnabled(mGrid[0][0] != '\0'); // if it's filled, you can't click the button 
     button1.setOnClickListener(listener); 

     final Button button2 = (Button) findViewById(R.id.button2); 
     button2.setText(mGrid[0][1] == '\0' ? "Empty" : Character.toString(mGrid[0][1])); 
     button2.setEnabled(mGrid[0][1] != '\0'); 
     button2.setOnClickListener(listener); 

     // etc. 

うまくいけば、あなたにいくつかのアイデアを与えるだろうという。

+0

あなたはそれを調べて、それがなぜ機能しないのか教えてください。 http://pastebin.com/C3V5rGzs - 私は長い道のりをやったが、なぜ関数チェッカー()が機能していないのか分からない。 – ExCluSiv3

関連する問題