Пример #1
0
        public void DeployTo(IPlanet planet, int landingPointX, int landingPointY, Movement.CardinalHeading landingCardinalHeading)
        {
            this.DeployedTo = planet;

            if (landingPointX < 0 ||
                landingPointY < 0 ||
                landingPointX > planet.Size.Width ||
                landingPointY > planet.Size.Height)
            {
                throw new ArgumentException("Rover cannot be deployed to a point outside the bounds of a planet.");
            }
            this.Position = new Position(landingPointX, landingPointY, landingCardinalHeading);
        }
Пример #2
0
        private void Move(Movement.Direction direction)
        {
            int gridPoints = direction == Movement.Direction.Forwards ? 1 : -1;

            switch (this.Position.CardinalHeading)
            {
                case Movement.CardinalHeading.North:
                    this.Position.Point = new Point(this.Position.Point.X, this.Position.Point.Y + gridPoints);
                    break;
                case Movement.CardinalHeading.East:
                    this.Position.Point = new Point(this.Position.Point.X + gridPoints, this.Position.Point.Y);
                    break;
                case Movement.CardinalHeading.South:
                    this.Position.Point = new Point(this.Position.Point.X, this.Position.Point.Y - gridPoints);
                    break;
                case Movement.CardinalHeading.West:
                    this.Position.Point = new Point(this.Position.Point.X - gridPoints, this.Position.Point.Y);
                    break;
            }

            // Bounds wrapping
            if (this.Position.Point.X > this.DeployedTo.Size.Width)
            {
                this.Position.Point = new Point(0, this.Position.Point.Y);
            }
            else if (this.Position.Point.X < 0)
            {
                this.Position.Point = new Point(this.DeployedTo.Size.Width, this.Position.Point.Y);
            }
            else if (this.Position.Point.Y > this.DeployedTo.Size.Height)
            {
                this.Position.Point = new Point(this.Position.Point.X, 0);
            }
            else if (this.Position.Point.Y < 0)
            {
                this.Position.Point = new Point(this.Position.Point.X, this.DeployedTo.Size.Height);
            }

            // Detect collision
            if (this.DeployedTo.HasObstacleAtPosition(this.Position))
            {
                throw new DetectedObstacleException();
            }
        }
Пример #3
0
 public Position(int x, int y, Movement.CardinalHeading cardinalHeading)
 {
     this.Point = new Point(x, y);
     this.CardinalHeading = cardinalHeading;
 }
Пример #4
0
 private void Turn(Movement.TurningDirection turn)
 {
     switch (turn)
     {
         case Movement.TurningDirection.Right:
             if (this.Position.CardinalHeading == Movement.CardinalHeading.West)
             {
                 // Bounds wrapping
                 this.Position.CardinalHeading = Movement.CardinalHeading.North;
             }
             else
             {
                 this.Position.CardinalHeading += 1;
             }
             break;
         case Movement.TurningDirection.Left:
             if (this.Position.CardinalHeading == Movement.CardinalHeading.North)
             {
                 // Bounds wrapping
                 this.Position.CardinalHeading = Movement.CardinalHeading.West;
             }
             else
             {
                 this.Position.CardinalHeading -= 1;
             }
             break;
     }
 }