рост счетов вопрос баланса а не размера банка.
ну видимо что-то хитрое придумал.
DemiosFantasimo
Он придумал жить на процент от вашей прибыли в игре.
я бы конечно почитал описание о чем эта игра если оно есть, но не в этой теме где куча всего навалено
DemiosFantasimo
> но не в этой теме где куча всего навалено
Тут навалено. Если кратко суть игры проста, купил дешево- продал дорого банку. Это обеспечивается за счет изменения мировоззрения и цен при прохождении каждого круга. В классической монополии игрок получает за прохождение круга определённую сумму от банка, здесь нет, как проторговал так и заработал. каждый круг фабрика может приносить незначительную прибыль(дивидент), чем больше у тебя фабрик одного типа тем больше дивидент. При нахождении противника на твоей клетке платится штраф, чем больше фабрик одного типа тем больше штраф. Всё просто, смысл всей темы в том чтобы я научился программировать вместе с ии. Делаем полтора года.
slava-rusi11
> за счет изменения мировоззрения
видимо какая то сильная механика))))
slava-rusi11
> Делаем полтора года.
виноват Гудлейфр - он много поначалу катяшился - но потом просто слился, ничего для прожекта не сделав.
> Делаем полтора года.
напомню, чем закончился первый 2-месячный период:
когда визуал более менее проявился, то стало ясно, что геймплей скучный ...
> 2-месячный период
3 сентября у меня закончится второй 2-месячный период,
итого, например, я - не делаю полтора года - я делаю всего лишь 3+ месяца))
DemiosFantasimo
> видимо какая то сильная механика))))
1,2,3. Этого достаточно чтобы создать игру.
xlat-code
> когда визуал более менее проявился, то стало ясно, что геймплей скучный ...
Но потом я подумал и понял, геймплей на системе 1.2.3 скучный для профессоров и взрослых людей. Оказалось незакрытый гештальт еще хуже слива и косяка.
slava-rusi11
> 1,2,3. Этого достаточно чтобы создать игру.
Тут нужно пояснение что это такое.
DemiosFantasimo
> Тут нужно пояснение что это такое.
Что общего между треугольником, цифрами 1.2.3, шахматной доской, игрой в димино и древнекитайской философии перемен? На понимании этого принципа можно создавать игры.
slava-rusi11
> Что общего между треугольником, цифрами 1.2.3, шахматной доской, игрой в димино и древнекитайской философии перемен
незнаю
DemiosFantasimo
> незнаю
Вот и я сразу не понял как три цифры превращаются в тысячи строк кода.
Документация по скриптам игры «Монополия 2D» (архитектурная версия)
1. Общая архитектура
Проект построен на принципе разделения данных, логики и визуализации.
Ядро данных — GameStateBaza (синглтон), хранит всё состояние игры.
Слой визуализации — скрипты, отвечающие за отображение доски, клеток, панелей и элементов интерфейса.
Логика ходов — управляет броском кубиков, перемещением и очередностью.
Вспомогательные компоненты — адаптация интерфейса, обработка кликов, пауза.
Управление имуществом — контроллеры и визуализация имущества игроков.
Торговля и сделки — покупка, продажа, активные продажи.
Взаимодействие строится на событиях, что обеспечивает слабую связанность и лёгкость расширения.
2. Описание скриптов (по архитектурным слоям)
🟢 Слой 0: Меню и запуск (Entry & Menu)
2.1 MainMenu
Роль: Пустой скрипт-заглушка для кнопок главного меню. Логика вынесена в инспектор или удалена.
Взаимодействие: Отвечает за запуск игры и выход из неё.
2.2 PauseMenu
Роль: Управляет паузой: приостанавливает время, показывает/скрывает панель, управляет курсором.
Взаимодействие: Влияет на Time.timeScale, управляет отображением панели паузы.
🔷 Слой 1: Ядро данных (Data Layer)
2.3 GameStateBaza
Роль: Центральное хранилище всех данных игры (синглтон).
Содержит:
Банк (bankMoney) с событием OnBankMoneyChanged.
Игрока и ботов (имена, деньги, статусы, позиции, раунды) с событиями на изменения.
Массив cells (24 клетки).
Список properties (данные о фабриках: статус, цены, владелец, activeSales, isUnderConstruction).
Список activeSaleList (записи о сделках).
Флаг isSaleActive с событием OnSaleActiveChanged.
Свойство propertyTurn с событием OnPropertyTurnChanged.
Списки имущества игроков и ботов (playerProperties, bot1Properties, bot2Properties).
Цвета статусов и названия статусов.
Взаимодействие: Все скрипты читают и изменяют данные через GameStateBaza.Instance.
🔷 Слой 2: Вспомогательные компоненты (Auxiliary)
2.4 VisualDice
Роль: Хранит ссылки на визуальные объекты кубиков, панелей (шанс, покупка, активная продажа), спрайты граней, мини-спрайты для кубиков, настройки анимации и времена отображения для каждого игрока.
Взаимодействие: Используется PlayerTurnStart и VisualPropertyCube2D.
2.5 PositionField
Роль: Позиционирует объекты на игровом поле (расстановка по кругу или прямоугольной сетке). Поддерживает автоматическое создание и расстановку 24 полей из префаба.
Взаимодействие: Применяется для начальной расстановки клеток и объектов на доске.
2.6 GridAnchor / GridAnchorTopCenter / GridAnchorTopLeft
Роль: Адаптируют положение объектов под экран: привязка к правому краю, центру с отступом сверху, левому верхнему углу.
Взаимодействие: Используются для адаптации интерфейса под разные разрешения экрана.
2.7 CellClickDisplay
Роль: Обрабатывает клик по клетке доски: отображает её номер и устанавливает флаг ActiveField в VisualTurn для выбранной клетки.
Взаимодействие: Управляет VisualTurn.SetActiveField.
2.8 ClickButtonActivator
Роль: По клику на объект с коллайдером активирует флаг playerTurnActive в VisualTurn на заданное время.
Взаимодействие: Влияет на VisualTurn.playerTurnActive.
🔷 Слой 3: Логика ходов (Turn Logic)
2.9 DiceController
Роль: Генерирует значения кубиков, управляет очередностью ходов.
Подписки: DiceVisual.OnTurnFinishedChanged → передача хода.
Взаимодействие: Устанавливает DiceVisual.PlayerTurn, читает diceMode из GameStateBaza.
2.10 DiceVisual
Роль: Хранит состояние хода (чей ход, завершён ли, достигнут ли финиш).
События: OnTurnChanged, OnTurnFinishedChanged, OnFinishedChanged.
Взаимодействие: Используется DiceController и PlayerTurnStart.
2.11 PlayerTurnStart
Роль: Обрабатывает ход игрока: получает результат броска, перемещает игрока по шагам, запускает мигание бордюров, обрабатывает шанс, активирует панель покупки.
Подписки: DiceVisual.OnTurnChanged (только для игрока).
Взаимодействие: Читает diceSum из DiceController, обновляет gameState.playerPosition, управляет visualTurn.SetBorderVisible, завершает ход через diceVisual.PlayerTurnFinished = true.
2.12 TurnController
Роль: Синхронизирует позиции игроков в GameStateBaza с флагами посещения в VisualTurn.
Взаимодействие: Читает позиции из GameStateBaza, устанавливает флаги через visualTurn.SetPlayerTurn, SetBot1Turn, SetBot2Turn.
🔷 Слой 4: Визуализация доски (Board Visualization)
2.13 VisualCell
Роль: Визуальный контроллер клетки на доске. Обновляет тексты, спрайты, иконку владельца и бордюр. При клике устанавливает VisualStart и activeCellIndex.
Подписки: VisualTurn.OnDataChanged, GameStateBaza.OnPropertyTurnChanged. Использует параллельный мониторинг Update() для принудительного обновления спрайта.
Взаимодействие: Использует VisualCellTexts для спрайтов и текстов, VisualTurn для бордюра, GameStateBaza для данных клетки.
2.14 VisualTurn
Роль: Хранит визуальное состояние доски: флаги посещения клеток игроками, видимость бордюров, активное поле, флаги buySellButton, playerTurnStop. Генерирует OnDataChanged при любых изменениях.
Взаимодействие: Используется VisualCell, PlayerTurnStart, TurnController, VisualTrade.
2.15 VisualCellTexts
Роль: Хранилище спрайтов и текстовых компонентов для всех 24 клеток, общих иконок (игрок, боты, банк, статусы 1–3) и иконок имущества игроков и ботов (по 12 блоков). Предоставляет методы доступа.
Взаимодействие: Используется всеми визуальными компонентами для получения спрайтов и текстов.
2.16 VisualBorderFactory
Роль: Компонент для отображения клетки на панелях покупки или активной продажи. Управляет спрайтами поля, бордюром фабрики, иконкой владельца, бордюром владельца, номером клетки, а также отображает деньги, статус и раунд владельца.
Подписки: GameStateBaza.OnActiveCellChanged, VisualTurn.OnDataChanged.
Взаимодействие: Использует VisualCellTexts для спрайтов, VisualTurn для видимости бордюра, GameStateBaza для данных владельца.
2.17 VisualPurchase
Роль: Отображает информацию о клетке на панели покупки (номер, иконка владельца, название, цена, статус стройки). Цена зависит от владельца клетки.
Подписки: GameStateBaza.OnActiveCellChanged.
Взаимодействие: Использует VisualCellTexts для иконок, GameStateBaza для данных клетки.
🔷 Слой 5: Управление имуществом (Property Management)
2.18 PropertyController
Роль: Контроллер имущества. При каждом изменении propertyTurn проверяет имущество игрока: если позиция совпадает и раунд больше на 1, активирует продажу (activeSales = true) и устанавливает isUnderConstruction = true. Удаляет записи о покупке и продаже.
Подписки: GameStateBaza.OnPropertyTurnChanged.
Взаимодействие: Читает и изменяет gameState.properties, gameState.playerProperties, управляет propertyTurn.
2.19 VisualProperty
Роль: Отображает имущество игроков и ботов в виде блоков. Группирует по статусам (1→2→3), сортирует по номеру клетки. Меняет спрайт в зависимости от isUnderConstruction (стойка/здание).
Подписки: GameStateBaza.OnPropertyTurnChanged.
Взаимодействие: Использует VisualCellTexts для спрайтов, GameStateBaza для данных.
2.20 VisualPropertyCube2D
Роль: Отображает кубики игроков и информацию о них (имя, счёт, статус, бордюр, иконка). При смене хода активирует кубики текущего игрока с задержкой. Цвет текста зависит от статуса игрока.
Подписки: DiceVisual.OnTurnChanged, GameStateBaza.OnPlayerMoneyChanged, OnPlayerStatusChanged, OnBot1MoneyChanged, OnBot1StatusChanged, OnBot2MoneyChanged, OnBot2StatusChanged.
Взаимодействие: Использует VisualDice для спрайтов кубиков, VisualCellTexts для иконок статусов.
🔷 Слой 6: Торговля и сделки (Trade & Sales)
2.21 VisualTrade
Роль: Управляет панелями торговли и покупки, кнопками «Купить», «Продать», «Отмена». Реализует логику покупки/продажи с изменением денег, записью в activeSaleList и playerProperties, активацией isSaleActive. Активность кнопок зависит от позиции игрока, владельца клетки и наличия записей о продаже.
Подписки: VisualTurn.OnBuySellButtonChanged, VisualTurn.OnDataChanged, GameStateBaza.OnActiveCellChanged.
Взаимодействие: Изменяет gameState.playerMoney, gameState.bankMoney, prop.owner, prop.activeSales, gameState.isSaleActive, gameState.propertyTurn, добавляет записи в activeSaleList и playerProperties.
2.22 VisualBuySell
Роль: Управляет видимостью панелей покупки и продажи. Учитывает позицию игрока, владельца клетки, activeSales, записи о продаже в имуществе игрока. Выводит информационные тексты, если панели неактивны.
Подписки: GameStateBaza.OnActiveCellChanged, GameStateBaza.OnPropertyTurnChanged.
Взаимодействие: Читает gameState.activeCellIndex, gameState.playerPosition, gameState.playerProperties, gameState.properties.
2.23 VisualActiveSale
Роль: Отображает панель с информацией о последней совершённой сделке. Появляется при isSaleActive = true, автоматически скрывается через задержку. При смене активной клетки закрывается принудительно.
Подписки: GameStateBaza.OnSaleActiveChanged, GameStateBaza.OnActiveCellChanged.
Взаимодействие: Использует activeSaleList для данных, VisualCellTexts для иконок покупателя.
3. Схема взаимодействия (ключевые потоки)
3.1 Ход игрока
text
DiceController → DiceVisual.PlayerTurn = true → PlayerTurnStart →
пошаговое перемещение, мигание, панель покупки →
PlayerTurnFinished = true → передача хода
3.2 Покупка/продажа
text
клик по кнопке в VisualTrade → проверка условий →
изменение данных в GameStateBaza →
запись в activeSaleList → isSaleActive = true →
VisualActiveSale показывает панель
3.3 Смена активной клетки
text
клик по клетке → VisualCell.OnMouseDown → activeCellIndex →
событие OnActiveCellChanged →
обновление всех панелей (VisualPurchase, VisualTrade, VisualBuySell, VisualActiveSale закрывается)
3.4 Обновление визуала доски
text
изменение позиций → TurnController →
обновление флагов в VisualTurn → OnDataChanged →
VisualCell и VisualBorderFactory обновляют бордюры и иконки
3.5 Имущество и стройка
text
изменение propertyTurn → PropertyController →
проверка записей в playerProperties →
активация activeSales и isUnderConstruction →
обновление спрайтов в VisualCell и VisualProperty
3.6 Видимость панелей покупки/продажи
text
изменение activeCellIndex или propertyTurn → VisualBuySell →
обновляет видимость панелей и текстовые подсказки
4. Заключение
Архитектура игры построена на чётком разделении ответственности и событийной модели, что позволяет легко добавлять новые функции и поддерживать существующий код. Все скрипты взаимодействуют через центральное хранилище GameStateBaza и события, что делает систему гибкой и масштабируемой. Компоненты сгруппированы по функциональным слоям: меню, ядро данных, вспомогательные компоненты, логика ходов, визуализация доски, управление имуществом и торговля. Это обеспечивает лёгкость понимания, модификации и расширения проекта.
мужик говорит, что паттерн Слушатель используют все

подтверждаю - эту фикню я само лично испытал потребность использовать - штука классная.