GUI - игра в шахматы, перетащите фигуры и бросьте в доску "2D массив" - PullRequest
0 голосов
/ 24 ноября 2018

Здравствуйте, я пытаюсь сделать игру в шахматы, пока я создал свои фигуры и могу перемещать их с помощью мыши.

Теперь я пытаюсь создать доску с двумерным массивом, содержащим шахматную фигуру, чтобы при перетаскивании фигуры на доске она добавляла фигуру в массив, например, на изображении

Я перетаскиваю кусок на (2,3) и board[2][3] = pawn

Example

Но я не уверен, как это реализовать, подумал яоб использовании координат, например, когда я перетаскиваю их в середину, скажем, у меня есть размер кадра 800x800 и размер платы 8, поэтому, когда я перетаскиваю свою фигуру в координаты (400,400), board[4][4] = pawn, но тогда я должен сделать это длякаждая ячейка и я получу до 64, если условия, есть ли какая-то хитрость, чтобы сделать это, или мой подход неверен?

If( piece's position is between ... and ... ){
then put into board[0][1]}

If ( piece's position is between ... ) {
then put then put into board[1][1]} 

1 Ответ

0 голосов
/ 24 ноября 2018

Вы можете использовать mouseListener на JLabels, который есть на вашей доске!Во-первых, постройте свою доску, используя 8 * 8 (шахматы это 8 * 8, верно?) JLabels, храните их в некотором массиве.

JLabel[][] boardFields = new JLabel[8][8];

Вы упаковываете их в JPanel с GridBagLayout.Вы можете легко расположить их в желаемом шаблоне, используя переменные GridBagContraints class'v gridx и gridy.

Теперь, что вы делаете, это где-то создаете статическую переменную, давайте вызовем ее selectedPiece.Давайте добавим слушателей мыши ко всем нашим полевым меткам:

for(int i=0;i<8;i++){
   for(int j=0;j<8;j++){

      boardFields[i][j] = new JLabel();
      //set its background white or black here

      //each field will listen to a mouse press (means we selected this piece)
      //and a mouse release (meaning we placed the selected piece here)
      boardFields[i][j].addMouseListener(new MouseAdapter(){

           public void mousePressed(MouseEvent e){
                selectedPiece = //set piece on this field somehow
                //update the background to plain black or white
                //make the icon of the piece follow the cursor
           }

           public void mousePressed(MouseEvent e){
                //update the background to contain the selectedPiece
                //make the icon of the piece stop followin the cursor
                 selectedPiece = null //de-select the piece since we just placed it
           }
      )};
   }
}

Очевидно, это всего лишь эскиз, но он должен дать вам идею!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...