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);
        }