gpt4 book ai didi

c# - 如何实现撤销功能

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:35 26 4
gpt4 key购买 nike

我正在编写一个名为 Flipper 的程序,它有 3x3 个单元格用于拼图。每个单元格(按钮)最初都是绿色的。当单击某个单元格时,该单元格及其相邻单元格翻转(改变颜色)。另一个需求是撤销功能,即回到上一阶段。我不知道如何实现这个。这些是游戏中发生的主要事情。

public Puzzle(Form1 form1)
{
buttons = new Button[3, 3] { { form1.button1, form1.button2, form1.button3 },
{ form1.button4, form1.button5, form1.button6 },
{ form1.button7, form1.button8, form1.button9 } };
//button reference from form1
}
public void reset()
{
//reset all the colors of buttons in the puzzle to lime
}

public void FlipCells(int row, int col)
{
//when certain button is clicked(this event is done in the form1.cs), say for (0,0) change color of cell (0,0),///(0,1) and (1,0) by calling changeColor method
}

public void changeColor(int row, int col)
{
//test current color of the cell, and change it
}

我要求在名为 Undo 的类中实现撤消功能。任何想法表示赞赏!!!

最佳答案

通过了解上次操作更改的内容,可以实现单个撤消。

事实证明,撤消翻转可以通过...再次翻转来完成。所以只要记住你的最后一步,然后重复它!

如果您记得步,您可以在游戏的初始状态下多次执行此操作。为此,您可以创建一堆 Action ,移动时插入,撤消时弹出。

更一般地说,要撤消,您需要做三件事:

  1. 对于用户可以执行的每个操作,执行一个将撤消该操作的反向操作。
  2. 每次用户执行操作时,记住它,以便您知道要采取哪个反向操作(如果需要)。
  3. 当用户表示他想要撤销时,将他做的最后一件事与其相反的 Action 相匹配,并执行它。

有时,创建一个反向 Action 非常困难。在这些情况下,在执行操作之前只存储程序状态,然后在用户想要撤消时重新加载它会变得更容易。

关于c# - 如何实现撤销功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7911915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com