Добро пожаловать в StackOverFlow.
Обычно мы просим вас предоставить код, который поможет нам в решении вашей проблемы, но я постараюсь дать вам несколько указателей без.
Вам нужно вести историю прошлых ходов, в этом случае это будет история местоположений ячеек, где королева начала туда, где она закончила.
Я подозреваю, что вы должны использовать событие OnClick или что-то похожее, чтобы определить, какая королева выбрана и куда она перемещена - если нет, то logi c все равно будет таким же.
Вы хотите использовать методы GetRow и GetColumn элемента управления TableLayoutPanel и сохранить результат в элементе управления List, например
public class Move
{
int startRow;
int startColumn;
int endRow;
int endColumn;
}
, затем в вашем коде есть свойства
public List<Move> ListOfMoves = new List<Move>();
public SelectedMoveIndex {get;set;}
Каждый раз, когда выполняется новый ход, добавляйте новый экземпляр Move с заполненными значениями в список
например,
ListOfMoves.Add(new Move(){startRow = x1, startColumn=y1, endRow=x2, endColumn=y2};
SelectedMoveIndex = ListOfMoves.Count -1;
, где x1, y1, x2, y2 имеют значения, взятые из GetRow()
& GetColumn()
при начале и конце хода.
Отмена переместить использовать значение Move
хранятся в SelectedMoveIndex
и воспроизводятся в обратном направлении, например, endRow
и endColumn
становятся начальными значениями, а затем уменьшаются до значения SelectedMoveIndex
. Redo будет использовать значения, хранящиеся в SelectedMoveIndex
, а затем увеличивать SelectedMoveIndex
.
Если вы делаете новый ход, который не сохраняется, вам нужно будет удалить элементы после SelectedMoveIndex
перед добавлением новый.