2012-03-07 2 views
1

안녕하세요 저는 자바를 처음 접했고 사용자가 실제로 8 퀸즈 문제를 스스로 해결하려고하는 게임을 만들어 볼 것이라고 생각했습니다. 그러나, 어려움이 8 루크를 시작, 최대 14 주교 다음 8 왕비가 증가합니다.초보자를위한 단순한 8 루크 게임

체스 판을 성공적으로 만들었습니다. 내 mouselistener와 문제가 ... 보드의 각 사각형은 버튼을 클릭했을 때 내 의도는 그 광장은 클릭되었음을 나타 내기 위해 색상이 바뀌고, 다시 클릭 할 수없는 모든 사각형은 다음과 같이 바뀝니다. 게임에서 사각형.

사각형을 클릭하면 아무런 동작도 수행하지 않습니다. 미안하지만, 나는 그 사소한 것을 알고있다. 감사합니다. .

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 


public class rooks extends JFrame implements MouseListener{ 

    private final int BOARD_SIZE = 8; 
    private final int BOARD_SIZE_COLS = 8; 
    private final int BOARD_SIZE_ROWS = 8; 
    // private JTextField bottom = new JTextField("")             "); 
    // private JLabel bannerl = new JLabel("The game"); 
    // private JButton queens = new JButton(" Play Queens "); 
    private JButton rooks = new JButton(" Play Rooks "); 
    // private JButton bishops = new JButton(" Play Knights "); 
    private JButton[][] cboard = new JButton[BOARD_SIZE][BOARD_SIZE]; 
    private JTextArea bottomtextarea = new JTextArea(); 




    // constructor creating the chessboard 
    public rooks(){ 
     this.setSize(500, 500); 
     this.setTitle("rooks"); 
     // this.setIconImage(); 

     // create JPanels and add JComponents 
     JPanel main = new JPanel(new BorderLayout()); 
     this.setContentPane(main); 

     JPanel north = new JPanel(); 
     north.setLayout(new GridLayout(1,3)); 
     main.add(north, BorderLayout.NORTH); 
     // north.add(queens); 
     north.add(rooks); 
     // north.add(bishops); 

     JPanel south = new JPanel(); 
     main.add(south, BorderLayout.SOUTH); 
     south.add(bottomtextarea); 
     bottomtextarea.setEditable(false); 
     bottomtextarea.setVisible(true); 

     // create grid (actual chessboard) and initialise each button with no char 
     JPanel chessBoard = new JPanel(new GridLayout(BOARD_SIZE, BOARD_SIZE)); 
     main.add(chessBoard, BorderLayout.CENTER); 
     for (int i=0; i<BOARD_SIZE_ROWS; i++){ 
      for(int j=0; j<BOARD_SIZE_COLS; j++){ 
       cboard[i][j] = new JButton(""); 
       chessBoard.add(cboard[i][j]); 

       // as it loops add colour to the board, if (i+j=even then white, otherwise black) 
       if ((i + j) % 2 == 0) { 
          cboard[i][j].setBackground(Color.black); 
         } 
       else { 
          cboard[i][j].setBackground(Color.white); 
         } 
      } 
     } 

     cboard[7][7].addMouseListener(this); 


     this.setResizable(false); 
     this.setVisible(true); 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 

     } 

    public void mousePressed(MouseEvent e){ 

    } 
    public void mouseReleased(MouseEvent e) { 

    } 

    public void mouseEntered(MouseEvent e) { 

    } 

    public void mouseExited(MouseEvent e) { 

    } 

    public void mouseClicked(MouseEvent e) { 
     System.out.print("it has been clicked"); 
    } 

    void saySomething(String eventDescription, MouseEvent e) { 

    } 





} 

답변

0

마지막 단추에만 MouseListener를 추가하고, cboard [7] [7]에서 JButton을 추가합니다.

  • 왜 MouseListener를 사용하고 JButton에는 ActionListener를 사용하지 않습니까? 이것은 말이되지 않습니다.
  • 에 ActionListener를 추가하지 않는 이유 for 루프의 JButtons?
+0

감사합니다. 게시 한 후에 JButton 중 하나에 게시하는 것으로 알았습니다. ActionListener를 사용하여 루프 안에 넣으면 모든 버튼에 추가됩니다. –

1

코드가 작동 중입니다. 나는 그것을 실행하고 7-7 사각형 (오른쪽 하단 모서리에있는 하나)을 클릭하면 메시지가 표시됩니다. "클릭되었습니다."

이 사각형에만 마우스 수신기를 추가 했으므로 코드가 예상대로 작동합니다.

하지만 리팩토링 할 몇 가지가 있습니다 :

  • 가 왜 BOARD_SIZE, BOARD_SIZE_COLS, BOARD_SIZE_ROWS을 정의합니까는? 2 차 게임 보드 만 사용한다면 BOARD_SIZE 만 있으면되고 그렇지 않으면 BOARD_SIZE가 필요 없습니다.
  • 클래스의 첫 글자를 대문자로 쓰는 규칙입니다. 그래서 신병 대신 루크
  • 시작하기에 충분합니다 당신은 보드의 모든 광장 대신 하나의

이에 리스너를 추가해야

  • 입니다.