public static bool TradeOfferDecide(Card item, float money, Cards.PropertyManager pm, AIPlayer player) { if (item is PropertyCard) { PropertyCard propCard = (PropertyCard)item; float requiredMoney = (3 + player.dangerFactor) * propCard.Cost; if (!(pm.OwnsWholeGroup(item.Group, player))) { if (money > requiredMoney) { return(true); } } } else if (item is BonusCard) { if (money > (2 + player.dangerFactor) * item.Cost) { return(true); } } else { if (money > (1.5 + 2 * player.dangerFactor) * item.Cost) { return(true); } } return(false); }
/** * The action when the player stepped onto a Card field. */ private void DefaultCardAction(Card card, int diceRoll) { Player cardOwner = propertyManager.WhoOwns(card); if (cardOwner == null) { if (currentPlayer.Money < card.Cost) { window.ShowMessage("You have not got enough money to buy this property"); ShowCard(card); GameState = GameStage.NO_FUNDS_BUY; return; } window.PurchaseButtons(card.Name); ShowCard(card); GameState = GameStage.AWAITING_PURCHASE; return; } else if (cardOwner == currentPlayer) { if (card is PropertyCard) { if (propertyManager.OwnsWholeGroup(card.Group, currentPlayer)) { if (((PropertyCard)card).ApartmentCost > currentPlayer.Money) { window.ShowMessage("You have not got enough money to upgrade this property"); GameState = GameStage.NO_FUNDS_BUY; } else { window.ShowUpgradeOptions(card.Name, ((PropertyCard)card).ApartmentCost); ShowCard(card); GameState = GameStage.AWAITING_UPGRADE; } } } else { ShowWhatNext(currentPlayer); } return; } else { if (cardOwner.Prison) { window.ShowMessage("The owner of this property is in prison. Lucky you!"); GameState = GameStage.NO_FUNDS_BUY; return; } else if (card.Mortgaged) { window.ShowMessage("This property is mortgaged and you don't have to pay!"); GameState = GameStage.NO_FUNDS_BUY; return; } else { float money; int propsOwned; if (diceRoll > 0) { propsOwned = PropsOwned(cardOwner, "agency"); money = ((AgencyCard)card).GetPayment(diceRoll, propsOwned); } else if (diceRoll < 0) { money = card.GetPayment(); } else { propsOwned = PropsOwned(cardOwner, "bonus"); money = ((BonusCard)card).GetPayment(propsOwned); } if (money > currentPlayer.Money) { window.ShowNoMoneyPay(); GameState = GameStage.NO_FUNDS_PAY; return; } currentPlayer.Money -= money; cardOwner.Money += money; window.ShowPayment(cardOwner.name, money); ShowCard(card); GameState = GameStage.AWAITING_RENT; } return; } }