2016-06-11 2 views
2

나는 Snakes and Ladders 게임을 만들고 있는데, 하나의 작은 문제가 있습니다. 나는 조각들을 움직일 수 없다.Java 애플릿의 배열에서 특정 그림을 변경하는 방법은 무엇입니까?

기본적으로 배열에 64 개의 그림이있는 64- 타일 격자가 있습니다. 또한 움직이는 조각으로 사용하는 타일과 동일한 크기의 2 장의 그림이 있습니다.

JButton을 클릭하면 그림이 업데이트됩니다.

여기 내 코드와 나는 시도 것을 :

public class SnakesandLadders extends Applet implements ActionListener 
{ 

//Part of the grid 
int row = 8; 
JLabel a[] = new JLabel [(row*row) + 1]; 
Panel g = new Panel (new GridLayout (row, row)); 
JLabel grid; 
JButton roll; 
int playerNum = 1; 
int p1space = 0; 
int p2space = 0; 

public void init() 
{  
    //The Roll Button 
    roll = new JButton ("ROLL"); 
    roll.addActionListener (this); 
    roll.setActionCommand ("roll"); 

    //The Grid Displayed using a for loop 
    for (int rownum = 7 ; rownum >= 0 ; rownum--) 
    { 
    int number = rownum*8; 
     if (rownum % 2 != 0) 
     { 
      for (int i = 7 ; i >= 0 ; i--) 
      { 
       a [i+number] = new JLabel (createImageIcon ((i+number) + ".jpg")); 
       g.add (a [i+number]); 
      } 
     } 
     else 
     { 
      for (int i = 0; i < 8; i++) 
      { 
       a [i+number] = new JLabel (createImageIcon ((i+number) + ".jpg")); 
       g.add (a [i+number]); 
      } 
     } 
    } 
     add (g); 
     add (roll); 
    } 

    public void actionPerformed (ActionEvent e) 
    { 

     if (e.getActionCommand().equals ("roll")) 
     {//NEED TO FIX THIS PART 
      { 
       int n = (int) ((Math.random() * 6) + 1); 
       playerNum++; 
       //To choose which picture to update 
       if (playerNum % 2 != 0) { 
        turn.setText ("It is Player 1's Turn"); 
        p1space = p1space + n; 
        a[p1space] = new JLabel (createImageIcon ("p1.jpg")); 
        } 

       else { 
        turn.setText ("It is Player 2's Turn"); 
        p2space = p2space + n; 
        a[p2space] = new JLabel (createImageIcon("p2.jpg")); 
        } 
      } 
    } 

    //The picture update method     
    protected static ImageIcon createImageIcon (String path) 
    { 
     java.net.URL imgURL = SnakesandLadders.class.getResource (path); 
     if (imgURL != null) 
     { 
      return new ImageIcon (imgURL); 
     } 
     else 
     { 
      System.err.println ("Couldn't find file: " + path); 
      return null; 
     } 
    } 
} 

코드 실행되지만 사진 업데이트 없음. 저는 논리에서 실수를 저질렀습니다. 배열의 그림을 player1과 player2로 변경하는 방법을 알 수는 없습니다. 어떤 도움을 주셔서 감사합니다.

편집 : 롤 버튼을 다시 클릭하면 이전 아이콘을 제거하는 방법을 알고 싶습니다. 감사합니다

+0

을 다음과 같이 방법의 끝이이 방법을 추가 –

+0

1) 애플릿 코드를 작성하는 이유 교사가 지정했기 때문에 [CS 교사가 ** Java 애플릿을 가르치는 것을 중단해야하는 이유] (http : //programmers.blogoverflow. com/2013/05/why-cs-teachers-should-stop-teaching-java-applets /) 2) [자바 플러그인 지원 중단됨] (http://www.gizmodo.com.au/2016/01/)을 참조하십시오. hell-java-plug-in /) 및 [Plugin-Free Web으로 이동] (https://blogs.oracle.com/java-platform-group/entry/moving_to_a_plugin_free) .. –

+0

.. 3) AWT를 사용해야하는 이유는 [이 답변보기] (http://stackoverflow.com/questions/6255106/java-g) Swing을 선호하는 구성 요소를 사용하여 AWT를 포기해야하는 여러 가지 이유 때문에 AWT (Ui-Listener-Without-awt/6255978 # 6255978) –

답변

0

g에 새 레이블을 추가하지 않으므로 gpaint 메서드를 호출하여 레이블을 렌더링 할 수 없습니다.

대신 새로운 JLabel을 만드는, 당신은 이미지를 변경 JLabel::setIcon을 사용할 수

// a[p1space] = new JLabel (createImageIcon ("p1.jpg")); 
a[p1space].setIcon(createImageIcon ("p1.jpg")); 
+0

ayyy this works : D 이제 다시 롤오버 할 때 오래된 사진을 삭제하는 방법을 찾아야합니다. – BadAtComSci

0

당신은에 변경 사항을 다시로드되는 변경 사항을 수행 한 후() 메소드 (재 검증) 및 다시 칠 호출 할 필요가 당신의 애플릿. 는 나 또한 .. "* FFS 당신의 캡 잠금 키를 찾기 및 당신은 내가 다시 와서 읽을 수 있음을 완료하면 .. 그것을 deisengage WANT *

public void actionPerformed (ActionEvent e) 
{ 
    ..... 
    g.revalidate(); 
    g.repaint(); 
} 
관련 문제