Итак, я делаю симона с надписью игра, и у меня возникают проблемы с тем, чтобы пользователь нажимал на цвета, чтобы игра могла видеть, правильно ли то, что пользователь нажал, или нет.
Прямо сейчас я реализовал метод onclick для своих кнопок.Цель состоит в том, чтобы, когда пользователь нажимал кнопку определенное количество раз, игра проверяла, совпадает ли показанный шаблон с шаблоном, предоставленным пользователем.Игра показывает закономерности.Однако нажатие кнопки после того, как игра показала шаблон, приводит к тому, что игра перестает работать.Я попытался запустить отладчик, но когда я это делаю, активность не загружается, поэтому я не могу нажать кнопку.Но когда я просто запускаю игру, активность показывает, но затем падает, когда я нажимаю кнопку.
Это при создании:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
int[] pattern;
int[] guess;
Button[] colours;
public int count;
public TextView Final;
public int score;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button green = findViewById(R.id.Green);
Button blue = findViewById(R.id.Blue);
Button red = findViewById(R.id.Red);
Button purple = findViewById(R.id.purple);
TextView Final = findViewById(R.id.Score);
colours = new Button[]{green, blue, red, purple};
int score = 0;
do {
pattern = showPattern(colours, score);
guess = getGuess(colours, score);
}while(Arrays.equals(pattern,guess));
Final.setText("Score is" + score);
}
Это методы onclick:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.Green:
guess[count] = 0;
count++;
if (count >= score + 1 && Arrays.equals(pattern,guess)) {
score++;
pattern = showPattern(colours,score);
count = 0;
}
else if (count>=score + 1) {
String result = "You're score is " + score;
Final.setText(result);
}
case R.id.Blue:
guess[count] = 1;
count++;
if (count >= score + 1 && Arrays.equals(pattern,guess)) {
score++;
pattern = showPattern(colours,score);
count = 0;
}
else if (count>=score + 1) {
String result = "You're score is " + score;
Final.setText(result);
}
case R.id.Red:
guess[count] =2;
count++;
if (count >= score + 1 && Arrays.equals(pattern,guess)) {
score++;
pattern = showPattern(colours,score);
count = 0;
}
else if (count>=score + 1) {
String result = "You're score is " + score;
Final.setText(result);
}
case R.id.purple:
guess[count] = 3;
count++;
if (count >= score + 1 && Arrays.equals(pattern,guess)) {
score++;
pattern = showPattern(colours,score);
count = 0;
}
else if (count>=score + 1) {
String result = "You're score is " + score;
Final.setText(result);
}
default:
break;
}
}
Это метод getGuess, который, как мне кажется, вызывает проблемы в моем приложении.
public int[] getGuess(Button[] colours, int score) {
guess = new int[score+1];
colours[0].setOnClickListener(this);
colours[1].setOnClickListener(this);
colours[2].setOnClickListener(this);
colours[3].setOnClickListener(this);
while(count<score+1){
}
return guess;
Это метод showPattern:
public int[] showPattern(final Button[] colours, int score) {
int[] pattern = new int[score + 1];
Random rand = new Random();
for (int j=0;j<score + 1;j++) {
pattern[j] = rand.nextInt(4);
switch (pattern[j]) {
case 0:
new CountDownTimer(2000,2000) {
public void onTick(long millisUntilFinished) {
colours[0].setBackgroundColor(getColor(R.color.lightGreen));
}
public void onFinish() {
colours[0].setBackgroundColor(getColor(R.color.green));
}
}.start();
break;
case 1:
new CountDownTimer(2000,2000) {
public void onTick(long millisUntilFinished) {
colours[1].setBackgroundColor(getColor(R.color.lightBlue));
}
public void onFinish() {
colours[1].setBackgroundColor(getColor(R.color.blue));
}
}.start();
break;
case 2:
new CountDownTimer(2000,2000) {
public void onTick(long millisUntilFinished) {
colours[2].setBackgroundColor(getColor(R.color.lightRed));
}
public void onFinish() {
colours[2].setBackgroundColor(getColor(R.color.red));
}
}.start();
break;
case 3:
new CountDownTimer(2000,2000) {
public void onTick(long millisUntilFinished) {
colours[3].setBackgroundColor(getColor(R.color.lightPurple));
}
public void onFinish() {
colours[3].setBackgroundColor(getColor(R.color.purple));
}
}.start();
break;
}
}
return pattern;
}
Я ожидаю, что как только число открытых переменных будет равно превышенному количеству переменных, и что массивы догадок и шаблонов будут равныЯ могу показать шаблон и подождать, пока пользователь снова угадает.Тем не менее, после нажатия кнопки игра останавливается.
(ОБНОВЛЕНИЕ) Так что я думаю, что в дополнение к методу getguess цикл do while, похоже, тоже портит мой код.Также последняя строка в logcat гласит
Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)