Exemple #1
0
        public Position HandleCommand(PlutoCommand command)
        {
            switch (command)
            {
            case PlutoCommand.L:
                return(new Position(X, Y, Utils.DecrementOrientation(O)));

            case PlutoCommand.R:
                return(new Position(X, Y, Utils.IncrementOrientation(O)));

            default:
            {
                int step = command == PlutoCommand.F ? 1 : -1;

                switch (O)
                {
                case Orientation.N:
                    return(new Position(X, Y + step, O));

                case Orientation.E:
                    return(new Position(X + step, Y, O));

                case Orientation.S:
                    return(new Position(X, Y - step, O));

                case Orientation.W:
                    return(new Position(X - step, Y, O));

                default:
                    return(null);
                }
            }
            }
        }
Exemple #2
0
        public MovementReport ProcessCommand(PlutoCommand command)
        {
            Position proposed = this.GetPosition().HandleCommand(command);

            proposed = _planet.Wrap(proposed);
            List <PlutoObject> obstructions = _planet.ObjectsAt(proposed);

            if (obstructions is null || 0 == obstructions.Count ||
                (1 == obstructions.Count && object.ReferenceEquals(obstructions[0], this)))
            {
                this._position = proposed;
                return(new MovementReport(true, null));
            }