我已经构建了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"/>
答案 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.
希望这会给你一些想法。