Teste de Laravel 8 - Arandu Tech
- Pré requisitos: PHP >= 7.3 e extensões exigidas pelo Laravel.
- Clone o repositório em uma pasta
- Instale as dependências e compile o JavaScript
composer install
npm install
npm run dev
- Copie o arquivo
.env.example
com o nome.env
, na raiz do diretório. - Configure a chave da aplicação laravel
php artisan key:generate
Utilize o comando php artisan serve
ou crie um Host Virtual (Xampp, docker...) e acesse a URL da aplicação.
A página da web apresentará um 'tabuleiro', com um quadrado vermelho (jogador) e vários quadrados azuis (inimigos).
Usando as setas do teclado é possível mover o jogador. Sempre que o jogador se move todos os inimigos podem ou não se mover em alguma direação aleatória.
-
resources/views
game.blade.php
é o arquivo responsável pela visualização do tabuleirogameover.blade.php
é uma visualização de tela de fim de jogo
-
app/Models
Player
model que representa o jogadorEnemy
model que representa o inimigo
-
app/Http/Controllers
GameController
controller principal que executa a mecânica do jogo
-
app/Constants
Map
contém definições do tabuleiro do jogo
-
app/Contracts
GameObject
classe base que representa um objeto a ser renderizado no jogo. Os modelsPlayer
eEnemy
estendem esta classe.
-
O uso de 'números mágicos' no código pode se tornar um grande problema no longo prazo. No projeto, algumas constantes foram criadas para evitar isso, na classe
\App\Constants\Map
. Porém, podemos observar que os identificadores de tecla pressionada ('ArrowUp', 'ArrowDown', 'ArrowLeft' e 'ArrowRight') estão escritos direto no código de execução. Crie um arquivo de constantes\App\Constants\Movement
, com 4 constantes representando cada direção e referencie essas constantes no código executado onde houver referência a tais valores. -
Adicione uma regra onde o jogador irá ganhar 10 pontos a cada passo dado.
-
Adicione uma mecânica de jogo que evite que o jogador ou inimgo saiam dos limites do tabuleiro. Escolha entre um dos dois: 'colidir' com as paredes, impedindo o movimento na direção do fim do tabuleiro OU 'teletransporte' para o outro lado da tela (ex: ao sair pela direita, aparece na mesma linha, na casa da esquerda).
-
Adicione a mecânica de 'game-over', que deve ser acionada se, após a movimentação do jogador e dos inmigos, o jogador estiver na mesma casa que um inimigo. Dicas: os models que tem como base o
GameObject
possuem o métodoisCollidingWith($object)
, que retornatrue
caso o objeto passado como argumento esteja na mesma casa. Para acionar o game-over, utilizar umredirect
para a named viewgameover
. -
EXTRA - Crie um novo
GameObject
para representar a moeda. O tabuleiro terá uma moeda por vez, que será colocada em uma posição aleatória. O jogador, ao colidir com a moeda, ganhará 1.000 pontos, e a moeda será colocada em uma outra casa aleatória do tabuleiro.