我正在使用Swing构建一个基于Java的游戏,它本质上是一个JButton的网格。
我有一个名为Cell的对象,它是一个自定义的JButton,具有用于存储对象的附加参数。游戏网格由Cell[][]
表示。
我有一个类型为Cell[][]
的数组列表,以便在每次移动后存储游戏网格的状态。如果我想撤消移动,则需要将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>();
}
Cell
类。 - jmo