public void MakeTurn() { if (!_inputEntered) { Console.WriteLine("At first make input"); return; } var playerTurn = new PlayerTurnModel { AcresToPlant = _acresToPlant, AcrChange = _acrChange, BushelsToFeed = _bushelsToFeed }; var result = _game.MakeTurn(playerTurn); ResetInput(); if (result.TurnHandleResult == TurnHandleResult.ValidationError) { Console.WriteLine(result.ValidationErrorMessage); return; } if (result.TurnHandleResult == TurnHandleResult.GameOver) { IsGameOver = true; } Console.WriteLine(result.Report); }
public ValidationResultModel Validate(CityDomain cityDomain, PlayerTurnModel turnModel) { ValidationResultModel valid = new ValidationResultModel() { HasErrors = false }; StringBuilder sb = new StringBuilder(); if (turnModel.BushelsToFeed > cityDomain.BushelsCount) { sb.Append("You do not have as many bushels").Append(_separator); valid.HasErrors = true; } if (turnModel.AcrChange < 0 && -turnModel.AcrChange > cityDomain.AcresCount) { sb.Append("You do not have as many acres for sale!").Append(_separator); valid.HasErrors = true; } if (turnModel.AcrChange > 0 && cityDomain.BushelsCount / cityDomain.AcrCost < turnModel.AcrChange) { sb.Append("You do not have as many bushels to buy as many acres!").Append(_separator); valid.HasErrors = true; } if (turnModel.AcresToPlant > cityDomain.AlivePeople * 10) { sb.Append("You do not have so many people to sow such a count of acres!").Append(_separator); valid.HasErrors = true; } if (turnModel.BushelsToFeed < 0) { sb.Append("You can not enter a negative value in the field for food!").Append(_separator); valid.HasErrors = true; } if (turnModel.AcresToPlant < 0) { sb.Append("You can not enter a negative value in the field for sowing acres!").Append(_separator); valid.HasErrors = true; } if (valid.HasErrors) { valid.ErrorMessage = sb.ToString(); } return(valid); }
public TurnResultModel MakeTurn(PlayerTurnModel model) { var handleResult = _turnHandler.HandleTurn(model); var turnResult = new TurnResultModel { TurnHandleResult = handleResult.TurnHandleResult }; switch (handleResult.TurnHandleResult) { case TurnHandleResult.ValidationError: turnResult.ValidationErrorMessage = handleResult.ValidationResult.ErrorMessage; break; case TurnHandleResult.GameOver: case TurnHandleResult.Succeed: turnResult.Report = _reporter.GenerateYearReport(handleResult); break; } return(turnResult); }
public HandleResult HandleTurn(PlayerTurnModel model) { _cityDomain.BushelsCount -= model.AcrChange * _cityDomain.AcrCost; var validationResult = _validator.Validate(_cityDomain, model); if (validationResult.HasErrors) { return(new HandleResult { TurnHandleResult = TurnHandleResult.ValidationError, ValidationResult = validationResult }); } _currentYear = ++_cityDomain.CurrentYear; _cityDomain.AcresCount += model.AcrChange; var bushelsForPerson = model.BushelsToFeed / _normFoodForPerson; var fedPeopleCount = bushelsForPerson > _cityDomain.AlivePeople ? _cityDomain.AlivePeople : bushelsForPerson; _cityDomain.StarvedPeople = _cityDomain.AlivePeople - fedPeopleCount; _cityDomain.AlivePeople -= _cityDomain.StarvedPeople; if (_cityDomain.AlivePeople <= _cityDomain.StarvedPeople) { return(new HandleResult { TurnHandleResult = TurnHandleResult.GameOver, CityDomain = _cityDomain.Clone(), GameOverCause = GameOverCause.PeopleDead }); } _cityDomain.ComingInCurrentYearPeople = GameRandom.Next(2, 11); _cityDomain.AlivePeople += _cityDomain.ComingInCurrentYearPeople; _cityDomain.AcrCost = GameRandom.Next(16, 26); _cityDomain.BushelsCount -= model.AcresToPlant + model.BushelsToFeed; _cityDomain.HarvestedBushelsPerAcr = _cityDomain.BushelsCount < 3000 ? GameRandom.Next(1, 6) : OneBushelPerAcr; _cityDomain.BushelsCount += _cityDomain.HarvestedBushelsPerAcr * model.AcresToPlant; var eatenByRatsPercent = GameRandom.NextDouble(); _cityDomain.EatenByRats = (int)(_cityDomain.BushelsCount * (eatenByRatsPercent >= 0.6 ? eatenByRatsPercent - ReductionRatsFactor : eatenByRatsPercent)); _cityDomain.BushelsCount -= _cityDomain.EatenByRats; var result = new HandleResult { CityDomain = _cityDomain.Clone(), TurnHandleResult = _currentYear > _maxYears ? TurnHandleResult.GameOver : TurnHandleResult.Succeed, }; result.GameOverCause = result.TurnHandleResult == TurnHandleResult.GameOver ? GameOverCause.CameLastYear : GameOverCause.None; return(result); }