public MoveOutCome MoveNext(Position newPosition) { MoveOutCome moveOutCome = MoveOutCome.MoveSucessful; if (newPosition.Equals(_currentPosition)) { return(MoveOutCome.NoChange); } if (!CheckNewPostionWithInBoundry(newPosition)) { return(MoveOutCome.OutOfBuondsMove); } if (!ValidateNextMove(newPosition)) { return(MoveOutCome.IllegalMoveFromCurrentPosition); } if (HasHitMine(newPosition)) { moveOutCome = MoveOutCome.HitMine; } if (HasHitExit(newPosition)) { moveOutCome = MoveOutCome.HitExit; } DoMove(newPosition); return(moveOutCome); }
private void ExecuteMoves(Position lastPosition) { int count = 1; foreach (Position movePosition in _iConfiguration.Moves) { MoveOutCome moveOutCome = _turtleMoveChange.MoveNext(movePosition); switch (moveOutCome) { case MoveOutCome.IllegalMoveFromCurrentPosition: _ilogger.InvalidNextMove("Illegal move from position " + lastPosition.ToString() + " to position " + movePosition); _ilogger.Info("Game over"); return; case MoveOutCome.OutOfBuondsMove: _ilogger.NewPostionWithInBoundry("Position " + movePosition.ToString() + " is out of bounds."); _ilogger.Info("Game over"); return; case MoveOutCome.HitExit: if (count == _iConfiguration.Moves.Count) { _ilogger.HasHitExit("Exit position hit at " + movePosition.ToString()); _ilogger.Info("Game over"); } else { _ilogger.HasHitExitButMoveLeft("Exit position hit at " + movePosition.ToString() + " but there are still moves left"); _ilogger.Info("Game over"); } return; case MoveOutCome.HitMine: _ilogger.HasHitMine("Mines Hit at position " + movePosition.ToString()); _ilogger.Info("Game over"); return; case MoveOutCome.MoveSucessful: _ilogger.Info("Move to position " + lastPosition.ToString() + " to " + movePosition.ToString() + " was sucessful"); break; } lastPosition = movePosition; count++; } }