class Puzzle
{
public int PUZZLESIZE = 3;
public int numSteps = 0;
public Button[,] buttons;
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 } };
}
public Puzzle Clone()
{
return (Puzzle)this.MemberwiseClone();
}
public void reset()
{
//reset all 9 buttons color
}
public void flipcells()
{
//flip cells in the puzzle with color change
}
class Undo
{
Puzzle newPuzzle; //null value here. Why???
public Undo(Puzzle oldPuzzle)
{
Puzzle newPuzzle = oldPuzzle.Clone();
}
public void undo()
{
//back to previous step, ie the color of the buttons go back to previous color
}我要求在最多四次的情况下返回到前几个阶段的撤销功能。“要做到这一点,最简单的方法是创建一个拼图的副本,并将其存储在一个Puzzy数组中。为此,我实现了一个Clone方法。这将返回一个全新的拼图集,其设置与我调用Clone on的拼图完全相同。”这是我们的讲师所说的,但我仍然不知道如何实现它。
发布于 2011-10-27 10:15:40
实现“撤销”功能的最简单方法可能是使用堆栈。对于您对拼图采取的每个操作,将一个实例推送到堆栈上。当用户选择撤消移动时,将实例从堆栈中弹出。
有关堆栈的详细信息,请参见this article on Wikipedia;有关.NET堆栈泛型类的信息,请参阅this MSDN article。
发布于 2011-10-27 14:02:31
下面是一个如何实现DBM提到的堆栈的小示例。与其克隆整个Puzzy类,我建议只克隆按钮数组(这应该足以满足您的撤消功能):
编辑:如果你需要跟踪按钮的颜色,而不是按钮的位置,你可能只需要把按钮的当前颜色数组放在堆栈上。
Stack<Button[,]> stack = new Stack<Button[,]>();
private void button4_Click(object sender, EventArgs e)
{
Button[,] buttons = new Button[2, 2] { { button1, button2 }, { button3, button4 } };
stack.Push((Button[,])buttons.Clone());
buttons[0, 0] = button2;
buttons[0, 1] = button1;
stack.Push((Button[,])buttons.Clone());
buttons[1, 0] = button4;
buttons[1, 1] = button3;
stack.Push((Button[,])buttons.Clone());
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (stack.Count > 0)
{
Button[,] buttons = stack.Pop();
txtButtonOrder.Text = buttons[0, 0].Text + buttons[0, 1].Text + buttons[1, 0].Text + buttons[1, 1].Text;
}
else
{
timer1.Enabled = false;
}
}发布于 2011-10-27 10:19:32
当你在一个方法中声明一个变量时,它将隐藏类中所有同名的变量。您应该只引用变量,而不是重新声明变量:
int myVariable = 0; // Will always be 0
public void SetMyVariable()
{
int myVariable = 5; // Isn't the same as above
}如果你想明确一点,你可以添加'this.‘’。在变量名前面始终引用类变量:
this.myVariable = 5;https://stackoverflow.com/questions/7910983
复制相似问题