Bem-vindo à minha versão do clássico Tic Tac Toe! Eu criei um jogo de Tic Tac Toe usando React e SCSS, completando-o em cerca de 6 horas. O jogo apresenta um modo para um jogador contra o computador, um popup de anúncio do vencedor e contadores de vitórias para ambos os jogadores. Embora a grade seja personalizável para n x n
, a lógica atual de vitória 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 3 x 3
.
2. Ordem de Turno
- O Jogador A sempre começa e joga como X.
- O oponente computador joga como O e faz seu movimento 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 ganha 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. Desenhar
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 do Jogador A quanto do computador.
Recursos Implementados (MVP)
Aqui está o que está incluído nesta versão do jogo:
- Jogar contra o computador: Um modo divertido de 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 do jogador quanto do computador.
- Grade personalizável: Crie uma grade
n x n
(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/Tecnologia] Movimentos mais inteligentes do computador: Substitua movimentos aleatórios por um algoritmo para um jogo mais competitivo.
- [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 elegante: 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 visualizar 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 de observação interativa 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 possui um ouvinte de evento de clique, permitindo que o Jogador A (X) faça a primeira jogada.
- A vez do computador é simulada com uma lógica de seleção de célula aleatória, que precisará de aprimoramento para tamanhos de grade personalizados.
- Utilizado SCSS para estilização com foco em velocidade sobre complexidade durante o desenvolvimento.
Abordagem de Testes
Testes Manuais
- Assegurar que o computador faça uma jogada após o Jogador A terminar.
- Verificar se o jogo termina com um banner de anúncio de vencedor.
- Testar as jogadas automatizadas pelo computador.
Possíveis Testes Unitários
- Verificar se o computador faz jogadas após o Jogador A.
- Validar se o jogo exibe o vencedor correto.
- Testar casos extremos para 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 legais juntos!
Source:
https://dzone.com/articles/building-a-tic-tac-toe-game-using-react