2016-11-20 8 views
1

Я новичок на этой странице, надеюсь, вам поможет, в основном я занимаюсь тральщицей на Java, но у нее есть проблема с функцией: открыть регион без мин и нет таких чисел, как в игре на окнах, когда вы нажимаете в одном месте и появляются все ячейки withe. Я попытался сделать рекурсивный, но я не могу, какая-то помощь?Обнаружение региона без мин на тральщике

Извините за код, оригинал на испанском языке, но я пытался сделать псевдокод: Matriz = многомерный массив (тральщик) мин и макс возвращает индекс мин и макс итерировать (8 sorroud клеток)

private void discoverWitheCell(int x, int y) { 
    if(matriz[x][y].getdiscovered() == false){ 
     matriz[x][y].setDiscovered(true); 
    } 
    else{ 
     if(matriz[x][y].getNumberOfMinesArround() == 0){ 
      for(int i=min(x);i<max(x);i++) 
       for(int j=min(y);j<max(y);j++) 
        discoverWhiteCell(i,j); 
     } 
    } 
} 
+0

Рекурсивный должен работать, вызывая его 8-соседей. Может быть, вы можете поделиться своим кодом, чтобы мы могли помочь? –

+0

сделано, действительно извините за мой плохой английский: c – Farengar

ответ

1

Здесь не так много кода, но я чувствую, что вы идете к нему назад.

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

private void ClickSquare(int x, int y) 
{ 
    // Did the user click an already exposed square? If so, ignore 
    if (matriz[x][y].getDiscovered()) return; 
    matriz[x][y].SetDiscovered(true); 
    if (matriz[x][y].getNumberOfMinesAround != 0) return; 
    // If empty, click all the neighbors 
    for (int xloop = x - 1; xloop <= x + 1; xloop++) 
     for (int yloop = y - 1; yloop <= y + 1; yloop++) 
      ClickSquare(xloop, yloop); 
} 

Я считаю, что вы обнаруженный тест перепутались и ваша версия, кажется, быть в состоянии идти в бесконечную (до перелива стека) рекурсии, если сосед тоже нуля, то она вернется к исходной клетке. Моя версия останавливает эту рекурсию только обработкой ячейки, если она еще не была обработана.

+0

И как вы знаете, что обрабатывается? – Farengar

+0

@Farengar Я не понимаю ваш вопрос. Я говорю, что я буду рассматривать вторичные ячейки, которые будут открыты, как если бы они были нажаты. Код открытия ячейки не должен заботиться о том, кто его вызывает. –

+0

Хорошо, я попробую вашу версию c: – Farengar