Как сделать, чтобы после того, как поставили крестик, то через некоторое время, вставился нолик, а не сразу?
Тут только для первой кнопки, остальное будет аналогичным способом:
btn1.setOnClickListener(new View.OnClickListener() {
@Override public void onClick (View view){
if (btn1.getText().toString().equals("")) {
btn1.setText("X");
btn1.setTextColor(Color.RED);
Thread thread = new Thread() {
@Override
public void run() {
super.run();
try {
Main4Activity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
int a = new Random().nextInt(3);
if (btn2.getText().toString().equals("O") && btn5.getText().toString().equals("O")
&& btn8.getText().toString().equals("")) {
btn8.setText("O");
} else if (btn2.getText().toString().equals("O") && btn8.getText()
.toString()
.equals("O") && btn5.getText().toString().equals("")) {
btn5.setText("O");
} else if (btn3.getText().toString().equals("O") && btn5.getText()
.toString()
.equals("O") && btn7.getText().toString().equals("")) {
btn7.setText("O");
} else if (btn3.getText().toString().equals("O") && btn7.getText()
.toString()
.equals("O") && btn5.getText().toString().equals("")) {
btn5.setText("O");
} else if (btn3.getText().toString().equals("O") && btn6.getText()
.toString()
.equals("O") && btn9.getText().toString().equals("")) {
btn9.setText("O");
} else if (btn3.getText().toString().equals("O") && btn9.getText()
.toString()
.equals("O") && btn6.getText().toString().equals("")) {
btn6.setText("O");
} else if (btn4.getText().toString().equals("O") && btn5.getText()
.toString()
.equals("O") && btn6.getText().toString().equals("")) {
btn6.setText("O");
} else if (btn4.getText().toString().equals("O") && btn6.getText()
.toString()
.equals("O") && btn5.getText().toString().equals("")) {
btn5.setText("O");
} else if (btn5.getText().toString().equals("O") && btn2.getText()
.toString()
.equals("O") && btn8.getText().toString().equals("")) {
btn8.setText("O");
} else if (btn5.getText().toString().equals("O") && btn8.getText()
.toString()
.equals("O") && btn2.getText().toString().equals("")) {
btn2.setText("O");
} else if (btn5.getText().toString().equals("O") && btn3.getText()
.toString()
.equals("O") && btn7.getText().toString().equals("")) {
btn7.setText("O");
} else if (btn5.getText().toString().equals("O") && btn7.getText()
.toString()
.equals("O") && btn3.getText().toString().equals("")) {
btn3.setText("O");
} else if (btn5.getText().toString().equals("O") && btn4.getText()
.toString()
.equals("O") && btn6.getText().toString().equals("")) {
btn6.setText("O");
} else if (btn5.getText().toString().equals("O") && btn6.getText()
.toString()
.equals("O") && btn4.getText().toString().equals("")) {
btn4.setText("O");
} else if (btn6.getText().toString().equals("O") && btn3.getText()
.toString()
.equals("O") && btn9.getText().toString().equals("")) {
btn9.setText("O");
} else if (btn6.getText().toString().equals("O") && btn9.getText()
.toString()
.equals("O") && btn3.getText().toString().equals("")) {
btn3.setText("O");
} else if (btn6.getText().toString().equals("O") && btn4.getText()
.toString()
.equals("O") && btn5.getText().toString().equals("")) {
btn5.setText("O");
} else if (btn6.getText().toString().equals("O") && btn5.getText()
.toString()
.equals("O") && btn4.getText().toString().equals("")) {
btn4.setText("O");
} else if (btn7.getText().toString().equals("O") && btn3.getText()
.toString()
.equals("O") && btn5.getText().toString().equals("")) {
btn5.setText("O");
} else if (btn7.getText().toString().equals("O") && btn5.getText()
.toString()
.equals("O") && btn3.getText().toString().equals("")) {
btn3.setText("O");
} else if (btn7.getText().toString().equals("O") && btn8.getText()
.toString()
.equals("O") && btn9.getText().toString().equals("")) {
btn9.setText("O");
} else if (btn7.getText().toString().equals("O") && btn9.getText()
.toString()
.equals("O") && btn8.getText().toString().equals("")) {
btn8.setText("O");
} else if (btn8.getText().toString().equals("O") && btn5.getText()
.toString()
.equals("O") && btn2.getText().toString().equals("")) {
btn2.setText("O");
} else if (btn8.getText().toString().equals("O") && btn2.getText()
.toString()
.equals("O") && btn5.getText().toString().equals("")) {
btn5.setText("O");
} else if (btn8.getText().toString().equals("O") && btn7.getText()
.toString()
.equals("O") && btn9.getText().toString().equals("")) {
btn9.setText("O");
} else if (btn8.getText().toString().equals("O") && btn9.getText()
.toString()
.equals("O") && btn7.getText().toString().equals("")) {
btn7.setText("O");
} else if (btn9.getText().toString().equals("O") && btn3.getText()
.toString()
.equals("O") && btn6.getText().toString().equals("")) {
btn6.setText("O");
} else if (btn9.getText().toString().equals("O") && btn6.getText()
.toString()
.equals("O") && btn3.getText().toString().equals("")) {
btn3.setText("O");
} else if (btn9.getText().toString().equals("O") && btn7.getText()
.toString()
.equals("O") && btn8.getText().toString().equals("")) {
btn8.setText("O");
} else if (btn9.getText().toString().equals("O") && btn8.getText()
.toString()
.equals("O") && btn7.getText().toString().equals("")) {
btn7.setText("O");
} else if (btn1.getText().toString().equals("X") && btn2.getText()
.toString()
.equals("X") && btn3.getText().toString().equals("")) {
btn3.setText("O");
btn3.setTextColor(Color.BLUE);
} else if (btn1.getText().toString().equals("X") && btn3.getText()
.toString()
.equals("X") && btn2.getText().toString().equals("")) {
btn2.setText("O");
btn2.setTextColor(Color.BLUE);
} else if (btn1.getText().toString().equals("X") && btn4.getText()
.toString()
.equals("X") && btn7.getText().toString().equals("")) {
btn7.setText("O");
btn7.setTextColor(Color.BLUE);
} else if (btn1.getText().toString().equals("X") && btn7.getText()
.toString()
.equals("X") && btn4.getText().toString().equals("")) {
btn4.setText("O");
btn4.setTextColor(Color.BLUE);
} else if (btn1.getText().toString().equals("X") && btn5.getText()
.toString()
.equals("X") && btn9.getText().toString().equals("")) {
btn9.setText("O");
btn9.setTextColor(Color.BLUE);
} else if (btn1.getText().toString().equals("X") && btn9.getText()
.toString()
.equals("X") && btn5.getText().toString().equals("")) {
btn5.setText("O");
btn5.setTextColor(Color.BLUE);
} else if (a == 0) {
if (btn2.getText().toString().equals("")) {
btn2.setText("O");
btn2.setTextColor(Color.BLUE);
} else if (btn4.getText().toString().equals("")) {
btn4.setText("O");
btn4.setTextColor(Color.BLUE);
} else if (btn5.getText().toString().equals("")) {
btn5.setText("O");
btn5.setTextColor(Color.BLUE);
} else if (btn3.getText().toString().equals("")) {
btn3.setText("O");
btn3.setTextColor(Color.BLUE);
} else if (btn6.getText().toString().equals("")) {
btn6.setText("O");
btn6.setTextColor(Color.BLUE);
} else if (btn7.getText().toString().equals("")) {
btn7.setText("O");
btn7.setTextColor(Color.BLUE);
} else if (btn8.getText().toString().equals("")) {
btn8.setText("O");
btn8.setTextColor(Color.BLUE);
} else if (btn9.getText().toString().equals("")) {
btn9.setText("O");
btn9.setTextColor(Color.BLUE);
}
} else if (a == 1) {
if (btn4.getText().toString().equals("")) {
btn4.setText("O");
btn4.setTextColor(Color.BLUE);
} else if (btn2.getText().toString().equals("")) {
btn2.setText("O");
btn2.setTextColor(Color.BLUE);
} else if (btn5.getText().toString().equals("")) {
btn5.setText("O");
btn5.setTextColor(Color.BLUE);
} else if (btn3.getText().toString().equals("")) {
btn3.setText("O");
btn3.setTextColor(Color.BLUE);
} else if (btn6.getText().toString().equals("")) {
btn6.setText("O");
btn6.setTextColor(Color.BLUE);
} else if (btn7.getText().toString().equals("")) {
btn7.setText("O");
btn7.setTextColor(Color.BLUE);
} else if (btn8.getText().toString().equals("")) {
btn8.setText("O");
btn8.setTextColor(Color.BLUE);
} else if (btn9.getText().toString().equals("")) {
btn9.setText("O");
btn9.setTextColor(Color.BLUE);
}
} else if (a == 2) {
if (btn5.getText().toString().equals("")) {
btn5.setText("O");
btn5.setTextColor(Color.BLUE);
} else if (btn4.getText().toString().equals("")) {
btn4.setText("O");
btn4.setTextColor(Color.BLUE);
} else if (btn2.getText().toString().equals("")) {
btn2.setText("O");
btn2.setTextColor(Color.BLUE);
} else if (btn3.getText().toString().equals("")) {
btn3.setText("O");
btn3.setTextColor(Color.BLUE);
} else if (btn6.getText().toString().equals("")) {
btn6.setText("O");
btn6.setTextColor(Color.BLUE);
} else if (btn7.getText().toString().equals("")) {
btn7.setText("O");
btn7.setTextColor(Color.BLUE);
} else if (btn8.getText().toString().equals("")) {
btn8.setText("O");
btn8.setTextColor(Color.BLUE);
} else if (btn9.getText().toString().equals("")) {
btn9.setText("O");
btn9.setTextColor(Color.BLUE);
}
}
}
});
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
};
thread.start();
}
endgame();
}
});
Но так не работает.
переместите Thread.sleep(2000);
на место перед строкой thread.start();
1) Проблема вероятно решиться если перенести Thread.sleep(2000) сразу после public void run()
2) Извините, но такой код за гранью добра и зла. Вы пишите огромную простыню кода, а потом тратите кучу времени чтобы разобраться что там не работает, хотя тот же код пишется куда проще. Даже если вы просто создадите простейшие функции код сократиться в несколько раз:
btn1.setOnClickListener(new View.OnClickListener()
{
@Override public void onClick (View view){
if (btn1.getText().toString().equals("")) {
btn1.setText("X");
btn1.setTextColor(Color.RED);
Thread thread = new Thread() {
@Override
public void run() {
super.run();
try {
Main4Activity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
setRandomZero();
}
});
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
};
thread.start();
}
endgame();
}
});
private void setRandomZero() {
int a = new Random().nextInt(3);
if (isZero(btn2) && isZero(btn5) && isEmpty(btn8)) {
setZero(btn8);
} else if
...
}
}
private static boolean isZero(Button btn) {
return btn.getText().toString().equals("O");
}
private static boolean isEmpty(Button btn) {
return btn.getText().toString().equals("");
}
private static void setZero(Button btn) {
btn.setText("O");
}
Но там нужно вообще использовать циклы и массивы, скажем проверка что выиграли нолики или крестики запишется примерно так:
private int[][] getNumbers() {
return new int[][] {
{getNumber(btn1), getNumber(btn2), getNumber(btn3)},
{getNumber(btn4), getNumber(btn5), getNumber(btn6)},
{getNumber(btn7), getNumber(btn8), getNumber(btn9)}
};
}
private boolean isZeroWin() {
return isWin(3);
}
private boolean isXWin() {
return isWin(-3);
}
private boolean isWin(int winNumber) {
int[][] arr = getNumbers();
int sum1, sum2;
for(int i = 0; i<= 3; i++) {
sum1 = 0; sum2 = 0;
for(int j = 0; j <= 3; j++) {
sum1 += arr[i][j];
sum2 += arr[j][i];
}
if(sum1 == winNumber || sum2 == winNumber) {
return true;
}
}
sum1 = 0; sum2 = 0;
for(int i = 0; i<= 3; i++) {
sum1 += arr[i][i];
sum2 += arr[2-i][2-i];
}
if (sum1 == winNumber || sum2 == winNumber) {
return true;
}
return false;
}
private static int getNumber(Button btn) {
String str = btn.getText().toString();
if(str.equals("O")) {
return 1;
} else if(str.equals("")) {
return 0;
} else {
return -1;
}
}
Да такой код писать несколько сложнее чем миллион if'ов, но научившись писать такой код, вы сократите время написания кода в разы, плюс намного легче его будет отлаживать. В крайнем случае, даже тот код что выше позволит вам во много раз сократить все ваши функции.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Создаю окно с некоторой надписью и реакцией на нажатие клавиш(отображение нажатых символов на окне)Помогите пожулуйста создать кнопку на этом...
Осваивая AndroidStudio, столкнулся с такой проблемойСледующий код должен рисовать на экране бутылку, и далее с помощью многократного вызова fly() , например...