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);
                                         }
                            }
                    };
        }
 public void GameHasEnded()
 {
     this._stage = InputInterpreterStage.Ended;
 }