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) }; }
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); }
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); }
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); }
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); }
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; }
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) }); }
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; }
public TurtleInstruction(TurtleSituation currentSituation) { ToPoints(currentSituation); }
public override TurtleSituation CalculateSituation(TurtleSituation currentSituation) { TurtleSituation.DefaultTurtleSituation result = TurtleSituation.DefaultSituation; result.Change = TurtleSituationChange.Cleared; return(result); }