This commit is contained in:
2026-02-11 17:44:26 +03:00
parent baeaea69f8
commit 1388a5fd6b
17 changed files with 2188 additions and 177 deletions

View File

@@ -0,0 +1,252 @@
"""
НАСТРОЙКИ АКТИВОВ
"""
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%