Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }