2015-04-02 2 views
0

Я пытаюсь создать игру, используя 2D-массив, чтобы отобразить макет игры.Java 2D массив с поддержкой сетки для создания игрового поля

Я изо всех сил, чтобы изменить Int к JButton с другим изображением, возложенные на него в зависимости от того, что число отображения в сетке:

private void PlayPanel() { 
    try 
    { 
     iconBlank=new ImageIcon(Toolkit.getDefaultToolkit().createImage(GUI.class.getResource("white32x32.jpg"))); 
    } 
    catch (Exception e) 
      { 
       System.err.println("Blank Icon ImageIcon" +e); 
      } 
    try 
    { 
     iconSand=new ImageIcon(Toolkit.getDefaultToolkit().createImage(GUI.class.getResource("sand.jpg"))); 
    } 
    catch (Exception e) 
      { 
       System.err.println("Sand Icon ImageIcon" +e); 
      } 
     try 
    { 
     iconBall=new ImageIcon(Toolkit.getDefaultToolkit().createImage(GUI.class.getResource("sand60x60.png"))); 
    } 
    catch (Exception e) 
      { 
       System.err.println("Ball Icon ImageIcon" +e); 
      } 
     try 
    { 
     iconEnd=new ImageIcon(Toolkit.getDefaultToolkit().createImage(GUI.class.getResource("sandstone.jpg"))); 
    } 
    catch (Exception e) 
      { 
       System.err.println("End Icon ImageIcon" +e); 
      } 



pPlayScreen =new JPanel(); 
    pPlayScreen.setPreferredSize(new Dimension(550,520)); 
    pPlayScreen.setBorder(BorderFactory.createRaisedBevelBorder()); 
    pPlayScreen.setBackground(Color.white); 
    pPlayScreen.setLayout (new GridLayout (13,16)); 

int[][] playButtons = { 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 1, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 }, 
{ 3, 1, 1, 1 ,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } 
}; 


    for (int rows = 0 ; rows < 16 ; rows++) 
{ 
for (int cols = 0 ; cols < 13 ; cols++) 
{ 
if(playButtons [rows][cols]==0){ 
// ??? 
} 
playButton [rows] [cols] = new JButton(); 
playButton [rows] [cols].addActionListener (new Play()); 

pPlayScreen.add (playButton [rows] [cols]); 
pMain.add(pPlayScreen); 

} 
}  
} 
+0

В чем проблема? –

ответ

0

Вы не можете присвоить JButton в целочисленный массив , Он должен быть массивом объектов, чтобы иметь возможность хранить как целые, так и JButtons.

0

Я бы предложил использовать более объектно-ориентированный подход. Вы не можете преобразовать Button в int.

Попробуйте, например, использовать MVC (модель, представление, контроллер), то вы можете просто использовать какой-либо объект, содержащий 2D-массив int в качестве модели, и представление, интерпретирующее этот массив, путем отображения типов кнопок, которые вам нравятся, на основе модель.

0

рассмотреть возможность сделать собственный класс, который имеет свойство как JButton и междунар, как так ...

public class MyButton { 

    private int n; 
    private JButton button; 

    // Constructor 
    public MyButton() { 

    } 

    // Accessors and mutators 
    private void setN(int n) 
     this.n =n; 
    } 

    private int getN() { 
     return this.n; 
    } 

    private void setButton(JButton button) { 
     this.button = button; 
    } 

    private JButton getButton() { 
     return this.button; 
    } 
} 

И тогда вы можете получить доступ к нему, создавая новый объект MyButton, а затем список на массив их так ...

ArrayList<MyButton> buttons = new ArrayList<MyButton>(); 

И тогда вы можете делать то, что вам нужно. Это красота возможностей OOP и Java. В наши дни я очень скучаю по этому поводу. Лол. Надеюсь, это поможет ... :)