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); }
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); }
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); }
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; }
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); }
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"); }