Exemple #1
0
 private void UpdateHistoryForOverseers(ref GuessingPlayer <int> player)
 {
     if (player is IHistoryOverseer)
     {
         GuessItem <int>[] history;
         lock (_history)
         {
             history = _history.ToArray();
         }
         ((IHistoryOverseer)player).UpdateHistory(history);
     }
 }
Exemple #2
0
        private string GetFailResult(GuessingPlayer <int> player, bool attemptsNumberExceeded)
        {
            lock (_history)
            {
                var closestGuess = _history.Aggregate((g, ng) => Math.Abs(g.Value - _answer) < Math.Abs(ng.Value - _answer) ? g : ng);

                var resultMessage = String.Format("The closest guess was {0} by {1}", closestGuess.PlayerName, closestGuess.Value);

                if (attemptsNumberExceeded)
                {
                    return("Attempts number exceeded." + resultMessage);
                }
                else
                {
                    return("Time exceeded." + resultMessage);
                }
            }
        }
Exemple #3
0
        public override string PlayerSession(GuessingPlayer <int> player, CancellationToken capturedToken)
        {
            var attemptsNumberExceeded = false;
            var timeExceeded           = false;
            int weight;

            player.Init(_range);


            while (!(attemptsNumberExceeded || timeExceeded))
            {
                UpdateHistoryForOverseers(ref player);

                weight = player.GetSupposedValue();

                lock (_history)
                {
                    _history.Add(new GuessItem <int>(player.Name, weight));

                    if (weight == _answer)
                    {
                        return(String.Format("The winner is {0} with {1} attempts total used", player.Name, _history.Count));
                    }
                }

                if (weight != _answer)
                {
                    Thread.Sleep(Math.Abs(_answer - weight));
                }


                var timeGap = DateTime.Now - _startTime;
                timeExceeded = timeGap >= _timeLimit;

                attemptsNumberExceeded = _history.Count() == _attemptsNumber;

                capturedToken.ThrowIfCancellationRequested();
            }

            return(GetFailResult(player, attemptsNumberExceeded));
        }
Exemple #4
0
 public GuessGame(int maxNumber = 100, int tryes = 7, GuessingPlayer guessingPlayer = GuessingPlayer.human)
 {
     this.maxNumber      = maxNumber;
     this.tryes          = tryes;
     this.guessingPlayer = guessingPlayer;
 }
 //создаем конструктор с полями:
 public GuessNumberGame(int max = 100, int maxTries = 7, GuessingPlayer guessingPlayer = GuessingPlayer.Computer)
 {
     this.max            = max;
     this.maxTries       = maxTries;
     this.guessingPlayer = guessingPlayer;
 }
Exemple #6
0
 public GuessNumberGame(int max = 100, int maxTries = 5, GuessingPlayer guessingPlayer = GuessingPlayer.Human)
 {
     this.max            = max;
     this.maxTries       = maxTries;
     this.GuessingPlayer = guessingPlayer;
 }
 public GuessNumberGame(int max = 50, int maxTries = 5, GuessingPlayer guessingPlayer = GuessingPlayer.Human)
 {
     _max            = max;
     _maxCount       = maxTries;
     _guessingPlayer = guessingPlayer;
 }