Игра "крестики- нулики". Создал 9 кнопок, разместил в массиве, чтобы объявить и раздать id. Не могу додуматься , как сделать, чтобы после моего нажатия на кнопку (чтобы ввести Х), на другой случайной кнопке появился нулик. Понимаю, что нужно использовать Math.random().Только как... Простой вопрос, стыдно задавать, прошу о напутствии пожалуйста.
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button button[]= new Button[9];
Button b1pl,b2pl;
private Integer allid[]={
R.id.button1,
R.id.button2,
R.id.button3,
R.id.button4,
R.id.button5,
R.id.button6,
R.id.button7,
R.id.button8,
R.id.button9};
boolean first= true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b2pl = (Button) findViewById(R.id.b2pl);
b2pl.setOnClickListener(this);
b1pl = (Button) findViewById(R.id.b1pl);
b1pl.setOnClickListener(this);
for (int i=0;i<allid.length;i++){
button[i]=findViewById(allid[i]);
button[i].setOnClickListener(this);
}
}
@SuppressLint("ResourceAsColor")
@Override
public void onClick(View view) {
Button current = new Button(this);
current.setTextSize(24);
switch (view.getId()){
case R.id.b1pl:
if (first){
current.setTypeface(null,Typeface.BOLD);
current.setTextColor(R.color.colorPrimaryDark);
current.setText("X");
}
else {
current.setText("0");
current.setTextColor(R.color.colorPrimaryDark);
}
first=!first;
}
}
}
Конкретно по вашему вопросу могу посоветовать следующее:
Создать свой собственный класс MyButton с, например, такими функциями:
psfi BLANK = 0;
psfi CROSS = 1;
psfi ZERO = 2;
int state;
void setState(int state){
String text = "";
switch (state){
case CROSS: text="X"; break;
case ZERO: text="0"; break;
}
this.setText(text);
this.state = state;
}
int getState(){
return state;
}
В активити нужно добавить все кнопки в ArrayList<MyButton> buttons
и получать случайную пустую таким методом:
MyButton getRandomButton(){
int random = 0;
do {
random = new Random().nextInt(buttons.size());
} while (buttons.get(random).getState() != MyButton.BLANK);
return buttons.get(random);
}
где нужно:
getRandomButton().setState(MyButton.CROSS);
В данной реализации, полагаю, вам нужно хранить id кнопок в некотором списке. Каждый раз, когда пользователь нажимет на любую кнопку - вы удаляете ее id из этого списка, генерируете случайное число от 0 до N(длина списка), ищите этот элемент, устанавливаете значение нолика в эту случайную ячейку, удаляете id этой кнопки из общего листа. По-правде сказать, играть с таким компьютером будет скучно) Советую вам задуматься не о рандоме, а о реализации компьютера. Кристики нолики игра простая - она ограничена M кол-во вариантов.
Опять-таки общие советы новичкам. Почитайте про binding (исчезнет необходимости писать findViewById). Пишите код по ООП (не все в одном методе). Ваша задача научиться и охватить как можно больше, а не написать крестики-нолики - помните это! Удачи.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости