O projeto consiste em batalhas entre times de Pokémons, onde cada usuário pode criar um time e batalhar contra outros jogadores. Cada usuário precisa obter seus próprios pokémons, através de um endpoint cuja interação é limitada por tempo.
Os dados dos Pokémons foram obtidos pela PokéAPI.
Veja abaixo uma simples explicação dos principais endpoints, e na próxima seção a descrição detalhada de cada um.
A funcionalidade da API é simples: um usuário pode se registrar através do endpoint /users/register
. Seu nome de usuário pode ser usado para obter novos pokémons, ou para outras pessoas interagirem com seu perfil e batalharem contra você.
Para obter um pokémon use /pokemons/<NOME DE USUÁRIO>
, e para visualizá-los use /users/<NOME DE USUÁRIO>
. Você só pode obter um pokémon a cada 2 minutos. Cada conta ganha 5 pokémons aleatórios quando é criada. Um time poderá ser formado usando três pokémons diferentes, através do endpoint /users/<NOME DE USUÁRIO>/team
.
Para visualizar o perfil público de alguém, use /users/<NOME DE USUÁRIO>
, onde poderá ver seu time atual e sua lista de pokémons. Para iniciar uma batalha entre dois jogadores, use /battle/<NOME DE USUÁRIO>/<NOME DO OUTRO USUÁRIO>
.
- Criação de usuário
- Ver perfil de usuário
- Obter novo pokémon
- Alterar time de pokémons
- Batalhar contra um usuário
Cria um novo usuário.
- Nome de usuário:
"username": "<nome>"
onde nome é formado apenas por letras minúsculas, sem acentos ou espaços, e com tamanho máximo de 20 caracteres.
POST <URL>/users/register
{
"username": "aloneinabyss"
}
STATUS CODE: 201
{
"username": "aloneinabyss",
"pokemons": [
{
"id": 54,
"name": "psyduck",
"attributes": {
"hp": 50,
"attack": 52,
"defense": 48
}
},
...
]
}
Retorna as informações de um usuário.
GET <URL>/users/aloneinabyss
STATUS CODE: 200
{
"username": "aloneinabyss",
"pokemons": [
{
"id": 54,
"name": "psyduck",
"attributes": {
"hp": 50,
"attack": 52,
"defense": 48
}
},
...
],
"team": {
"slotOne": {
"id": 112,
"name": "rhydon",
"attributes": {
"hp": 105,
"attack": 130,
"defense": 120
}
},
"slotTwo": {
...
},
"slotThree": {
...
}
}
}
Usado para obter um novo pokémon aleatório. Só pode ser chamado a cada 2 minutos por cada usuário.
GET <URL>/pokemons/aloneinabyss
STATUS CODE: 200
{
"id": 116,
"name": "horsea",
"attributes": {
"hp": 30,
"attack": 40,
"defense": 70
}
}
Define qual time de pokémons será usado em batalhas com seu usuário. Um time deve ter obrigatóriamente três pokémons.
- Time:
"team": { "first": "<id | nome>", "second": "<id | nome>", "third": "<id | nome>" }
onde é possível passar o id ou o nome do pokémon desejado para cada posição do time. Só serão aceitos pokémons que o usuário possuir em sua conta. Não é possível usar o mesmo pokémon em mais de um slot.
PUT <URL>/users/aloneinabyss/team
{
"first": "rhydon",
"second": "nidorina",
"third": "116"
}
STATUS CODE: 201
{
"slotOne": {
"id": 112,
"name": "rhydon",
"attributes": {
"hp": 105,
"attack": 130,
"defense": 120
}
},
"slotTwo": {
...
},
"slotThree": {
...
}
}
Inicia uma batalha entre dois usuários diferentes. A batalha será realizada entre os times de pokémons de cada usuário. Consiste nas seguintes etapas: cada time possui três slots de pokémons, primeiro os dois pokémons no primeiro slot de cada time são escolhidos para batalhar entre si, então um dos possíveis atributos (hp, attack ou defense) é sorteado para ser o critério de decisão do vencedor do round, em seguida o mesmo acontece com os pokémons do segundo slot, e por fim do terceiro slot. O jogador com mais número de rounds vencidos ganha a batalha.
GET <URL>/battle/aloneinabyss/devilady
STATUS CODE: 200
{
"winner": "playerTwo",
"battle": [
{
"winner": "playerTwo",
"criteria": "DEFENSE",
"playerOne": {
"id": 106,
"name": "hitmonlee",
"attributes": {
"hp": 50,
"attack": 120,
"defense": 53
}
},
"playerTwo": {
"id": 117,
"name": "seadra",
"attributes": {
"hp": 55,
"attack": 65,
"defense": 95
}
}
},
...
]
}
Planejadas:
- Documentação inicial
- Diagrama de classes
- Template para usar no Insomnia
- Endpoints relacionados aos usuários
- Endpoints relacionados aos pokémons
- Endpoints relacionados às batalhas
- Interface do Swagger
- Hospedar o projeto em nuvem
Desejadas:
- Interface gráfica
- Conquistas para completar
- Histórico de batalhas
- Recompensas por vencer batalhas
- Ranking de jogadores
- Habilidades especiais para cada tipo de pokémon
- Imagem dos pokémons
- Imagem de perfil
Veja aqui o histórico de versões do projeto
Só estão disponíveis os pokémons da primeira geração. O projeto é compatível com Java na versão 11 ou superior.
Esta é uma REST API desenvolvida durante o curso de Java da Let's Code.