static void Main(string[] args) { var robot = new Robot(); var caretaker = new Caretaker(); var command = ""; Console.WriteLine("Robot (X = {0}, Y = {1})", robot.X, robot.Y); while (command != "q") { Console.Write("Enter command (up|down|left|right|undo): "); command = Console.ReadLine().Trim(); switch (command) { case "up": // go up caretaker.AddMemento(robot.CreateMemento()); robot.Y++; break; case "down": // go down caretaker.AddMemento(robot.CreateMemento()); robot.Y--; break; case "left": // go left caretaker.AddMemento(robot.CreateMemento()); robot.X--; break; case "right": // go right caretaker.AddMemento(robot.CreateMemento()); robot.X++; break; case "undo": robot.SetMemento(caretaker.GetLastMemento()); break; } Console.WriteLine("X = {0}, Y = {1}", robot.X, robot.Y); } }