Bem-vindo à minha versão do clássico Jogo da Velha! Eu criei um jogo da Velha usando React e SCSS, completando-o em cerca de 6 horas. O jogo possui modo para um jogador contra o computador, um popup de anúncio de vencedor e contadores de vitórias para ambos os jogadores. Embora a grade seja personalizável para n x n
, a lógica de vitória atual suporta apenas 3 x 3
. Melhorias futuras incluem movimentos mais inteligentes do computador e funcionalidade multiplayer em tempo real.
Visão Geral
- Tempo total de desenvolvimento necessário: ~6 horas
- Tecnologias utilizadas: JavaScript (React) + SCSS
Regras do Jogo
1. Objetivo
O objetivo do jogo é alinhar três de seus símbolos (X ou O) em uma linha horizontal, vertical ou diagonal em uma grade de 3 x 3
.
2. Ordem de Jogadas
- O Jogador A sempre começa e joga como X.
- O oponente computador joga como O e faz sua jogada imediatamente após o Jogador A.
3. Jogabilidade
- Os jogadores se revezam marcando células vazias na grade.
- O primeiro jogador a alinhar três símbolos vence o jogo.
4. Condições de Vitória
Um jogador vence se conseguir:
- Três símbolos em uma linha horizontal
- Três símbolos em uma coluna vertical, ou
- Três símbolos em uma linha diagonal
5. Desenhe
Se todas as células estiverem preenchidas e nenhum jogador atender às condições de vitória, o jogo termina em um empate.
6. Acompanhamento de Pontuação
Contadores de vitórias mantêm o controle do número total de vitórias tanto para o Jogador A quanto para o computador.
Recursos Implementados (MVP)
Aqui está o que está incluído nesta versão do jogo:
- Jogar contra o computador: Um modo divertido para um jogador onde você enfrenta o computador
- Popup de anúncio do vencedor: No final de cada jogo, um popup revela o vencedor.
- Contadores de vitórias: Acompanhe as vitórias totais tanto para o jogador quanto para o computador.
- Grade personalizável: Crie uma
n x n
grade (embora a lógica de vitória atualmente suporte apenas3 x 3
).
Possíveis Melhorias
Olhando para o futuro, aqui estão algumas áreas para melhoria:
- [UX] Armazenamento local para pontuações: Salve as pontuações do jogo localmente para que persistam após atualizar o navegador.
- [UX/Tec] Movimentos mais inteligentes do computador: Substitua movimentos aleatórios por um algoritmo para uma jogabilidade mais competitiva.
- [UX] Multiplayer em tempo real: Permitir que dois jogadores compitam em tempo real usando tecnologias como Socket.io.
- [Tech] Organização avançada de SCSS: Refatorar SCSS usando mixins, variáveis e melhores técnicas de estruturação.
- [UX/Tech] Degradação graciosa: Garantir compatibilidade com navegadores não modernos para um suporte mais amplo.
Configuração e Desenvolvimento
Pré-requisitos
Antes de começar, certifique-se de ter Node.js instalado (versão recomendada: 6.4.1
).
Começando
-
Clone o repositório do GitHub.
2. Instale as dependências:
npm install
3. Inicie o servidor de desenvolvimento:
npm start
- Abra http://localhost:3000 no seu navegador para ver o aplicativo.
4. (Opcional) Construa o projeto para produção:
npm run build
Isso cria uma pasta build
otimizada, pronta para implantação.
Testes
Execute testes em modo interativo de observação com:
npm test
Detalhes Técnicos
Estrutura de Arquivos
O projeto segue a estrutura padrão do Create React App com uma abordagem modular baseada em componentes.
src
├── index.js
├── App.css
├── App.js
├── Components
│ └── Board
│ ├── Board.scss
│ ├── Cross.jsx
│ ├── ScoreBoard.jsx
│ ├── index.jsx
│ ├── Round.jsx
│ └── Footer
│ ├── Footer.scss
│ ├── index.jsx
│ └── Header
│ ├── Header.scss
│ ├── index.jsx
├── utils
│ └── lib.js
public
├── index.html
Descrição e Abordagem
- O aplicativo foi inicializado com o Create React App para uma configuração rápida do MVP.
- O jogo inicializa uma grade
n x n
para o gameplay. - Cada célula tem um ouvinte de evento de clique, permitindo que o Jogador A (X) faça a primeira jogada.
- A jogada do computador é simulada com uma lógica de seleção de célula aleatória, que precisará de aprimoramento para tamanhos de grade personalizados.
- Usado SCSS para estilização com foco na velocidade em detrimento da complexidade durante o desenvolvimento.
Abordagem de Testes
Testes Manuais
- Garantir que o computador faça uma jogada após o término do Jogador A.
- Verificar se o jogo termina com um banner de anúncio do vencedor.
- Testar as jogadas automatizadas do computador.
Possíveis Testes Unitários
- Verificar se o computador faz jogadas após o Jogador A.
- Validar se o jogo exibe o vencedor corretamente.
- Testar casos extremos para a inicialização da grade e interações do usuário.
Conclusão
Obrigado por explorar meu projeto!
Você pode encontrar o código fonte completo e contribuir para este projeto no GitHub. Vamos construir coisas incríveis juntos!
Source:
https://dzone.com/articles/building-a-tic-tac-toe-game-using-react