Esempio n. 1
0
 public void ToPoints(TurtleSituation situation)
 {
     Points = new PointCollection
     {
         new Point(situation.Position.X + 10, situation.Position.Y),
         new Point(situation.Position.X, situation.Position.Y + 20),
         new Point(situation.Position.X - 10, situation.Position.Y)
     };
 }
Esempio n. 2
0
        public override TurtleSituation CalculateSituation(TurtleSituation currentSituation)
        {
            var result = (TurtleSituation)currentSituation.Clone();

            result.Position = new Position {
                X = X, Y = Y
            };
            result.Change = TurtleSituationChange.Positioned;
            return(result);
        }
Esempio n. 3
0
        private void DoTurtle(TurtleSituation newSituation)
        {
            var rotateTransform = new RotateTransform(newSituation.TurnAngle)
            {
                CenterX = newSituation.Position.X,
                CenterY = newSituation.Position.Y
            };

            turtleShape.ToTurtle(newSituation);
            turtleShape.RenderTransform = rotateTransform;
            drawingInstructions.Remove(turtleShape);
            drawingInstructions.Add(turtleShape);
        }
Esempio n. 4
0
        public static Polygon ToTurtle(this Polygon turtle, TurtleSituation situation)
        {
            var brush = new SolidColorBrush(Colors.Blue);

            turtle.Points = new PointCollection
            {
                new Point(situation.Position.X + 10, situation.Position.Y),
                new Point(situation.Position.X, situation.Position.Y + 20),
                new Point(situation.Position.X - 10, situation.Position.Y)
            };
            turtle.Stroke          = brush;
            turtle.StrokeThickness = 3;
            return(turtle);
        }
Esempio n. 5
0
        public void CanCreateTwoSentenceLogoProgram()
        {
            ICollection <BaseLogoCommand> programCommands = LogoController.CreateAndParse("FORWARD 100 LEFT 90");
            var firstCommand = programCommands.ElementAt(0) as LogoMoveCommand;

            Assert.IsNotNull(firstCommand);
            Assert.AreEqual(100, firstCommand.Distance);
            TurtleSituation forwardSituation = firstCommand.CalculateSituation(TurtleSituation.DefaultSituation);

            Assert.AreEqual(TurtleSituation.DefaultSituation.Angle, forwardSituation.Angle);
            var secondCommand = programCommands.ElementAt(1) as LogoTurnCommand;

            Assert.IsNotNull(secondCommand);
            Assert.AreEqual(90, secondCommand.TurnAngle);
            TurtleSituation leftSituation = secondCommand.CalculateSituation(forwardSituation);

            Assert.AreEqual(TurtleSituation.DefaultSituation.Angle + 90, leftSituation.Angle);
        }
Esempio n. 6
0
        public void Handle(ILogoCommandEvent e)
        {
            TurtleSituation currentSituation = LogoController.CurrentSituation;
            TurtleSituation newSituation     = e.LogoCommand.CalculateSituation(currentSituation);

            switch (newSituation.Change)
            {
            case TurtleSituationChange.Moved:
                var line = new DrawingInstruction
                {
                    X1         = currentSituation.Position.X,
                    Y1         = currentSituation.Position.Y,
                    X2         = newSituation.Position.X,
                    Y2         = newSituation.Position.Y,
                    TimeOffset = currentTime
                };
                DrawingInstructions.Add(line);
                break;

            case TurtleSituationChange.Cleared:
                newSituation = TurtleSituation.DefaultSituation;
                List <BaseInstruction> itemsToRemove = DrawingInstructions.Where(i => i is DrawingInstruction).ToList();
                foreach (BaseInstruction itemToRemove in itemsToRemove)
                {
                    DrawingInstructions.Remove(itemToRemove);
                }
                break;

            case TurtleSituationChange.Positioned:
            case TurtleSituationChange.Turned:
            case TurtleSituationChange.None:
                // Do nothing
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            DoTurtle(currentSituation, newSituation);

            currentTime = currentTime.Add(TimeSpan.FromMilliseconds(TURTLE_SPEED_IN_MS));

            LogoController.CurrentSituation = newSituation;
        }
Esempio n. 7
0
 private void DoTurtle(TurtleSituation currentSituation, TurtleSituation newSituation)
 {
     turtleInstruction.CenterX    = newSituation.Position.X;
     turtleInstruction.CenterY    = newSituation.Position.Y;
     turtleInstruction.TurnAngle  = newSituation.TurnAngle;
     turtleInstruction.TimeOffset = currentTime;
     turtleInstruction.ToPoints(newSituation);
     turtleInstruction.Movement =
         new PathGeometry(
             new PathFigureCollection
     {
         new PathFigure(new Point(currentSituation.Position.X, currentSituation.Position.Y),
                        new List <PathSegment>
         {
             new LineSegment(
                 new Point(newSituation.Position.X, newSituation.Position.Y), false)
         }, false)
     });
 }
Esempio n. 8
0
        public void Handle(ILogoCommandEvent e)
        {
            TurtleSituation currentSituation = LogoController.CurrentSituation;
            TurtleSituation newSituation     = e.LogoCommand.CalculateSituation(currentSituation);

            switch (newSituation.Change)
            {
            case TurtleSituationChange.Moved:
                var brush = new SolidColorBrush(Colors.Black);
                DrawingInstructions.Add(new Line
                {
                    X1              = currentSituation.Position.X,
                    Y1              = currentSituation.Position.Y,
                    X2              = newSituation.Position.X,
                    Y2              = newSituation.Position.Y,
                    Stroke          = brush,
                    StrokeThickness = 3
                });
                break;

            case TurtleSituationChange.Cleared:
                DrawingInstructions.Clear();
                break;

            case TurtleSituationChange.Positioned:
            case TurtleSituationChange.None:
            case TurtleSituationChange.Turned:
                // Do nothing
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            DoTurtle(newSituation);
            LogoController.CurrentSituation = newSituation;
        }
Esempio n. 9
0
 public TurtleInstruction(TurtleSituation currentSituation)
 {
     ToPoints(currentSituation);
 }
Esempio n. 10
0
 public override TurtleSituation CalculateSituation(TurtleSituation currentSituation)
 {
     TurtleSituation.DefaultTurtleSituation result = TurtleSituation.DefaultSituation;
     result.Change = TurtleSituationChange.Cleared;
     return(result);
 }