private void AddWorker(IPlayer player)
        {
            IGatherer worker;

            switch (player.RaceType)
            {
            case RaceType.Protoss:
                worker = factory.CreateProbe(player.Position, CommandsConstant.WorkerWithNoName);
                worker.Work(ResourceType.Minerals);
                player.AddGameObject(worker);
                break;

            case RaceType.Terran:
                worker = factory.CreateScv(player.Position, CommandsConstant.WorkerWithNoName);
                worker.Work(ResourceType.Minerals);
                player.AddGameObject(worker);
                break;

            case RaceType.Zerg:
                worker = factory.CreateDrone(player.Position, CommandsConstant.WorkerWithNoName);
                worker.Work(ResourceType.Minerals);
                player.AddGameObject(worker);
                break;
            }
        }
        private void ProceedCreateCommand(string[] command, IPlayer player)
        {
            IGameObject result;

            try
            {
                string     methodName = GetMethodName(command);
                Type       type       = typeof(UnitFactory);
                MethodInfo method     = type.GetMethod(methodName);
                result = (IGameObject)method.Invoke(factory, new object[] { player.Position, command[4] });
            }
            catch (Exception)
            {
                throw new InvalidCommandException(CommandsConstant.InvalidCommand);
            }

            if (result != null && player.RaceType == result.Race)
            {
                if (player.Gas < result.GasCost)
                {
                    throw new InvalidCommandException(CommandsConstant.NoGas);
                }
                if (player.Mineral < result.MineralCost)
                {
                    throw new InvalidCommandException(CommandsConstant.NoMinerals);
                }

                player.GetGas(result.GasCost);
                player.GetMineral(result.MineralCost);
                player.AddGameObject(result);

                if (result is IGatherer)
                {
                    var worker = result as IGatherer;
                    worker.CollectResources(ResourceType.Minerals);
                }
            }
        }