Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rafa-denlavor/shinobi-keyboard
[DONE] Minigame de digitação com diversas dificuldades e níveis.
https://github.com/rafa-denlavor/shinobi-keyboard
digitacao keyboard-game keyboard-test typing typing-game typing-practice typingspeedtest
Last synced: about 3 hours ago
JSON representation
[DONE] Minigame de digitação com diversas dificuldades e níveis.
- Host: GitHub
- URL: https://github.com/rafa-denlavor/shinobi-keyboard
- Owner: Rafa-Denlavor
- Created: 2024-06-11T00:43:53.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-11-16T19:36:01.000Z (about 2 months ago)
- Last Synced: 2024-11-16T20:25:25.575Z (about 2 months ago)
- Topics: digitacao, keyboard-game, keyboard-test, typing, typing-game, typing-practice, typingspeedtest
- Language: TypeScript
- Homepage: https://shinobi-keyboard.vercel.app
- Size: 7.04 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Shinobi Keyboard
Minigame de digitação.
## Lógica do Minigame:
1. Ao iniciar o jogo, uma sequência aleatória de teclas (por exemplo, letras de A a Z) deve ser gerada e exibida ao jogador.
2. O jogador deve pressionar as teclas na ordem correta dentro de um tempo limite.
3. Se o jogador pressionar a tecla correta, a próxima tecla da sequência deve ser destacada.
4. Se o jogador pressionar a tecla errada ou o tempo acabar, o jogo deve terminar e o jogador deve ser notificado.## Requisitos iniciais:
- A tela principal deve exibir a sequência atual de teclas que o jogador precisa pressionar.
- Um indicador de tempo deve mostrar quanto tempo resta para completar a sequência.
- Feedback visual para indicar se a tecla pressionada foi correta ou não.## Funcionalidade extras:
- Níveis de dificuldade
- Contagem regressiva antes de iniciar
- Pontuação
- Música e efeitos sonoros em boa parte da gameplay
- Botões para ativar e desativar música e os efeitos sonoros
- Animação simples ao acessar o minigame## Pontos técnicos:
- **Escolha do servidor de desenvolvimento:** Optei pelo Vite.js ao invés do Next.js, pois é um minigame simples que não precisa de funcionalidades muito complexas que utilizem contextos, provedores, técnicas avançadas de SEO, rotas dinâmicas, serveless, entre outras.
- **Tecnologia**: Utilizei Typescript para facilitar a leitura do código e o reconhecimento dos tipos das propriedades sem a necessidade de rodar o projeto. Outra alternativa seria a utilização da biblioteca Proptypes, no entanto, seria fácil esquecer de atualizar os tipos (já que não retorna um erro caso falte uma propriedade) e aquele código não seria mais confiável.
- **Framework:** Optei pelo React.js, pois o desafio pedia a tecnologia e até mesmo pela reutilização de componentes, no entanto, poderia ser adaptado para utilizar HTML, CSS e Javascript sem grandes problemas por ser um projeto simples.
- **Nomenclatura de arquivos**: Após criar uma pasta de componente ou view, adotei deixar o nome do arquivo principal como `index`, pois qualquer dev que bata o olho reconhece o significado, porém o arquivo de estilo terá o mesmo nome que a pasta principal, pois dessa forma é possível realizar a busca na IDE e facilmente encontrar a pasta que você quer. Para o hook, após o `use` também adiciono o nome da pasta, algo mais genérico, para que seja possível englobar qualquer lógica referente aquele contexto. Cê o arquivo ficar muito grande e com muitas responsabilidades, é só criar uma pasta `helpers` na pasta principal e adicionar as lógicas necessárias.
- **Enum:** Enums são valiosos quando um dado pode ter muitos valores diferentes e é necessário reutilizar esses valores em outros lugares do projeto.
- **Versões do node e npm**: No `package.json` é possível identificar quais `versões do Node e do npm` são aceitas pra rodar o projeto. Dessa forma, evitamos problemas na instalação de dependências e a informação não é centralizado somente em uma pessoa.
- **Pastas**: Depois de diversas experiências com estrutura de pastas em projetos pequenos, médios e grandes achei algo que me agrade e que faz sentido.
- /components: Componentes no geral, independente se for pequeno ou grande.
- /helpers: Funções reutilizáveis com lógicas isoladas.
- /styles: Armazena estilos globais ou reutilizáveis.
- /view: Utilizada para criar o componente pai das páginas. Normalmente é formada por diversos componentes e tem um hook customizado.
- /page: Para ficar claro quais são as páginas existentes e dentro de cada um apenas chamamos o componente pai (vulgo pasta view).
- /__tests__: Pasta principal com subpastas para testes unitários e e2e.