我正在Swing中构建一个基于Java的游戏,它实质上是Jbuttons的网格
我有一个称为Cell的对象,它是一个自定义JButton,带有用于存储对象的其他参数。游戏网格由Cell[][]
表示
我有一个Cell[][]
类型的arraylist,允许我在每次移动后存储gamegrid的状态。如果要撤消移动,则需要将ArrayList的最后一个元素复制到游戏网格中,以使其可以在UI上显示。
我的游戏网格为panelHolder
,而数组列表为moveHolder
。
到目前为止,我已经尝试了Collections.copy(panelHolder, moveHolder.get(moveHolder.size()));
,由于“参数不适用于Cell[][]
类型”,因此无法编译
我还尝试了System.arraycopy(moveHolder.get(moveHolder.size()-1), 0, panelHolder, 0, panelHolder.length);
,它抛出了异常。最初,我认为这是由于moveHolder.size()-1
引起的,但是即使像moveHolder.size()
一样,它也存在相同的问题。
我在StackOverflow上发现了许多问题,其他问题都显示了这两种方法,但是我似乎无法使其正常工作。还有什么更明显的我想念的吗?完整的类方法如下:
public class UndoClass implements MoveCommand{
public ArrayList<Cell[][]> moveHolder = new ArrayList<Cell[][]>();
public Cell[][] execute(Cell[][] panelHolder) {
if (moveHolder.size() > 0){
Collections.copy(panelHolder, moveHolder.get(moveHolder.size()));
if (moveHolder.size() > 0){
moveHolder.remove(moveHolder.size());
}
}
System.out.println("Move Undone. Undos available:" + moveHolder.size());
return panelHolder;
}
public void addMove(Cell[][] panelHolder){
moveHolder.add(panelHolder);
}
public ArrayList<Cell[][]> getMoves(){
return moveHolder;
}
}
单元类别
public class Cell extends JButton {
int co_x = 0;
int co_y = 0;
ArrayList<Players> current = new ArrayList <Players>();
}
最佳答案
if (moveHolder.size() > 0) {
for (int i = 0; i < panelHolder.length; i++) {
panelHolder[i] = moveHolder.get(moveHolder.size()-1)[i].clone();
}
moveHolder.remove(moveHolder.size()-1);
}
试试这个。复制2D阵列时,需要制作每个内部阵列的副本。