如何在c#中为棋盘游戏创建撤销功能?

如何在c#中为棋盘游戏创建撤销功能?,c#,C#,我发现我用c#forms开发的游戏很难实现撤销功能。我想在游戏屏幕上有一个按钮,当点击时,它会反转玩家刚才的移动 有人知道我该怎么做吗?有人告诉我,堆栈是实现这一点的最佳方式,但我不确定如何实现它 您可以将游戏事件包装为具有方法Do()和Undo()的操作 让我们以绘画程序为例。用户在给定坐标上绘制线,将LineDrawnEvent与所有相关数据放在堆栈上,并调用Do()方法,该方法实际上在画布上绘制一条线。当用户单击“撤消”按钮时,从堆栈中弹出项并调用undo()方法,该方法在LineDraw

我发现我用c#forms开发的游戏很难实现撤销功能。我想在游戏屏幕上有一个按钮,当点击时,它会反转玩家刚才的移动


有人知道我该怎么做吗?有人告诉我,堆栈是实现这一点的最佳方式,但我不确定如何实现它

您可以将游戏事件包装为具有方法
Do()
Undo()
的操作

让我们以绘画程序为例。用户在给定坐标上绘制线,将
LineDrawnEvent
与所有相关数据放在堆栈上,并调用
Do()
方法,该方法实际上在画布上绘制一条线。当用户单击“撤消”按钮时,从堆栈中弹出项并调用
undo()
方法,该方法在
LineDrawnEvent
中应删除用户绘制的线

您还可以使用类似于
IProgramAction
Do()
Undo()
方法的接口,这样您就可以在同一堆栈中拥有不同的事件,例如
CircleDrawnEvent
RectangularDrawnEvent

代码中的堆栈将类似于

public Stack<IProgramAction> ProgramStack { get; set; }
公共堆栈程序堆栈{get;set;}
Google
C 35;
stack
如何,并获得类似的参考。使用通用的。