你好,我想做一个象棋游戏,到目前为止,我已经创建了我的棋子,我可以用鼠标移动它们。
现在我尝试用一个包含棋子的二维数组制作棋盘,这样当我在棋盘上拖动棋子时,它会将棋子添加到数组中,例如在图像上
我将作品拖到(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]}
您可以在板中的JLabels上使用mouseListener!首先,使用8*8构建您的板(国际象棋是8*8,对吧?)JLabels,将它们存储在某个数组中。
JLabel[][] boardFields = new JLabel[8][8];
您可以将这些打包在具有GridBagLayout
的JPanel中。您可以使用GridBagContraint
class'vgridx
和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
}
)};
}
}
这显然只是一个草图,但它应该给你一个想法!