示例#1
0
 public StateChangedEventArgs(Core.State oldState,
                              Core.Move move,
                              Core.State newState,
                              bool isUndo = false)
 {
     OldState = oldState;
     Move     = move;
     NewState = newState;
     IsUndo   = isUndo;
 }
示例#2
0
        public void ApplyMove(Core.Move move)
        {
            var oldState = CurrentState;
            var newState = oldState.ApplyMove(move);

            redoStack.Clear();
            redoMoves.Clear();
            if (undoStack.Count == maxUndoStackSize)
            {
                undoStack.RemoveFirst();
            }
            undoStack.AddLast(oldState);
            moves.AddLast(move);

            CurrentState = newState;
            OnStateChanged(oldState, move, newState);
        }
示例#3
0
 private void OnStateChanged(Core.State oldState,
                             Core.Move move,
                             Core.State newState,
                             bool isUndo = false)
 {
     if (StateChanged != null)
     {
         StateChanged(this, new StateChangedEventArgs(
                          oldState, move, newState, isUndo));
     }
     NotifyPropertyChanged("MoveCount");
     if (oldState != null && newState != null && PuzzleSolved != null)
     {
         if (!oldState.IsWinning && newState.IsWinning)
         {
             PuzzleSolved(this, new EventArgs());
         }
     }
 }
示例#4
0
 public bool ValidateMove(Core.Move move)
 {
     return(CurrentState.ValidateMove(move));
 }