2017-01-24 8 views
0

Я делаю игру тральщика, в первой части, я решаю, есть ли какая-либо бомба на определенной кнопке, используя boolean1 (поле представляет собой массив 16x16). Я тестировал эту часть, а результат верно. 50 случайных true значений, а остальные false моя проблема начинается со второй части, где я хочу получить определенное действие кнопкой, основанной на значении boolean1. При реализации кода все jbuttons следуют за вторым ActionListener, где значок установлен на bomb. Я хочу получить jbuttons, чтобы также следить за первым обработчиком.JButtons не следует за назначенными обработчиками?

первая процедура

static void placeMines() 
     { 
       for (int x=0;x<16;x++) 
       { 
        for (int y=0;y<16;y++) 
        { 
         if(boolean1[x][y]=(true)) 
         { 
          boolean1[x][y]=false; 
         } 
        } 
       } 



       int minesPlaced = 0; 
       Random random = new Random(); 
       while(minesPlaced < 50) 
       { 
        int a = random.nextInt(Width); 
        int b = random.nextInt(Height); 
        boolean1[a][b]=(true); 
        minesPlaced ++; 
       } 
     } 

вторая процедура:

static void buttonfunctions() 
{  
     for(int c=0;c<16;c++) 
     { 
      for(int d=0;d<16;d++) 
      { 
       if (boolean1[c][d]=false) 
       { 
        final int temp3=c; 
        final int temp4=d; 

        jbuttons[c][d].addActionListener(new ActionListener() 
        { 
         @Override 
         public void actionPerformed (ActionEvent e) 
          { 

             jbuttons[temp3][temp4].setIcon(clickedCell); 

          } 
        }); 
       } 
       if(boolean1[c][d]=true) 
       { 
        final int temp1=c; 
        final int temp2=d; 

        jbuttons[temp1][temp2].addActionListener(new ActionListener() 
         { 
          @Override 
          public void actionPerformed (ActionEvent e) 
           {       
              jbuttons[temp1][temp2].setIcon(bomb);     
           } 
         }); 
       } 

      } 
     } 

} 
+0

'JButton' имеет хороший небольшой метод' putClientProperty' и 'getClientProperty', который позволяет вам ассоциировать больше данных с помощью кнопки, это может быть способ преодолеть необходимость использования еще одного массива. Я мог бы сохранить ячейку (x/y) кнопки, и при необходимости просто найти модель, чтобы определить состояние модели ... как идея – MadProgrammer

+0

Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Правильный пример] (http://www.sscce.org/). –

ответ

2

Для того, чтобы проверить, если логическое значение верно, что вы хотите сделать:

if (myBoolean) 

делает

if (myBoolean == true) 

эквивалентен, но более подробный, чем необходимо.

делает

, если (myBoolean = истина) синтаксически правильная, но имеет эффект присвоения верна myBoolean, а затем оценить результат выполнения задания, которое true. Так, возвращаясь к коду:

Если цель следующий код для сброса матрицы:

if(boolean1[x][y]=(true)) 
    { 
     boolean1[x][y]=false; 
    } 

, то вы должны просто сделать

boolean1[x][y] = false; 

Также

if (boolean1[c][d]=false) 

должно быть:

if (! boolean1[c][d]) 

Возможно, что-то не так с вашим кодом, но вы можете начать исправление этого.

+0

что это? это не отвечает ни на один из вопросов пользователя - его просто лекция – gpasch