private void SimulateLandOnPropertyRailOrUtility(Player activePlayer, Position currentPosition) { if (!activePlayer.OwnsPosition(currentPosition)) { if (currentPosition.HasOwner()) { activePlayer.PayRent(currentPosition); if (activePlayer.HasBeenBankrupted()) { SimulateBankruptcyByPlayer(activePlayer, currentPosition.owner); } } else { if (activePlayer.WantsToPurchasePosition(currentPosition)) { activePlayer.PurchasePosition(currentPosition); } else { SimulateAuction(_players, currentPosition); } } } }
private void SimulateAuction(List <Player> players, Position currentPosition) { Player highestBidder = null; var highestBid = 20; const int minIncrease = 20; var higherBidderFound = true; while (higherBidderFound) { foreach (var bidder in players.Where(p => p.PlayerIsAlive)) { higherBidderFound = false; if (bidder.WantsToBid(highestBid + minIncrease, currentPosition)) { highestBidder = bidder; highestBid += minIncrease; higherBidderFound = true; } } } highestBidder.PurchasePosition(currentPosition); }