-1

我正在开发像跳棋这样的棋盘游戏。棋盘上的每一块瓷砖都有一定的属性。在更改棋盘状态之前,我想保存它的状态并用它来撤消最后一步。随着状态的变化,所有对象都被破坏并创建新对象。有没有办法保留这些指针以及调用析构函数?

4

4 回答 4

3

这是一个设计问题,而不是指针/实现问题。一种考虑撤消/重做的方法是两个堆栈,每个任务一个

每当您进行移动时,您将配置/游戏状态、对象等作为一个元素向下推入撤消堆栈,当您按下撤消时,您弹出该堆栈的一个元素,将其应用于您的游戏并将该元素推送到重做堆栈。完成新的移动时清除重做堆栈

在调用其析构函数、指针或无指针后,您不能使用对象。您可以在将对象推入堆栈之前将其作为一个整体复制,也可以使用指向它的指针,无论适合您

您可能对使用共享指针感兴趣,因为它们为您提供了更多可能性

Another approach other than saving the whole game state if you want to effectively use memory, is to just save the changes in the game instead of a snapshot of the whole game, but this usually requires more work, though its the clever approach

于 2012-11-07T12:54:43.310 回答
1

您不想以这种方式保留指针。如果您在这些指针被删除后尝试通过这些指针访问数据,您将遇到访问冲突。一旦它们被删除,它们指向的内存就不应通过这些指针访问。

如果您复制这些指针,它们也将具有相同的地址,因此通过您复制的副本访问该内存将导致同样的事情发生。您需要考虑不同的方法

于 2012-11-07T12:51:22.580 回答
0

您可以采用两种方法来保留游戏状态:

  • 将构成游戏状态的每个对象序列化到内存或存储中,从而有效地保存状态并能够返回到它。
  • 只保留从一种游戏状态到另一种游戏状态的变化。

我不认为使用指针是您设计的核心。没有必要保留旧的指针,而且,据我所知,根本不需要指针。您要么保存对象本身的旧状态,要么保存一系列更改。在这种情况下,我会选择后者。

于 2012-11-07T12:53:13.797 回答
0

Why don't you use a Link to UNDO list in same tile object ... as a linked list or so, and when user undo the state you manipulate the data in this list and the data in title

于 2012-11-07T13:11:07.890 回答