Простая игра 8 ладей для начинающих - PullRequest
1 голос
/ 07 марта 2012

Привет, я новичок в java, и я подумал, что попробую создать игру, в которой пользователь на самом деле пытается решить проблему с 8 ферзями. Тем не менее, это увеличивает сложность, начиная с 8 ладей, до 14 слонов, а затем до 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) {

    }





}

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Ваш код работает.Я запускаю его, и когда я нажимаю на квадрат 7-7 (тот, который находится в правом нижнем углу), я получаю сообщение: «он был нажат».

Так как вы добавили слушатель мышитолько к этому квадрату код ведет себя так, как ожидалось.

Но есть некоторые вещи, которые вы должны изменить:

  • Почему вы определяете BOARD_SIZE, BOARD_SIZE_COLS, BOARD_SIZE_ROWS?Если вы используете только квадратичные игровые поля, вам нужен только BOARD_SIZE, а если нет, то вам не нужен BOARD_SIZE.
  • Соглашение состоит в написании первой буквы ваших классов в верхнем регистре.Так что это ладьи вместо ладей
  • Вам нужно добавить слушателя на каждый квадрат доски, а не только на один

Этого должно быть достаточно для начала.

0 голосов
/ 07 марта 2012

Вы добавляете MouseListener только к последней кнопке, JButton в cboard [7] [7].

  • Зачем использовать MouseListener, а не ActionListener для JButtons?Это не имеет смысла.
  • Почему бы не добавить ActionListener в все кнопки J внутри цикла for?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...