【发布时间】:2015-07-07 15:58:03
【问题描述】:
我正在 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课程,以便我们更容易尝试解决方案? -
由于 panelHolder 和 moveHolder.get(n) 是数组, System.arraycopy 是要走的路。转储两个数组的长度以检查它们是否是您认为的。
-
@ChetanKinger 编辑添加
Cellclass -
这不能回答你的问题,但我个人建议在这里使用 LinkedList 而不是 ArrayList。
-
我认为您的问题在于这是一个数组数组。这个答案有帮助吗? stackoverflow.com/q/1564832