the-game-domain
v1.2.120
Published
Complete domain layer for 'The Game' card game with rich business entities, automatic persistence, action tracking, and advanced game mechanics. Features Game, Player, Card, Deck, Pile entities with repository pattern, turn management, victory/defeat dete
Downloads
11
Maintainers
Readme
🎯 Domínio - The Game
Pacote de domínio do jogo "The Game" contendo toda a lógica de negócio e regras do jogo.
📋 Sobre
Este pacote contém as entidades de domínio, regras de negócio e lógica central do jogo "The Game", seguindo os princípios de Domain-Driven Design (DDD). É uma biblioteca TypeScript independente que pode ser usada em qualquer projeto que precise implementar as regras deste jogo de cartas.
🚀 Tecnologias
- TypeScript - Tipagem estática
- Jest - Testes unitários
- Domain-Driven Design - Arquitetura de domínio
- Clean Architecture - Separação de responsabilidades
📁 Estrutura
src/
├── entities/ # Entidades de domínio
│ ├── Card.ts # Entidade Carta
│ ├── Deck.ts # Entidade Baralho
│ ├── Game.ts # Entidade Jogo
│ ├── GameAction.ts # Entidade Ação
│ ├── Pile.ts # Entidade Pilha
│ └── Player.ts # Entidade Jogador
├── repositories/ # Interfaces de repositório
├── utils/ # Utilitários
└── value-objects/ # Objetos de valor
docs/ # 📚 Documentação🚀 Quick Start
Pré-requisitos
- Node.js 18+
- npm ou yarn
- Git
Instalação
Clone o repositório
git clone https://github.com/rtsarakaki/the-game-domain.git cd the-game-domainConfigure o .npmrc localmente
npm run setup:npmrcInstale as dependências
npm installExecute os testes
npm test
Para Usuários
# Instalar o pacote
npm install the-game-domain
# Usar no seu código
import { Game } from 'the-game-domain'
const game = new Game(2) // 2 jogadoresPara Desenvolvedores
# Instalar dependências
npm install
# Testes
npm test
npm test:watch
# Build
npm build
# Lint
npm lint📋 Próximos Passos
- 📖 Leia a Documentação Completa para entender os conceitos
- 🎮 Comece com a Entidade Game - a principal do sistema
- 🃏 Explore as Entidades para entender cada componente
- 📦 Configure Publicação Local se quiser testar
- ⚠️ Importante: Precisa rodar o Verdaccio primeiro (veja 🐳 Verdaccio Docker)
📚 Documentação
🚀 Primeiros Passos
- 📖 Documentação Completa - Visão geral e conceitos
- 🐳 Verdaccio Docker - Configuração do registry local (obrigatório para publicação)
- 📦 Publicação Local - Como instalar e publicar localmente
🎯 Entidades de Negócio
- 🎮 Jogo - Entidade principal (comece aqui!)
- 🃏 Cartas - Entidade Card (validação de valores 1-100)
- 🎴 Baralho - Entidade Deck (gestão de cartas 2-99)
- 👤 Jogador - Entidade Player (gestão de mão e turnos)
- 📚 Pilha - Entidade Pile (regras de descarte)
⚙️ Recursos Avançados
- 🗄️ Repository System - Sistema de persistência in-memory
- 🚀 GitHub Actions - Publicação automática no npm público
- 🔢 Versionamento Automático - Semantic versioning automático
- 📦 NPM Registry Inteligente - Fallback automático entre Verdaccio e npm público
🎯 Entidades
Core Entities
Game- Estado do jogo e regras principaisPlayer- Jogador e suas cartasCard- Carta individualDeck- Baralho de cartasPile- Pilhas do jogo (crescente/decrescente)
Supporting Entities
GameAction- Histórico de ações do jogo
🎮 Regras do Jogo
Objetivo
Descartar todas as cartas antes dos outros jogadores.
Mecânicas
- Cada jogador recebe 6 cartas
- Cartas devem ser jogadas em ordem crescente ou decrescente
- Diferença de 10 é permitida entre cartas
- Jogador deve jogar pelo menos 1 carta por turno
- Vitória: descartar todas as cartas
- Derrota: não conseguir jogar cartas obrigatórias
🧪 Testes
O domínio possui cobertura completa de testes para garantir a integridade das regras de negócio:
# Executar todos os testes
npm test
# Testes em modo watch
npm test:watch
# Cobertura de testes
npm run test:coverage📦 Uso
import { Game, Player, Card } from 'the-game-domain'
// Criar um novo jogo
const game = new Game(['Jogador 1', 'Jogador 2'])
// Jogar uma carta
game.moveCardToPile(playerId, cardId, pileId)
// Verificar estado
console.log(game.isFinished)
console.log(game.currentPlayerId)