示例#1
0
        public void DirectRover(int roverId, RoverOperationType operationType)
        {
            Rover rover;

            if (!Rovers.TryGetValue(roverId, out rover))
            {
                throw new InvalidOperationException("Rover does not exist");
            }

            if (operationType == RoverOperationType.RotateLeft || operationType == RoverOperationType.RotateRight)
            {
                rover.Heading = GetNewHeading(rover.Heading, operationType);
            }
            else if (operationType == RoverOperationType.Move)
            {
                var newPosition = Vector.Add(rover.Position, rover.Heading);
                if (newPosition.X < 0 || newPosition.X > PlateauLength || newPosition.Z < 0 || newPosition.Z > PlateauWidth)
                {
                    throw new InvalidOperationException("Rover has driven off the plateau");
                }

                foreach (var roverEntry in Rovers.Values)
                {
                    if (Vector.AreEqual(roverEntry.Position, newPosition))
                    {
                        throw new InvalidOperationException("Collision! Curiousity got the best of this Martian rover");
                    }
                }

                rover.Position = newPosition;
            }
        }
示例#2
0
        public void LandRover(Rover rover)
        {
            if (Rovers.ContainsKey(rover.Id))
            {
                throw new InvalidOperationException("Rover already exists.");
            }

            if (rover.Position.X < 0 || rover.Position.X > PlateauLength || rover.Position.Z < 0 || rover.Position.Z > PlateauWidth)
            {
                throw new InvalidOperationException("Rover has landed off the plateau.");
            }

            foreach (var roverEntry in Rovers.Values)
            {
                if (Vector.AreEqual(roverEntry.Position, rover.Position))
                {
                    throw new InvalidOperationException("Rover has crash-landed on another rover.");
                }
            }

            Rovers.Add(rover.Id, rover);
        }