2012-04-16 2 views
0

나는 카드 게임을 가지고 있으며 ArrayList를 사용하여 사람들의 손에 카드를 저장합니다. 메인 클래스에서 InvokeLater를 사용하여 호출 된 GUI 클래스를 업데이트하고 GUI 클래스를 업데이트하는 메인 메서드가 있습니다.자바 스윙 : Int를 반환하기 전에 마우스 클릭 이벤트를 기다리는 중

현재 콘솔에서 게임을하고 스캐너에 int를 입력하여 플레이어 손에서 카드를 선택합니다. 내가하고 싶은 것은 플레이어가 선택을해야 할 때 실행되는 스레드를 호출하는 것입니다. 그런 다음 플레이어가 GUI에서 해당 카드를 클릭 할 때까지 기다렸다가 카드 위치에 적절한 int를 반환합니다. 이 선택은 내 게임에 의해 처리됩니다.

현재 GUI를 어떻게 업데이트하고 있습니까?

 public static void Play(ArrayList<Card> ...){ 
     UpdateHand(player1, deck, deckused); 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       GUI.getInstance().UpdateHand(); 

      } 
     }); 

카드에 리스너를 부착하고 이름을 손안의 해당 위치의 int로 설정하십시오.

public void PlayerSelection() 
    { 
     selection = -1; 
     Information = new JLabel("Please Select Your Card"); 
     ButtonDisplay.add(Information); 
     ButtonDisplay.updateUI(); 
     for (int i = 0; i < (HumanHand.size()); i++) 
      { 
       Card card = HumanHand.get(i); 

       BufferedImage cardImage = null; 

       try { 

        cardImage = ImageIO.read(new File("card/" + card + ".jpg")); 
        } catch (IOException e) { 
      // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        JLabel picLabel = new JLabel(new ImageIcon(cardImage)); 
        String name = "" + i; 
        picLabel.setName(name); 
        picLabel.addMouseListener((MouseListener) this); 
        HumanHandDisplay.add(picLabel); 
      } 
    } 

마우스를 클릭 할 때 int를 저장합니다.

나머지는 계산에 사용하기 위해이 int를 기본 클래스 인 Play() 메소드로 반환하고 싶습니다. 이 작업을 수행하는 방법, 특히 선택을 기다리는 작업을 수행 할 수 없습니다. 이 작업을 수행 할 수 있다고 들었지만이 작업을 구현하는 방법은 확실하지 않습니다. 누구라도 도움이된다면 도움이 될 것입니다.

+0

자바 명명 규칙을 배우고 준수하십시오. – kleopatra

답변

2

아니요, 스레드를 일시 중지하거나 여기에 정렬하지 않으려합니다. 대신 프로그램에서 사용자의 위치에 따라 프로그램의 상태를 변경하게되며 응답에 따라 프로그램의 동작은 해당 주에 따라 달라집니다.

예를 들어 사용자가 카드를 재생할 때까지 기다려야하는 경우 주 수업에 currentPlayer 변수를 지정하고 사용자가 차례대로 사용자에게 할당합니다. 그런 다음 자신의 차례에 적합한 유효한 입력을 제외하고 사용자 입력에 응답하지 않도록 프로그램을 코딩하십시오.

그러면 기본 GameEngine 클래스는 currentPlayer 변수를 다음 플레이어로 넘겨주고 응답을 기다립니다.

편집 한
당신의 상태 :

내가 정말 이해가 확실하지 않다. 나는 이미 게임을 구현했으며 모든 것은 규칙과 AI 플레이어가 플레이 할 수있는 콘솔이다. 난 마우스 클릭 이벤트를 기다리는 GUI로 스캐너를 사용하여 선택을하는 곳으로 확장해야합니다.

당신은 큰 변화를 만드는 GUI 이벤트 기반 프로그램으로 콘솔 기반의 선형 프로그램에서 움직이고 있음을 양해 해 주시기 바랍니다, 새로운 프로그램이 이벤트 기반이다 인 키. 현재 코드가 잘 작동하는 OOP와 호환되는 클래스, 최소한의 정적 변수 및 메소드, 잘 정의 된 상태를 가진 클래스로 작성된 경우 전환이 원활하게 이루어져야합니다. 반면에 현재 코드베이스가 클래스가 거의없고 선형 콘솔 사용자 인터페이스를 중심으로하는 경우 코드를 처음부터 다시 작성해야 할 수도 있습니다.

현재 코드 중 일부를 표시하고 디자인을 설명 할 수 있습니다.

다음 당신은 상태 :

나는 프로그램이 INT 이외에 응답하지 않도록 makeing 가겠어요 어떻게

?

프로그램이 int에 대해서만 응답하는 것을 의미하는지 확인하십시오. int 어디 있니? JTextField에서? 다른 곳? 아마도 입력 검증이 필요합니다.

+0

나는 정말로 이해하고 있는지 잘 모르겠다. 나는 이미 게임을 구현했으며 모든 것은 규칙과 AI 플레이어가 플레이 할 수있는 콘솔이다. 난 마우스 클릭 이벤트를 기다리는 GUI로 스캐너를 사용하여 선택을하는 곳으로 확장해야합니다. 프로그램이 int가 아닌 다른 것에 응답하지 않도록하려면 어떻게해야합니까? – Sean

+0

@Sean : ** 1 ** 수정을 참조하십시오. –

0

맞춤 구성 요소에서 원하는 것은 무엇이며 스윙에서는 불가능합니다 (적어도 자신의 모달을 구현하는 데 많은 노력을 기울이지 않아도 됨). 당신의 프로그램은 @ Hovercraft의 대답처럼 상태를 가지고 이벤트 기반이되어야합니다.

관련 문제