Пытаясь спроектировать игру тральщика в GUI, я написал функцию для визуализации эффекта домино.Это не похоже на работу.Помогите/ - PullRequest
0 голосов
/ 04 декабря 2018

Использование списка массивов целочисленных типов в качестве параметра, это рекурсивная функция.Операторы 8 if представляют восемь окружающих позиций определенной координаты в массиве с ограничениями, не позволяющими пересечь доску.

counts [] [] - целочисленный массив, хранящий счет соседних шахт иmine если это минная позиция.У меня глобальное целое число.Соответствующий JButton [] [], он хранит, отображает и является бэкэндом.Несмотря на это, ошибка не возникла из-за этого.

Справочная информация: В тральщике эффект домино возникает при нажатии на ячейку «ноль» (ячейка без окружающих «мин» и окружающий «ноль»'Ячейки также активируются. Очевидно, это требует рекурсии.

Ошибка, с которой я сталкивался, иногда была ошибка stackOverflow в сочетании с ArrayIndex вне пределов, но в основном только OutofBounds. Каждый прогон,' mines 'генерируются случайным образом, отсюда и отклонение ошибки. Генерация минной позиции, похоже, не выдает никакой ошибки, потому что я изменил количество мин на фиксированное число (7, если кому-то любопытно) просто для проверки, и были сгенерированы те же ошибкиОшибка была выдана в line 162, который я выделил в приведенном ниже коде, и в том месте, где я вызывал функцию рекурсивно.

public void dominoEffect(ArrayList<Integer> toClear){
        if(toClear.size() == 0) 
        {
            return;
        }
        else
        {
            int x = toClear.get(0) / 100;
            int y = toClear.get(0) % 100;
            toClear.remove(0);

            if(this.counts[x][y] == 0)
            {
                        if( x > 0 && y > 0) //
                        {
                            this.buttons[x-1][y-1].setText
                            (this.counts[x-1][y-1]+ "");
                            this.buttons[x-1][y-1].setEnabled(false);
                            if(this.counts[x-1][y-1] == 0)
                            {
                                toClear.add((x-1) * 100 + (y-1));
                            }
                        }
                        if( x > 0) //
                        {
                            this.buttons[x-1][y].setText
                            (this.counts[x-1][y]+ "");
                            this.buttons[x-1][y].setEnabled(false);
                            if(this.counts[x-1][y] == 0)
                            {
                                toClear.add((x-1) * 100 + y);
                            }

                        }
                        if(x > 0 && y < this.counts.length -1 ) //
                        {
                            this.buttons[x-1][y+1].setText // line 162
                            (this.counts[x-1][y+1]+ "");
                            this.buttons[x-1][y+1].setEnabled(false);
                            if(this.counts[x-1][y+1] == 0)
                            {
                                toClear.add((x-1) * 100 + (y+1));
                            }

                        }
                        if(y > 0) 
                        {
                            this.buttons[x][y-1].setText
                            (this.counts[x][y-1]+ "");
                            this.buttons[x][y-1].setEnabled(false);
                            if(this.counts[x][y-1] == 0)
                            {
                                toClear.add( x * 100 + (y-1));
                            }

                        }
                        if(y < this.counts.length -1) //
                        {
                            this.buttons[x][y+1].setText
                            (this.counts[x][y+1]+ "");
                            this.buttons[x][y+1].setEnabled(false);
                            if(this.counts[x][y+1] == 0)
                            {
                                toClear.add(x * 100 + (y+1));
                            }

                        }
                        if(x < this.counts.length-1 && y > 0) //
                        {
                             this.buttons[x+1][y-1].setText
                             (this.counts[x+1][y-1]+ "");
                            this.buttons[x+1][y-1].setEnabled(false);
                            if(this.counts[x+1][y-1] == 0)
                            {
                                toClear.add((x+1) * 100 + (y-1));
                            }

                        }
                        if(x < this.counts.length -1) //
                        {
                             this.buttons[x+1][y].setText
                            (this.counts[x+1][y]+ "");
                            this.buttons[x+1][y].setEnabled(false);
                            if(this.counts[x+1][y] == 0)
                            {
                                toClear.add((x+1) * 100 + y);
                            }

                        }
                        if(x < this.counts.length-1 && y < this.counts.length-1) 
                        {
                             this.buttons[x+1][y+1].setText
                            (this.counts[x+1][y+1]+ "");
                            this.buttons[x+1][y+1].setEnabled(false);
                            if(this.counts[x+1][y+1] == 0)
                            {
                                toClear.add((x+1) * 100 + (y+1));
                            }

                        }         
            }
            dominoEffect(toClear);
        }

}
...