public string Execute(TextAdventureEngine engine, string[] parts)
        {
            var direction = -1;

            if ("forward" == parts.Last())
            {
                direction = engine.CurrentOrientation;
            }
            else if ("backward" == parts.Last())
            {
                direction = DirectionCalculator.Reverse(engine.CurrentOrientation);
            }

            if (direction == -1)
            {
                return($"I don't know how to move {parts.Last()}");
            }
            if (engine.CurrentLocation.Directions[direction] == null)
            {
                return($"You cannot move {parts.Last()}");
            }

            var oldLocation = engine.CurrentLocation;

            engine.CurrentLocation = oldLocation.Directions[direction];

            return($"You move {parts.Last()}");
        }
        public string Execute(TextAdventureEngine engine, string[] parts)
        {
            var directionLabel = string.Empty;

            if (RightSynonyms.Contains(parts.Last()))
            {
                engine.CurrentOrientation = DirectionCalculator.TurnRight(engine.CurrentOrientation);
                directionLabel            = "right";
            }

            if (LeftSynonyms.Contains(parts.Last()))
            {
                engine.CurrentOrientation = DirectionCalculator.TurnLeft(engine.CurrentOrientation);
                directionLabel            = "left";
            }

            if (BackwardsSynonyms.Contains(parts.Last()))
            {
                engine.CurrentOrientation = DirectionCalculator.Reverse(engine.CurrentOrientation);
                directionLabel            = "around";
            }

            return(directionLabel == string.Empty
                ? "I don't understand which way you want me to turn."
                : $"You turn {directionLabel}.");
        }
        public void TurnRight()
        {
            var turnAction = new TurnAction();
            var engine     = new TextAdventureEngine(new NormalLocation(), DirectionCalculator.North);

            turnAction.Execute(engine, new[] { "turn", "right" });
            Assert.Equal(1, engine.CurrentOrientation);
        }
        public void Exist()
        {
            var quitAction = new QuitAction();
            var engine     = new TextAdventureEngine(new NormalLocation(), DirectionCalculator.North);

            quitAction.Execute(engine, new[] { "quit" });
            Assert.Equal(TextAdventureEngine.States.Terminating, engine.CurrentState);
        }
 public PickUpActionShould()
 {
     _item = new InventoryItem
     {
         Name = "key"
     };
     _room   = new NormalLocation();
     _engine = new TextAdventureEngine(_room, DirectionCalculator.North);
 }
Exemple #6
0
        private static void Main(string[] args)
        {
            var ui     = new TextUserInterface(Console.Out, Console.In);
            var engine =
                new TextAdventureEngine(new MainDungeonBuilder().Build(), DirectionCalculator.RandomDirection());
            var gameRunner = new GameRunner(engine, ui);

            using var inputEnumerator = ui.Commands().GetEnumerator();
            gameRunner.Execute(inputEnumerator);
        }
Exemple #7
0
        public MoveActionShould()
        {
            _firstLocation  = new NormalLocation();
            _secondLocation = new NormalLocation();
            _firstLocation.Directions[DirectionCalculator.North]  = _secondLocation;
            _secondLocation.Directions[DirectionCalculator.South] = _firstLocation;

            _moveAction = new MoveAction();
            _engine     = new TextAdventureEngine(_firstLocation, DirectionCalculator.North);
        }
Exemple #8
0
        public void Do(GameObject verbSubject, GameObject verbObject, TextAdventureEngine.State.GameState state)
        {
            if (!(verbObject is Direction))
                throw new DirectionNotRecognisedException();

            var newLocation = state.Location.Move((Direction)verbObject);

            if (newLocation == null)
                throw new NoWayThereException();

            state.Location = newLocation;
        }
Exemple #9
0
 public string Execute(TextAdventureEngine engine, string[] parts)
 {
     try
     {
         var item = engine.CurrentLocation.Items.First(x => x.Name == parts.Last());
         engine.Inventory.Add(item);
         return($"You picked up the {item.Name}");
     }
     catch (InvalidOperationException)
     {
         return($"There is no {parts.Last()} here.");
     }
 }
        public TextAdventureWanderShould()
        {
            _one   = BuildLocation("one");
            _two   = BuildLocation("two");
            _three = BuildLocation("three");
            _four  = BuildLocation("four");

            DungeonBuilder.Connect(DirectionCalculator.East, _one, _two);
            DungeonBuilder.Connect(DirectionCalculator.South, _two, _three);
            DungeonBuilder.Connect(DirectionCalculator.West, _three, _four);
            DungeonBuilder.Connect(DirectionCalculator.North, _four, _one);

            _engine = new TextAdventureEngine(_one, DirectionCalculator.North);
        }
Exemple #11
0
 public string Execute(TextAdventureEngine engine, string[] parts)
 {
     return($"Hello, {parts.Last()}!");
 }
 public string Execute(TextAdventureEngine engine, string[] parts)
 {
     engine.Halt();
     return("Bye!");
 }
 public string Execute(TextAdventureEngine engine, string[] parts)
 {
     return("Unrecognized command");
 }