Что это: модуль для игральных карт: MVP (Model, View, Presenter), компоненты колоды/руки/доски, покер, дурак, пьяница. Скрипты в Scripts/Cards/.
Навигация: ← К Docs · оглавление — раздел «Документация компонентов» ниже
- Гибкая архитектура MVP — Model, View, Presenter
- Компоненты — настройка в инспекторе и UnityEvent
- Типы колод — 36, 52, 54 карты
- Сравнение карт — по рангу, с учётом козыря
- Покерные комбинации — от пары до роял-флеша
- Анимации — переворот, перемещение через DOTween + UniTask
- Раскладки руки — веер, линия, стопка, сетка
- ПКМ в Project → Create → Neoxider → Cards → Deck Config
- Выберите тип колоды (36/52/54)
- Назначьте спрайты для каждой масти (от младшей к старшей)
- Укажите спрайт рубашки
Hierarchy:
├── Deck (DeckComponent)
├── PlayerHand (HandComponent)
├── OpponentHand (HandComponent)
└── Board (BoardComponent) // опционально
// Инициализация колоды
deckComponent.Initialize();
// Раздача карт
for (int i = 0; i < 6; i++)
{
CardComponent card = deckComponent.DrawCard();
await playerHand.AddCardAsync(card);
}
// Проверка: можно ли побить карту
Suit? trump = deckComponent.TrumpSuit;
var validCards = playerHand.GetCardsThatCanBeat(attackCard.Data, trump);| Папка | Описание |
|---|---|
Core/Enums |
Suit, Rank, DeckType |
Core/Data |
CardData — неизменяемая структура карты |
Model |
DeckModel, HandModel — логика без визуала |
View |
CardView, CardViewUniversal, DeckView, HandView, CardViewAnimationTemplates — визуализация и анимации |
Presenter |
Связь Model ↔ View |
Components |
No-code обёртки для инспектора |
Config |
DeckConfig, CardLayoutSettings, CardAnimationConfig |
Poker |
Покерные комбинации и правила |
Utils |
CardComparer, CardLayoutCalculator — сортировка и раскладки |
В любых карточных играх (классика, CCG, deckbuilder) удобно переиспользовать:
- CardViewAnimationTemplates — готовые анимации (Bounce, Pulse, Shake, Highlight, FlyIn, Idle); вызывать из любой вью по CardViewUniversal.
- CardLayoutCalculator и CardLayoutSettings — расчёт позиций и поворотов для Fan, Line, Grid, Stack и др.
- HandView / IHandView — контейнер карт с раскладкой; для нескольких зон — несколько HandView.
- MoveToAsync / FlipAsync — перемещение и переворот, не привязаны к типу данных.
Подробнее: Interfaces и CustomCardViewGuide (игры с собственной моделью карты).
- CardData — структура данных карты
- DeckConfig — конфигурация колоды
- CardComponent — компонент карты
- DeckComponent — компонент колоды
- HandComponent — компонент руки
- BoardComponent — компонент доски
- Интерфейсы и переиспользование: Interfaces — ICardView, ICardDisplayMode, ICardViewAnimations; что переиспользовать в разных карточных играх
- View (MVP): CardView, CardViewUniversal, DeckView, HandView
- Custom Card View Guide — пошаговая своя реализация карты
- Poker — покерные правила
| Игра | Компонент | Описание |
|---|---|---|
| Пьяница | DrunkardGame |
Классическая карточная игра (War Card Game) |
// Игра настраивается через инспектор и UnityEvent.
// Просто подключите UnityEvent к UI элементам:
// OnPlayerCardCountChanged (int) → TMP_Text.SetText
// OnOpponentCardCountChanged (int) → TMP_Text.SetText
// OnPlayerWin → WinPanel.SetActive(true)
// OnOpponentWin → LosePanel.SetActive(true)
// Для хода игрока — Button.OnClick → DrunkardGame.Play
// Для рестарта — Button.OnClick → DrunkardGame.RestartGameif (card1 > card2)
Debug.Log("Первая карта старше");
// Или через CompareTo
int result = card1.CompareTo(card2);Suit trump = Suit.Hearts;
// Проверка: бьёт ли карта другую
if (defendCard.Beats(attackCard, trump))
Debug.Log("Карта побита");
// Или через CanCover (алиас)
if (defendCard.CanCover(attackCard, trump))
Debug.Log("Можно покрыть");- Козырь всегда бьёт не-козырь
- Не-козырь не может побить козырь
- При одинаковой масти — сравнение по рангу
- Разные масти без козыря — не бьёт
handComponent.LayoutType = CardLayoutType.Fan; // Веер
handComponent.LayoutType = CardLayoutType.Line; // Линия
handComponent.LayoutType = CardLayoutType.Stack; // Стопка
handComponent.LayoutType = CardLayoutType.Grid; // Сетка
boardComponent.LayoutType = CardLayoutType.Slots; // Фиксированные слоты
boardComponent.LayoutType = CardLayoutType.Scattered;// Случайный разбросusing Neo.Cards.Poker;
// Оценка руки (5-7 карт)
var result = PokerHandEvaluator.Evaluate(cards);
Debug.Log(result.Combination); // Pair, Flush, FullHouse...
// Texas Hold'em
var winners = PokerRules.GetWinnersTexasHoldem(
communityCards, // 5 карт на столе
playerHoleCards // по 2 карты у каждого игрока
);Подробнее: Poker/README.md
- UniTask — асинхронные операции
- DOTween — анимации
- Tools/Spawner — спавн объектов
- Save — сохранение состояния игры