[pitch] Damas Online - Um Jogo de Damas Online
Um nome estranho, mas único
O que é Damas Online?
É um projeto open source de um jogo de Damas online. A ideia era ser multiplataforma, mas por falta de tempo, só consegui fazer no mobile.
Tecnologias Usadas
Usado em Ambos
- TypeScript para tipagem (seria um inferno fazer um projeto desse tamanho sem ele).
- Socket.io para a comunicação em tempo real.
Frontend mobile:
Desenvolvido com React Native usando as seguintes libs:
- Expo Router para navegação (me arrependi de ter usado, foi uma piada de mau gosto ter tanta dor de cabeça só para definir uma rota que não fosse a primeira em ordem alfabética como a inicial).
- Unistyles 2.0 para temas de cores (mesmo só tendo criado um tema até agora).
- React Query para gerenciar estados relacionados a chamadas de rede.
- Axios para requisições (o interceptor facilitou muito a vida).
- Diversas outras libs do ecossistema Expo, incluindo o expo-updates para atualizações OTA.
Backend:
Desenvolvido com o framework NestJS junto ao banco de dados PostgreSQL, usando as seguintes libs:
- TypeORM como ORM (essa escolha foi para aprender algo novo, já que estava acostumado com Prisma).
- @nestjs/jwt para geração de tokens JWT.
- Bcrypt para gerar o hash da senha dos usuários.
- Jest e outros pacotes para os testes.
- Libs complementares do NestJS, como
class-validator
para os DTOs.
Funcionalidades
Já escrevi sobre esse tópico no README do backend e no mobile. Vou pegar alguns trechos de ambos:
Segurança
- Autenticação de Usuário: Permite autenticação via nome e senha, gerando um token JWT.
- Revalidação de Token: Garante a revalidação de tokens que expiraram.
- Autenticação OAuth2: Integração com provedores OAuth2 como Google, Discord e GitHub, permitindo que os usuários criem contas diretamente através desses serviços.
- Conexões WebSocket Protegidas: Implementa conexões WebSocket seguras usando tokens.
- Desconfiança com o Frontend: O backend utiliza o UUID diretamente do token para identificar o usuário, incluindo nas conexões WebSocket.
Demonstração de login normal e OATUH2
Usuário
- Cadastro de Usuário: Permite criar um novo usuário no sistema.
- Verificação de Usuário: verifica se o nome de usuário ou email já existe.
- Manipulação de Usuário: Rotas protegidas por token para obter, editar e excluir usuários.
Demonstração de edição de nome e logout
>
Jogo
-
Fila de Pareamento: Gerencia a fila de jogadores que desejam criar uma partida, organizando os pareamentos de forma automática.
-
Requisição de Caminhos Disponíveis: O frontend pode solicitar ao backend os caminhos que uma peça pode se mover, facilitando a exibição dos movimentos permitidos na interface.
-
Movimentação das Peças: As peças podem ser movidas ao longo do tabuleiro se o movimento for válido; quaisquer efeitos, como captura e promoção para dama, são feitos automaticamente.
-
Gerenciamento de Turnos: Controla a alternância de turnos entre os jogadores, garantindo que cada jogador realize sua jogada apenas na sua vez.
-
Ranking de Partidas: Implementa um sistema de classificação dos jogadores com base em suas performances em partidas anteriores, permitindo comparar habilidades e desempenho.
-
Histórico de Partidas: Os jogadores podem acessar um registro detalhado de todas as suas partidas jogadas anteriormente, incluindo resultados, datas e adversários.
-
Finalização de Partida Automática: A partida termina automaticamente quando um jogador fica sem peças no tabuleiro.
-
...O resto está no repositório do backend, incluindo as regras do jogo.
O HTML do lado esquerdo está no backend e é apenas para testes, por isso é simples.
Está Online!
Aproveitei esse projeto para também praticar CI/CD. O repositório mobile possui uma action que, a cada release, compila o projeto, anexa um APK ao release e também publica uma atualização OTA via EAS Update para aqueles que já têm instalada uma versão do DamasPaia com runtime compatível.
No backend, influenciado por um vídeo do Akita, fui aprender a mexer no Heroku. Aproveitarei o bônus de $312 que eles oferecem para estudantes e vou deixar online por um tempo. Se alguém tiver vontade de fazer o frontend web, dá até para compartilhar o mesmo backend, tornando o jogo verdadeiramente multiplataforma.
Convido vocês a testarem! Aqui está o link do APK: damas-paia_release
Lembrando que, para iniciar uma partida, outra pessoa também precisa estar na fila. Peça a um amigo para testar junto.
Um pouco sobre mim
Me chamo Leonardo, tenho 18 anos e estou finalizando o ensino médio. Recentemente, terminei o curso de Técnico em Informática para Internet de um IF. A partir daí, me dediquei ao projeto deste post.
Meus meios de contato estão disponíveis no meu GitHub: 6aleatorio6.
Fim
Esse post marca o fim de algo que comecei há 3 meses e é o meu último projeto para o portfólio. Espero que tenham gostado! Talvez um dia eu escreva mais sobre o desenvolvimento desse projeto, como:
- Meus traumas com o Expo Router
- Minha tentativa de fazer testes no frontend, para no final o MSW não ter suporte a socket.io
- Meus malabarismos com as tipagens no TypeScript
- As dezenas de horas gastas na validação de formulários (se alguém for olhar o código, pode me dizer se compensa transformar aquilo em uma lib?)
- Algumas funcionalidades que planejava implementar, mas acabei deixando de lado por falta de tempo e cansaço com o projeto.
Mas, para encerrar, aqui estão os repositórios do projeto:
Plataforma | Tecnologia | Status |
---|---|---|
Backend | NestJS | Finalizado |
Mobile | React Native | Finalizado |
Web | React | Não iniciado |