我正在创建一个简单的游戏(暂时)允许您通过鼠标点击在当前位置的每个方向上移动一个点1步。但是这只适用于电路板是方形的(您可以选择电路板的尺寸)。 该板由具有图像和2D阵列的按钮表示,以跟踪“1”是点的位置的位置,“0”是自由空间。 actionlistener中的Pos1和Pos2打印出单击按钮的位置。 所以,当游戏板是一个正方形时,这很有用,但是当我将棋盘改成矩形时,我得到的pos1和pos2值不正确,我用来移动这个点。
//creates the array and sets dot start position.
for(int i=0;i<xAxis;i++)
{
for(int j=0;j<yAxis;j++)
{
board[i][j]=0;
}
}
board[(xAxis/2)][(yAxis/2)]=1;
,
//Creates buttons and adds actionslistener and images to the buttons.
for(int i=0;i<xAxis;i++)
{
for(int j=0;j<yAxis;j++)
{
buttons[i][j] = new JButton();
buttons[i][j].setIcon(circleIMG);
buttons[i][j].setBorderPainted(false);
buttons[i][j].addActionListener(GBC);
buttons[i][j].setPreferredSize(new Dimension(52,52));
buttons[i][j].setRolloverIcon(circleDotIMG);
buttons[i][j].setRolloverEnabled(true);
GameBoardPanel.add(buttons[i][j]);
}
}
buttons[(xAxis/2)][(yAxis/2)].setIcon(circleDotIMG);
//implements the actionlistener
public class GridButtonClick implements ActionListener
{
//int xControl=0;
int pos1=0;
int pos2=0;
boolean Move = false;
public void actionPerformed(ActionEvent e)
{
int posx=FindXpos(board);
int posy=FindYpos(board);
for(int i=0;i<xAxis;i++)
{
for(int j=0;j<yAxis;j++)
{
if(buttons[i][j] == e.getSource())
{
pos1=i;
pos2=j;
//System.out.println("posx: "+posx);
//System.out.println("posy: "+posy);
System.out.println("pos1: "+pos1);
System.out.println("pos2: "+pos2);
System.out.println("\n");
if((pos1 == posx+1 && pos2 == posy+1) || (pos1 == posx-1 && pos2 == posy-1))
Move=true;
if((pos1 == posx+1 && pos2 == posy-1) || (pos1 == posx-1 && pos2 == posy+1))
Move=true;
if((pos1 == posx+1 && pos2 == posy) || (pos1 == posx-1 && pos2 == posy))
Move=true;
if((pos2 == posy+1 && pos1 == posx) || (pos2 == posy-1 && pos1 == posx))
Move=true;
if(Move)
{
if(yAxis>xAxis)
buttons[(xAxis/2)][(yAxis/2)-1].setIcon(circleIMG);
else if((xAxis>yAxis) || (xAxis==yAxis))
buttons[(xAxis/2)][(yAxis/2)].setIcon(circleIMG);
RemovePreviousMark(board);
board[i][j] = 1;
buttons[i][j].setIcon(circleDotIMG);
System.out.println("Button press: "+"["+i+"]"+"["+j+"]");
//System.out.println("x: "+i+" "+"y "+j);
Move=false;
}
}
}
}
}
}
答案 0 :(得分:1)
这看起来很复杂。
我不确定列出的代码是否已经存在,但如果不是,则应记住currX和currY字段中的当前位置。然后移动您需要做的就是将当前位置删空,适当更改变量,然后设置新位置。
使您的按钮对象成为您自己的按钮子类,并在按钮内存储x,y坐标。然后,您可以立即知道按钮单击的坐标,而无需扫描阵列。