我有这个forloop,用2d数组创建网格布局中的按钮
public Board(){
gameBoard = new JPanel(new GridLayout(8,8));
array = new JButton[8][8];
int limit = 8;
for(int i = 0; i< limit; i++){
for(int t = 0; t< limit; t++){
JButton button = new JButton("");
gameBoard.add(button);
array[i][t] = button;
array[i][t].addActionListener(e -> newMethod(e));
}
}
我也有这种方法,理想情况下应该循环按钮,当它点击并根据条件更改周围的按钮,但我不知道如何循环点击特定按钮。有关如何执行此操作的任何提示
public void newMethod(ActionEvent e){
JButton b = (JButton) e.getSource();
gameLogic(b);
BPlayer = !BPlayer;
System.out.println(BPlayer);
System.out.println(b);
}
public void gameLogic(JButton b){
int limit = 8;
// Black Players Turn
if(BPlayer && b.getText().equals("") ){
b.setText("B");
for(int i = 0; i< limit; i++){
for(int t = 0; t< limit; t++){
if(array[i][t].getText().equals("W")){
b.setText("B");
}
else if(array[i][t].getText().equals("B")){
//do nothing
}
else if(array[i][t].getText().equals("")){
// do nothing like everything else
}
}
}
}
答案 0 :(得分:0)
要循环按钮,您需要能够确定游戏板上按钮的位置。一种方法是将按钮的坐标存储在按钮中:
private final static String POS_KEY = "btnPosKey";
Board() {
...
button.putClientProperty(POS_KEY, new int[]{i, t});
...
}
然后,您的游戏逻辑可以检索从按钮本身单击的按钮的坐标:
void gameLogic(JButton b) {
int[] pos = (int[]) b.getClientProperty(POS_KEY);
int i = pos[0], t = pos[1];
在按钮周围循环就像在小的3x3方格上迭代一样简单,以(i,t)坐标为中心。
for(int di = i - 1; di <= i + 1; di++) {
for (int dt = t - 1; dt <= t + 1; dt++) {
但是你不想超越游戏网格的界限......
if ( di >= 0 && di < limit && dt >= 0 && dt < limit ) {
或者可能包含中心按钮......
if (di != i || dt != t) {
array[di][dt].setText("B");
}
}
}
}
当然,还有其他方法可以确定按钮的坐标,而不是使用putClientProperty()
存储它:
JButton
派生您自己的班级,并将坐标存储为字段。i
和t
作为e -> newMethod(e, fi, ft)
lambda的fi
和ft
坐标,作为final
的{{1}}副本1}}和i
变量。t
按钮中搜索按钮以确定坐标。使用最方便的方法。