public SlotMachineSpinResultDto Spin(decimal stakeAmount) { var rowsOfSymbols = new List <List <Symbol> >(); double coefficient = 0; ISymbolCoefficientProvider symbolCoefficientProvider = _symbolCoefficientProviderFactory.Create(); for (int i = 0; i < Rows; i++) { List <Symbol> symbols = _randomSymbolGenerator.Generate(NumberOfSymbolsOnARow); rowsOfSymbols.Add(symbols); coefficient += symbolCoefficientProvider.GetCoefficient(symbols); } decimal winAmount = (decimal)coefficient * stakeAmount; _player.Balance += winAmount; return(new SlotMachineSpinResultDto { PlayerBalance = _player.Balance, Symbols = rowsOfSymbols, WinAmount = winAmount, IsSuccess = true }); }
public double GetCoefficient(List <Symbol> symbols) { double coefficient = 0; int countOfSameItems = 0; foreach (var symbol in symbols) { if (symbol.GetType() == GetSymbolType() || symbol is Wildcard) { countOfSameItems++; coefficient += symbol.Coefficient; } } if (countOfSameItems == symbols.Count) { return(coefficient); } if (_successor != null) { return(_successor.GetCoefficient(symbols)); } return(0); }