Java初学者,谁会欣赏有关如何最好地处理我正在孤立地处理的问题的反馈......
尝试构建基本游戏,玩家在网格/棋盘上移动。有上/下/左/右方法(例如public void playerMovesUp()等),并且需要实现撤消/重做移动功能,因此玩家可以回溯x个步骤,然后在游戏过程中随时重新获得x数字。
一直在研究如何做到这一点,即记录上/下/左/右方法调用的顺序,然后以相反的顺序(撤消)再重新调用,然后重做。
堆栈或队列集合看似合乎逻辑......我还查看了存储函数调用顺序的java堆栈内存,并刚刚阅读了java.lang.Thread.getStackTrace()。
当前的想法.....如果我将这四个方法分离为一个线程,那么我可以使用java.lang.Thread.getStackTrace()返回一个数组,并调用getMethodName(),然后以某种方式调用适用的方法为了?
此外,是否可以存储方法调用的队列/堆栈?
我觉得我走在正确的道路上,但最后的建议似乎有些混乱/不合逻辑!任何指针/建议都将不胜感激。
答案 0 :(得分:2)
不要像这样使用堆栈。这不是什么,如果为。 只需保留一个步骤列表,然后使用该列表回溯您的步骤。
答案 1 :(得分:1)
我认为你不能使用Stack。您必须自己跟踪方法调用。不,你不能将“方法调用”存储到集合中。
相反,为您的操作设计类会更容易,其中每个类实现pyenv
和do
。然后,可以将这些类的实例存储在undo
或Stack
中。如果用户想要撤消其操作,您可以向后处理它并在所有元素上调用undo。这种模式称为命令模式(参见eg.g. Design Pattern for Undo Engine)