public void TakeMoney(int amount, IMoneyHolder bank, SpinnerSpaces restriction, IMoneyHolder pot = null) { IMoneyHolder destination = restriction == SpinnerSpaces.MoneyMoney ? pot : Wallet; IMoneyHolder amountToTake = new Wallet(); //int amountOfDollars, amountOfQuarters, amountOfDimes, amountOfNickels, amountOfPennies; while (true) { int cents = (amountToTake = amount.ToIMoneyHolder(restriction, bank)).ToCents(); if (cents != amount) { BankRefillEventArgs brea = new BankRefillEventArgs((amount - cents).ToIMoneyHolder(restriction)); CallForBankRefill(this, brea); if (brea.CanExchange == false) { return; } } else { break; } } destination.Add(bank, amountToTake); }
public static IMoneyHolder ToIMoneyHolder(this int value, SpinnerSpaces restriction = SpinnerSpaces.AnyCoins, IMoneyHolder maximum = null) { IMoneyHolder wallet = new Wallet(); int actualAmount = value; actualAmount -= (wallet.Dollars = Math.Min(actualAmount / 100, maximum?.Dollars ?? int.MaxValue)) * 100; actualAmount -= (wallet.Quarters = (restriction != SpinnerSpaces.NoQuarters) ? Math.Min(actualAmount / 25, maximum?.Quarters ?? int.MaxValue) : 0) * 25; actualAmount -= (wallet.Dimes = (restriction != SpinnerSpaces.NoDimes) ? Math.Min(actualAmount / 10, maximum?.Dimes ?? int.MaxValue) : 0) * 10; actualAmount -= (wallet.Nickels = (restriction != SpinnerSpaces.NoNickels) ? Math.Min(actualAmount / 5, maximum?.Nickels ?? int.MaxValue) : 0) * 5; actualAmount -= (wallet.Pennies = Math.Min(actualAmount, maximum?.Pennies ?? int.MaxValue)); return(wallet); }
public void Play() { int turnNumber = 0; while (true) { Print($"{Players[turnNumber].Name}'s turn"); //Roll and move int diceResult = Players[turnNumber].RollDice(Die[0], DiceRollContext.Movement); Print($"{Players[turnNumber].Name} rolled a {diceResult}"); Players[turnNumber].MoveToken(Tokens[turnNumber], diceResult, TokenContext.Normal); //Stop if someone's won if (Tokens.Any(x => x.Position >= Board[0].Spaces.Length)) { break; } var space = Board[0].Spaces[Tokens[turnNumber].Position]; Print($"{Players[turnNumber].Name} landed on a {space.Type} space!" + (space.Type == SpaceTypes.Money ? $" (worth {((NormalSpace)space).Value}c)" : "")); switch (space.Type) { case SpaceTypes.Money: SpinnerSpaces spinnerResult = Players[turnNumber].SpinSpinner(Board[0].Spinner, SpinnerContext.Normal); Print($"{Players[turnNumber].Name} spun a {spinnerResult}"); string moneyChange = (spinnerResult == SpinnerSpaces.MoneyMoney ? $"The Money Money pot's total money went from {Board[0].MoneyMoneyPot.ToCents()} -> " : $"{Players[turnNumber].Name} total money went from {Players[turnNumber].Wallet.ToCents()}c -> "); Players[turnNumber].TakeMoney(((NormalSpace)space).Value, Board[0].Bank, spinnerResult, spinnerResult == SpinnerSpaces.MoneyMoney ? Board[0].MoneyMoneyPot : null); Print(moneyChange + (spinnerResult == SpinnerSpaces.MoneyMoney ? Board[0].MoneyMoneyPot.ToCents() : Players[turnNumber].Wallet.ToCents()) + "c"); break; case SpaceTypes.BankExchange: string bankExchangeChange = $"{Players[turnNumber].Name} total money went from {Players[turnNumber].Wallet.ToCents()}c -> "; Players[turnNumber].BankExchange((BankExchangeSpace)space, Board[0].Bank); Print(bankExchangeChange + Players[turnNumber].Wallet.ToCents() + "c"); break; case SpaceTypes.DollarSign: Print($"{Players[turnNumber].Name} collected {Board[0].MoneyMoneyPot.ToCents()}c from the Money Money Pot!"); Players[turnNumber].CollectFromPot(Board[0].MoneyMoneyPot); if (Board[0].Bank.Pennies == 0 || Board[0].Bank.Nickels == 0 || Board[0].Bank.Dimes == 0 || Board[0].Bank.Quarters == 0) { ReFillBank(this, new BankRefillEventArgs( Board[0].Bank.Pennies == 0 ? 1 : 0, Board[0].Bank.Nickels == 0 ? 1 : 0, Board[0].Bank.Dimes == 0 ? 1 : 0, Board[0].Bank.Quarters == 0 ? 1 : 0, 0)); } Board[0].MoneyMoneyPot.Add(Board[0].Bank, 1, 1, 1, 1, 0); Print($"The Money Money pot was refilled with {Board[0].MoneyMoneyPot.ToCents()}c"); break; } if (turnNumber == Players.Length - 1) { turnNumber = 0; } else { turnNumber++; } } Print($"{Players[turnNumber].Name} has reached the end! (and collected {Board[0].MoneyMoneyPot.ToCents()}c from the Money Money Pot)"); Players[turnNumber].CollectFromPot(Board[0].MoneyMoneyPot); //Display the winner/sort List <OriginalPlayer> sorted = Players.ToList(); sorted.Sort((x, y) => x.Wallet.ToCents().CompareTo(y.Wallet.ToCents())); sorted.Reverse(); Print($"{sorted[0].Name} is the winner!", true); for (int i = 0; i < sorted.Count; i++) { Print($"{i+1} - {sorted[i].Name}:\n" + $"\t {sorted[i].Wallet.Pennies} * 1c\n" + $"\t + {sorted[i].Wallet.Nickels} * 5c\n" + $"\t + {sorted[i].Wallet.Dimes} * 10c\n" + $"\t + {sorted[i].Wallet.Quarters} * 25c\n" + $"\t + {sorted[i].Wallet.Dollars} * 100c\n" + $"\t--------------------------------\n" + $"\t = ${sorted[i].Wallet.ToDollars()}\n"); } Print("Press any key to exit...", true); }