提问者:小点点

GUI-国际象棋游戏拖动棋子并放入棋盘“2D数组”


你好,我想做一个象棋游戏,到目前为止,我已经创建了我的棋子,我可以用鼠标移动它们。

现在我尝试用一个包含棋子的二维数组制作棋盘,这样当我在棋盘上拖动棋子时,它会将棋子添加到数组中,例如在图像上

我将作品拖到(2,3)board[2][3]=pawn

但是我不知道如何实现它,我想过使用坐标,比如当我把它拖到中间时,假设我有一个800x800的框架大小和8的板大小,所以当我把我的作品拖到坐标(400,400)board[4][4]=pawn,但是我必须为每个单元格做这件事,如果条件是64,我最终会得到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个答案

匿名用户

您可以在板中的JLabels上使用mouseListener!首先,使用8*8构建您的板(国际象棋是8*8,对吧?)JLabels,将它们存储在某个数组中。

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

您可以将这些打包在具有GridBagLayout的JPanel中。您可以使用GridBagContraintclass'vgridxgridy变量很容易地将它们布局在所需的模式中。

现在你要做的是在某个地方创建一个静态变量,让我们将其称为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
           }
      )};
   }
}

这显然只是一个草图,但它应该给你一个想法!