如何检查网格布局字母组合

时间:2016-10-25 13:14:31

标签: java android android-studio

我已经构建了3列3行(3x3)的网格布局,每个单元格包含按钮(整​​个网格中有9个按钮)。 我已经为每个按钮做了这种检查

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转弯)并根据当前转弯设置文字。

无论如何,这很好用,虽然我想检查单元格之间的组合(如果X或O在行/列/倾斜中出现3次,我将使用note.setText并写入&#34 ;游戏结束,X / O赢了#34;。

有没有更短的方法来检查我刚加工过的组合,而不是对每一个组合使用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"/>

1 个答案:

答案 0 :(得分: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.

希望这会给你一些想法。