public InputInterpreter(IGameManager manager) { this._manager = manager; Action<List<TurnState.Point>, int[]> appendPoint = (list, ints) => { var pt = new TurnState.Point(ints[0], ints[1]); if (ints.Length > 2) pt.Owner = ints[2]; list.Add(pt); }; this._mapGamePlayBuilder = new Dictionary<string, Action<int[]>>(StringComparer.InvariantCultureIgnoreCase) { {"a", ints => appendPoint(this._currentTurnState.Ants, ints)}, {"d", ints => appendPoint(this._currentTurnState.DeadAnts, ints)}, {"f", ints => appendPoint(this._currentTurnState.Food, ints)}, {"w", ints => appendPoint(this._currentTurnState.Water, ints)}, { "turn", ints => { this._currentTurnState = new TurnState(); this._currentTurnState.TurnNumber = ints[0]; manager.StartingTurn(ints[0]); } }, {"go", ints => manager.DoMoves(this._currentTurnState)}, { "end", ints => { manager.GameHasEnded(); this.GameHasEnded(); } } }; this._loadGameRuleBuilder = new Dictionary<string, Action<int>>(StringComparer.InvariantCultureIgnoreCase) { {"turn", i => this._manager.StartingTurn(0)}, {"loadtime", i => this._gameRules.LoadTime = TimeSpan.FromMilliseconds(i)}, {"turntime", i => this._gameRules.TurnTime = TimeSpan.FromMilliseconds(i)}, {"rows", i => this._gameRules.MapRows = i}, {"cols", i => this._gameRules.MapColumns = i}, {"turns", i => this._gameRules.NumberOfTurns = i}, {"viewradius2", i => this._gameRules.ViewRadiusSquared = i}, {"attackradius2", i => this._gameRules.AttackRadiusSquared = i}, {"spawnradius2", i => this._gameRules.SpawnRadiusSquared = i}, { "ready", i => { this._stage = InputInterpreterStage.Playing; this._manager.RulesNotification(this._gameRules); } } }; }