Servidor WebSocket para jogo multiplayer de Pedra, Papel e Tesoura. Gerencia conexões de jogadores, recebe escolhas e determina vencedores em tempo real.
- Aceita conexões WebSocket de jogadores
- Aguarda até que 2 jogadores se conectem
- Recebe escolhas dos jogadores (pedra, papel ou tesoura)
- Calcula o resultado da partida
- Envia resultado para ambos os jogadores
- Reinicia jogo automaticamente após cada rodada
- Java 21
- Spring Boot 3.5.7
- Spring WebSocket
- Maven 3.6+
Software necessário:
- Java 21 ou superior
- Maven 3.6 ou superior
Opcional:
- Cliente frontend (Angular, React, ou qualquer que suporte WebSocket)
1. Jogador 1 conecta → Recebe: "Aguardando outro jogador..."
2. Jogador 2 conecta → Ambos recebem: "Jogadores conectados!"
3. Jogador 1 envia: "pedra"
4. Jogador 2 envia: "tesoura"
5. Ambos recebem: "Jogador 1 venceu! (pedra vence tesoura)"
6. Sessões encerradas (jogo reinicia)
- Pedra vence Tesoura
- Tesoura vence Papel
- Papel vence Pedra
- Escolhas iguais resultam em empate
src/
└── main/
└── java/
└── br/com/sistema/
├── config/
│ ├── GameSocketHandler.java # Lógica do jogo
│ └── WebSocketConfig.java # Configuração WebSocket
└── ProjetoWebsocketApplication.java
Gerencia toda lógica do jogo:
afterConnectionEstablished(): Adiciona jogador à listahandleTextMessage(): Processa escolhasafterConnectionClosed(): Remove jogador desconectadogetResult(): Calcula vencedor
Configura endpoint WebSocket:
- Endpoint:
/game - Permite todas as origens (CORS:
*)
Edite src/main/resources/application.properties:
server.port=8080Por padrão, aceita conexões de qualquer origem (*).
Para restringir, edite WebSocketConfig.java:
.setAllowedOrigins("http://localhost:4200")- Aceita apenas 2 jogadores por vez
- Sessões são encerradas após cada partida
- Não mantém histórico de jogos
- Não identifica jogadores (sem autenticação)
- Não persiste dados em banco
- Adicionar salas de jogo (múltiplas partidas simultâneas)
- Implementar sistema de placar por sessão
- Criar modo melhor de 3 rodadas (best of 3)
- Adicionar modo melhor de 5 rodadas (best of 5)
- Implementar timeout para jogadas (15-30 segundos)
- Adicionar modo espectador
- Criar ranking global de jogadores
- Implementar sistema de conquistas/badges
- Adicionar modo torneio (eliminatórias)
- Criar variação do jogo (Pedra, Papel, Tesoura, Lagarto, Spock)
- Adicionar autenticação de jogadores
- Criar sistema de registro/login
- Implementar perfis de usuários
- Adicionar avatares personalizáveis
- Criar sistema de amigos
- Implementar chat entre jogadores
- Adicionar histórico pessoal de partidas
- Persistir histórico de partidas em banco
- Salvar estatísticas de jogadores
- Criar relatórios de desempenho
- Implementar cache Redis para sessões
- Adicionar backup automático de dados
- Criar API REST para consulta de dados históricos
- Criar dashboard administrativo
- Adicionar painel de estatísticas em tempo real
- Implementar notificações push
- Criar sistema de convites para partidas
- Adicionar sons e efeitos visuais (via mensagens)
- Implementar tema escuro/claro
- Adicionar testes unitários (JUnit)
- Criar testes de integração
- Implementar testes de carga
- Adicionar cobertura de código (JaCoCo)
- Criar documentação Swagger/OpenAPI
- Implementar monitoramento com Actuator
- Adicionar logs estruturados (Logback)
- Dockerizar a aplicação
- Criar docker-compose para ambiente completo
- Implementar CI/CD (GitHub Actions)
- Adicionar health check endpoint
- Configurar balanceamento de carga
- Implementar failover automático
- Implementar rate limiting por IP
- Adicionar proteção contra DDoS
- Criar sistema de ban/kick de jogadores
- Implementar validação de entrada rigorosa
- Adicionar logs de auditoria
- Configurar CSP (Content Security Policy)
- Implementar reconexão automática de clientes
- Adicionar recuperação de estado após queda
- Criar sistema de heartbeat/ping-pong
- Implementar fila de espera para jogadores
- Adicionar modo offline (contra IA)
Este backend foi projetado para funcionar com o frontend Angular disponível em: Pedra, Papel e Tesoura Online
Para conectar:
- Execute este backend na porta 8080
- Execute o frontend na porta 4200
- O frontend conectará automaticamente
- WebSocket mantém conexão persistente (diferente de HTTP)
- Servidor reinicia jogo após cada partida
- Escolhas devem ser em minúsculas (
pedra, nãoPEDRA) - Mensagens de resultado usam
\npara quebras de linha - CORS está configurado para aceitar qualquer origem (apenas para desenvolvimento)