public void SelectTest()
        {
            #region Формирование исходных данных
            var history = new ExperimentHistory("", null, new Experiment());

            var game = new Game() { Title = "Game" };

            var strike = new Strike() {ErrorDistance = 0};
            var strike2 = new Strike() {ErrorDistance = 1};

            var strikes = new List<Strike> {strike, strike2};

            var users = new Users()
            {
                new User
                {
                    Person = new Person(),
                    Strikes = strikes
                }
            };

            history.AddGame(game, users);

            var settings = new List<PlayerHistorySample>
            {
                new PlayerHistorySample
                {
                    FromStrike = "first",
                    ToStrike = "last",
                    GameTitle = "Game"
                }
            };

            #endregion

            var samples = history.SelectSamples(settings);

            Assert.AreEqual(2, samples.Count());

            for (var i = 0; i < strikes.Count; i++)
            {
                Assert.AreEqual(strikes[i].ErrorDistance, samples.ElementAt(i));
            }
        }
 public void AddGame(Game game,
                   Users users)
 {
     _data.Add(new Tuple<Game, Users>(game, users));
 }
        private Users CreateUsers(Game currentGame)
        {
            // Испытуемый
            var person = GameObjects["person"] as Person;

            if (person == null) throw new NullReferenceException("person");

            var users = new Users();

            foreach (var userInfo in currentGame.Users)
            {
                var user = new User
                               {
                                   CurrentGame = currentGame.Title,
                                   UserInfo = userInfo,
                                   TotalScore = userInfo.Score
                               };

                if (userInfo.UserType == UserTypeEnum.User)
                {
                    user.Person = person;
                }

                users.Add(user);
            }

            return users;

            //GameObjects["users"] = users;
        }
        public void Initialize()
        {
            stopwatch.Reset();

            startingGameView = GameObjects["startingGameView"] as StartingGameView;

            if (startingGameView == null) throw new NullReferenceException("startingGameView");

            // Текущая игра
            currentGame = GameObjects["currentGame"] as Game;

            if (currentGame == null) throw new NullReferenceException("currentGame");
        }
        public void Initialize()
        {
            if (Experiment == null) throw new NullReferenceException();

            if (Experiment.Games.Count > 0)
            {
                currentGame = Experiment.Games[0];

                gameObjects["currentGame"] = currentGame;

                gameObjects["nextGame"] = GetNextGame(currentGame);

                gamePlayer.Initialize();
            }
        }
        public void Initialize()
        {
            strikePlayer = new StrikePlayer(GameObjects);

            currentGame = GameObjects["currentGame"] as Game;

            if (currentGame == null) throw new NullReferenceException("currentGame");

            currentStrike = currentGame.Strikes[0];

            strikeRepeatTime = 0;

            strikesRepeatTime = 0;

            if (currentGame.StrikesRepeatTimes < 1) throw new ArgumentException(string.Format("Параметр \"StrikesRepeatTimes\" игры меньше 1, игра \"{0}\"", currentGame.Title));

            if (currentStrike.RepeatTimes < 1) throw new ArgumentException(string.Format("Параметр \"RepeatTimes\" меньше 1, игра \"{0}\"", currentGame.Title));

            GameObjects["currentStrikeInfo"] = currentStrike;

            strikePlayer.Initialize();
        }
        private Game GetNextGame(Game game)
        {
            var gameIndex = Experiment.Games.FindIndex(t => t == game);

            var nextGame = Experiment.Games.Find(t => Experiment.Games.IndexOf(t) == gameIndex + 1);

            return nextGame;
        }
        private static ExperimentHistory CreateHistory(int hitCount, int size, bool lastStrikeHit)
        {
            var history = new ExperimentHistory("", null, new Experiment());

            var game = new Game() { Title = "Game" };

            var strikes = new List<Strike>();

            var count = hitCount - 1;

            var j = 0;

            for (var i = 0; i < size; i++)
            {
                var strike = new Strike
                {
                    IsHit = j < count
                };

                j++;

                strikes.Add(strike);
            }

            strikes.Last().IsHit = lastStrikeHit;

            var users = new Users()
            {
                new User
                {
                    Person = new Person(),
                    Strikes = strikes
                }
            };

            history.AddGame(game, users);

            return history;
        }
        private static ExperimentHistory CreateHistory(double mean, double stddev, int size)
        {
            var history = new ExperimentHistory("", null, new Experiment());

            var game = new Game() {Title = "Game"};

            var samples = Normal.Samples(mean, stddev).Take(size);

            var strikes = samples.Select(t => new Strike {ErrorDistance = t}).ToList();

            var users = new Users()
            {
                new User
                {
                    Person = new Person(),
                    Strikes = strikes
                }
            };

            history.AddGame(game, users);

            return history;
        }
        public void SelectTest18()
        {
            #region Формирование исходных данных
            var history = new ExperimentHistory("", null, new Experiment());

            var game = new Game() { Title = "Game" };

            var strike = new Strike() { ErrorDistance = 0 };
            var strike2 = new Strike() { ErrorDistance = 1 };

            var strikes = new List<Strike> { strike, strike2 };

            var users = new Users()
            {
                new User
                {
                    Person = new Person(),
                    Strikes = strikes
                }
            };

            history.AddGame(game, users);

            var settings = new List<PlayerHistorySample>
            {
                new PlayerHistorySample
                {
                    ToStrike = "last - 10",
                    GameTitle = "Game"
                }
            };

            #endregion

            var samples = history.SelectSamples(settings);
        }
        public void Initialize()
        {
            _stopwatch.Reset();

            // Таймер
            _timer = _gameObjects["timer"] as Timer;

            if (_timer == null) throw new NullReferenceException("timer");

            _timer.Reset();

            // Таймер время до нажатия пробела
            _timerBeforeSpaceDown = _gameObjects["timerBeforeSpaceDown"] as Timer2;

            if (_timerBeforeSpaceDown == null)
                throw new NullReferenceException("timerBeforeSpaceDown");

            _timerBeforeSpaceDown.Reset();

            _firstLoop = true;

            _currentStrike = _gameObjects["currentStrikeInfo"] as StrikeInfo;

            if (_currentStrike == null)
                throw new NullReferenceException("currentStrikeInfo");

            var ballStartPosition = CreateBallStartPosition();
            StoreBallStartPosition(ballStartPosition);

            _ball = GetBall();
            SetupBall(_ball, ballStartPosition);

            var holeStartPosition = CreateHoleStartPosition();
            StoreHoleStartPosition(holeStartPosition);

            _hole = GetHole();
            SetupHole(_hole, holeStartPosition);

            #region Задание параметров отображаемой мишени

            var holeView = _gameObjects["holeView"] as HoleView;

            if (holeView == null)
                throw new NullReferenceException("holeView");

            var holeInfo = _currentStrike.Hole;
            // если отображаемый размер мишени не задан, используется действительный размер
            holeView.SetSize(holeInfo.VisibleSize == null ? holeInfo.Size : holeInfo.VisibleSize.Value);

            #endregion

            // Текущая игра
            _currentGame = _gameObjects["currentGame"] as Game;

            if (_currentGame == null)
                throw new NullReferenceException("currentGame");

            // Все игроки
            var users = _gameObjects["users"] as Users;

            if (users == null)
                throw new NullReferenceException("users");

            // Текущий игрок - испытуемый бьет первым
            _currentUser = users.FirstOrDefault(t => t.UserInfo.UserType == UserTypeEnum.User);

            if (_currentUser == null) throw new NullReferenceException("currentUser");

            _gameObjects["currentUser"] = _currentUser;

            // Снять выделение с имени игрока
            var botScoreView = GameObjects["botScoreView"] as UserScoreView;

            if (botScoreView != null)
            {
                botScoreView.IsActive = false;
            }

            // Показать очки игрока
            var userScoreView = GameObjects["userScoreView"] as UserScoreView;

            if (userScoreView == null) throw new NullReferenceException("userScoreView");

            userScoreView.Score = _currentUser.TotalScore;
            userScoreView.IsActive = true;

            GameObjects["currentUserScoreView"] = userScoreView;

            // Режим игрока
            var experiment = GameObjects["experiment"] as Experiment;

            if (experiment == null) throw new NullReferenceException("experiment");

            _inTestMode = experiment.Mode != null && experiment.Mode.Value == ExeprimentModeEnum.Test && _currentStrike.InTestMode != null;
        }
        public bool Play()
        {
            var playing = gamePlayer.Play();

            if (gamePlayer.IsCancelled)
            {
                IsCancelled = true;
            }

            if (IsCancelled) return false;

            if (!playing)
            {
                var nextGame = GetNextGame(currentGame);

                if (nextGame != null)
                {
                    currentGame = nextGame;

                    gameObjects["currentGame"] = currentGame;

                    gameObjects["nextGame"] = GetNextGame(currentGame);

                    gamePlayer.Initialize();

                    playing = true;
                }
            }

            return playing;
        }