public StepPossibility GetStepPossibilities(FigureColor color) { for (int yfrom = 0; yfrom < 8; yfrom++) { for (int xfrom = 0; xfrom < 8; xfrom++) { for (int yto = 0; yto < 8; yto++) { for (int xto = 0; xto < 8; xto++) { StepMemento memento = StepWithMemento(xfrom, yfrom, xto, yto, color); if (memento != null) { if (!IsKingChecked(color)) { RestoreMemento(memento); return(StepPossibility.Continue); } RestoreMemento(memento); } } } } } if (IsKingChecked(color)) { return(StepPossibility.CheckMate); } return(StepPossibility.StaleMate); }
public bool StepWithoutCheck(int xFrom, int yFrom, int xTo, int yTo, FigureColor color) { StepMemento memento = StepWithMemento(xFrom, yFrom, xTo, yTo, color); if (memento != null && !IsKingChecked(color)) { return(true); } if (memento != null) { RestoreMemento(memento); } return(false); }
public void RestoreMemento(StepMemento memento) { Figures[memento.FromX, memento.FromY] = Figures[memento.ToX, memento.ToY]; Figures[memento.ToX, memento.ToY] = memento.OldAtTo; }