""" НАСТРОЙКИ АКТИВОВ """ class AssetsConfig: # Категории активов ASSET_CATEGORIES = { 'bonds': {'name': 'Облигации', 'color': '#4CAF50', 'icon': '🏦'}, 'stocks': {'name': 'Акции', 'color': '#2196F3', 'icon': '📈'}, 'real_estate': {'name': 'Недвижимость', 'color': '#FF9800', 'icon': '🏠'}, 'crypto': {'name': 'Криптовалюта', 'color': '#9C27B0', 'icon': '💰'}, 'commodities': {'name': 'Сырье', 'color': '#795548', 'icon': '⛽'}, 'business': {'name': 'Бизнес', 'color': '#F44336', 'icon': '🏢'}, 'unique': {'name': 'Уникальные', 'color': '#FFD700', 'icon': '🏆'}, } # Список всех активов ASSETS = { # ОБЛИГАЦИИ 'gov_bonds': { 'name': 'Государственные облигации', 'category': 'bonds', 'base_price': 10000, 'volatility': 0.05, 'income_per_month': 0.01, 'risk_level': 1, 'liquidity': 10, 'total_quantity': None, 'max_per_player': None, 'min_purchase': 1, 'description': 'Самый надежный актив. Защита от кризисов.' }, # АКЦИИ 'stock_gazprom': { 'name': 'Акции Газпрома', 'category': 'stocks', 'base_price': 1000, 'volatility': 0.15, 'income_per_month': 0.03, 'risk_level': 3, 'liquidity': 8, 'total_quantity': 10000, 'max_per_player': 2000, 'min_purchase': 10, 'description': 'Голубые фишки. Стабильные дивиденды.' }, 'stock_sberbank': { 'name': 'Акции Сбербанка', 'category': 'stocks', 'base_price': 300, 'volatility': 0.18, 'income_per_month': 0.04, 'risk_level': 4, 'liquidity': 9, 'total_quantity': 15000, 'max_per_player': 3000, 'min_purchase': 10, 'description': 'Крупнейший банк. Высокая ликвидность.' }, 'stock_yandex': { 'name': 'Акции Яндекса', 'category': 'stocks', 'base_price': 3500, 'volatility': 0.25, 'income_per_month': 0.00, 'risk_level': 6, 'liquidity': 7, 'total_quantity': 5000, 'max_per_player': 1000, 'min_purchase': 1, 'description': 'IT-гигант. Высокий рост, высокая волатильность.' }, # НЕДВИЖИМОСТЬ 'apartment_small': { 'name': 'Небольшая квартира', 'category': 'real_estate', 'base_price': 5000000, 'volatility': 0.10, 'income_per_month': 0.02, 'risk_level': 2, 'liquidity': 4, 'total_quantity': 12, 'max_per_player': 3, 'min_purchase': 1, 'description': 'Стабильный доход от аренды.' }, 'apartment_elite': { 'name': 'Элитная квартира', 'category': 'real_estate', 'base_price': 15000000, 'volatility': 0.08, 'income_per_month': 0.03, 'risk_level': 2, 'liquidity': 2, 'total_quantity': 3, 'max_per_player': 1, 'min_purchase': 1, 'description': 'Статусный актив. Низкая волатильность.' }, # КРИПТОВАЛЮТА 'bitcoin': { 'name': 'Биткоин', 'category': 'crypto', 'base_price': 2000000, 'volatility': 0.35, 'income_per_month': 0.00, 'risk_level': 9, 'liquidity': 7, 'total_quantity': None, 'max_per_player': None, 'min_purchase': 0.001, 'description': 'Высокорисковый актив. Только спекуляции.' }, # СЫРЬЕ 'oil': { 'name': 'Нефть Brent', 'category': 'commodities', 'base_price': 5500, 'volatility': 0.25, 'income_per_month': 0.00, 'risk_level': 6, 'liquidity': 6, 'total_quantity': 200, 'max_per_player': 40, 'min_purchase': 10, 'description': 'Зависит от политики. Высокая волатильность.' }, 'natural_gas': { 'name': 'Природный газ', 'category': 'commodities', 'base_price': 3000, 'volatility': 0.20, 'income_per_month': 0.00, 'risk_level': 5, 'liquidity': 5, 'total_quantity': 300, 'max_per_player': 50, 'min_purchase': 100, 'description': 'Сезонный актив. Пик зимой.' }, # БИЗНЕС 'coffee_shop': { 'name': 'Кофейня', 'category': 'business', 'base_price': 2000000, 'volatility': 0.12, 'income_per_month': 0.05, 'risk_level': 5, 'liquidity': 3, 'total_quantity': 8, 'max_per_player': 2, 'min_purchase': 1, 'description': 'Пассивный бизнес. Средний риск.' }, 'it_startup': { 'name': 'IT-стартап', 'category': 'business', 'base_price': 1000000, 'volatility': 0.40, 'income_per_month': 0.00, 'risk_level': 10, 'liquidity': 1, 'total_quantity': 4, 'max_per_player': 1, 'min_purchase': 1, 'description': 'Венчурные инвестиции. Может взлететь или провалиться.' }, # УНИКАЛЬНЫЕ 'shopping_mall': { 'name': 'Торговый центр', 'category': 'unique', 'base_price': 50000000, 'volatility': 0.10, 'income_per_month': 0.06, 'risk_level': 4, 'liquidity': 1, 'total_quantity': 1, 'max_per_player': 1, 'min_purchase': 1, 'description': 'Ключевой актив. Контроль над малым бизнесом.', 'special_rules': { 'can_be_fractional': True, 'min_fraction': 0.1, 'control_bonus': 0.1 } }, 'oil_field': { 'name': 'Нефтяное месторождение', 'category': 'unique', 'base_price': 100000000, 'volatility': 0.20, 'income_per_month': 0.08, 'risk_level': 7, 'liquidity': 1, 'total_quantity': 1, 'max_per_player': 1, 'min_purchase': 1, 'description': 'Стратегический актив. Контроль над ценами на нефть.', 'special_rules': { 'affects_other_assets': ['oil'], 'price_influence': 0.15 } } } @staticmethod def calculate_price(asset_data, demand_factor, month, total_players): """Расчет текущей цены актива""" base_price = asset_data['base_price'] volatility = asset_data['volatility'] # Базовое изменение от спроса price = base_price * (1 + demand_factor * volatility) # Инфляция (0.5% в месяц) price *= (1.005 ** month) # Ограничения price = max(price, base_price * 0.1) # Не ниже 10% от базы price = min(price, base_price * 5) # Не выше 500% от базы # Округление if price < 1000: return round(price, 2) elif price < 1000000: return round(price, 0) else: return round(price, -3) @staticmethod def calculate_income(asset_data, player_share, total_owners): """Расчет доходности с учетом баланса""" base_income = asset_data['income_per_month'] if base_income <= 0: return 0 # Штраф за концентрацию (если много владельцев у одного игрока) if total_owners > 0: concentration_penalty = (player_share ** 2) * 0.2 income = base_income * (1 - concentration_penalty) else: income = base_income return max(income, 0.001) # Минимум 0.1%