private void UpdateHistoryForOverseers(ref GuessingPlayer <int> player) { if (player is IHistoryOverseer) { GuessItem <int>[] history; lock (_history) { history = _history.ToArray(); } ((IHistoryOverseer)player).UpdateHistory(history); } }
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); } } }
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)); }
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; }
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; }