Android-студия щелкает по кнопкам, вылетает, говорит Саймон - PullRequest
0 голосов
/ 03 января 2019

Итак, я делаю симона с надписью игра, и у меня возникают проблемы с тем, чтобы пользователь нажимал на цвета, чтобы игра могла видеть, правильно ли то, что пользователь нажал, или нет.

Прямо сейчас я реализовал метод 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)
...