Executando verificação de segurança...
11

Projeto JOGO POKEMON (parte 4) Lógica inicial do combate finalizado, agora ajustar a IA para versão 1.0.0

Fala pessoal, venho aqui trazer a parte 4 do jogo pokémon. Em relação a tecnologia fiz uma pequena mudança para agilizar um pouco o desenvolvimento, a parte do CSS troquei pelo https://tailwindcss.com/ o resto segue como estava.

No tópico anterior eu havia terminado a listagem, agora ajustei a tela de selecionar pokémon e adicionei a busca por pokémon conforme gif abaixo:

selecao.gif

E também criei a lógica inicial do campo de batalha, onde tenho já as funções:

  • Atacar: Responsável por jogar o D20 e aplicar o Dano (seja em você ou na IA)
	atacar(jogador) {
	        let d20 = document.getElementById("d20")
	        let d20Valor = this.gerarNumeroRandomico(1, 20);
	        document.getElementById("d20-valor").innerHTML = "?";
	        d20.classList.add("d20")
	        setTimeout(() => {
	            document.getElementById("d20-valor").innerHTML = d20Valor;
	            d20.classList.remove("d20")
	            this.aplicarDano(d20Valor, jogador);
	        }, 2000)
	    }
  • Gerar Numero Randômico: Função simples para gerar números aleatórios dentro de um range
gerarNumeroRandomico(min, max) {
        return Math.floor(Math.random() * (max - min + 1) + min);
    }
  • Calculo Ataque: Função responsável por gerar o numero de dano que será causado.
calculoAtaque(d20Valor, ataque) {
        return Math.round((parseInt(d20Valor) + parseInt(ataque)) * 0.30)
    }

Hoje o calculo está simples pois foi implementado apenas a logica de dano inicial, mas futuramente será adicionado novas regras como:

  • o percentual de vantagem de acordo com o tipo.

  • o percentual de ataque se for um ataque critico.

  • (em uma versão 3.0) o valor do ataque baseado na habilidade selecionada

  • (em uma versão 3.0) o calculo de mana quando se utiliza um ataque de habilidade

  • Calculo Defesa: Função responsável por gerar a quantidade de defesa de quem sofrerá o dano.

calculoDefesa(defesa) {
        return Math.round(parseInt(defesa) * 0.10)
    }

Igual o calculo de ataque, será adicionado novas regras na defesa, como a possibilidade de jogar um D20 para defender e usar algum tipo de habilidade para defesa.

  • Finalizar Batalha: Vai chamar uma modal informando o fim do jogo. No momento está um alert mesmo
finalizarBatalha(nome) {
        alert(`O jogador ${nome} foi derrotado`);
    }

Aplicar Dano: A função responsável por causar o dano de acordo com o calculo de ataque e calculo de defesa. Pouco provável que essa função seja alterada, pois as regras foram separadas (Calculo Ataque e Calculo Defesa), então se for mexer em alguma função provável que seja nelas.

aplicarDano(d20Valor, jogador) {

        let pokemonAtaque = jogador == "jogador" ? this.pokemonPlayer : this.pokemonIA;
        let pokemonDefesa = jogador == "jogador" ? this.pokemonIA : this.pokemonPlayer;

        let dano = this.calculoAtaque(d20Valor, pokemonAtaque.ataque);
        let defesa = this.calculoDefesa(pokemonDefesa.defesa);
        let vida = pokemonDefesa.vida - (dano - defesa);
        pokemonDefesa.vida = vida;
        new ComponentePokemon().animacaoDano(jogador == "jogador" ? "IA" : "jogador", (vida * 100) / pokemonDefesa.vidaInicial);
        if (vida <= 0) {
            this.finalizarBatalha(pokemonDefesa.nome);
        }
        jogador == "jogador" ?
            localStorage.setItem("pokemonInimigo", JSON.stringify(pokemonDefesa))
            : localStorage.setItem("pokemonSelecionado", JSON.stringify(pokemonDefesa));
    }

Veja abaixo a gif da lógica já em funcionamento:

batalha.gif

Como o objetivo desse projeto era apenas mostrar que você pode pegar o que aprende em um curso (consumir a API do pokemon) e ir além, as informações fica no local storage (passivo de burlar a vida e vencer a partida). Claro que se fosse um jogo de verdade todas essa regras estariam em um backend

A próxima etapa vai ser:

  • dar vida a IA (para jogar sozinha)
  • adicionar o percentual de dano/defesa baseado no tipo.
  • Adicionar efeito de ataque (algum CSS dando o Dano)
  • Adicionar som ao girar o dado (irei analisar a complexidade acho que deve ser simples)
  • Adicionar som ao atacar (irei analisar a complexidade acho que deve ser simples)

Feito isso a versão 1.0.0 será encerrada.

Regras de ataque critico e jogar dado para se defender ficará para a versão 1.1.0

O modo campanha será feito mas não sei quando, pois terminando isso devo focar em um outro projeto por um tempo para depois voltar para o jogo pokémon.

O que quero mostrar aqui, principalmente para os iniciantes é que você pode pegar um conteúdo que todo curso passa (consumir API do pokémon), e criar algo diferente para treinar suas habilidades.

O desenvolvimento está em andamento então pode ter alguns bugs ainda (por exemplo quando finaliza a batalha tem que voltar a tela inicial), mas caso queira acessar o projeto em andamento segue o link - https://jogopokemon.netlify.app/

Até a próxima etapa.

Carregando publicação patrocinada...
4

Sensacional, puxou muito a nostalgia e a decepção dos jogos do pokemon hoje com informações e coisas mais elaboradas. Se eles tivesse um pingo do que você já fez nesse projeto. Está de parabens!!

2

Sensacional!
Adorei a ideia, se tiver como ajudar como um bom fã de pokemon eu adoraria poder ajudar nesse projeto e também conheço alguém que é "crakudo" em Pokemon que adoraria ajudar com o dano baseado em tipo kkk.

Muito bem estruturado o projeto e com certeza irei acompanhar as próximas etapas.

1

Eu estou avaliando a opção de ao terminar a primeira etapa e deixa-lo open source.

Mas primeiro quero acabar toda a etapa inicial, deixar a versão 1.0.0 funcional.

Depois disso documentar o que terá na versão 2.0.0 e com isso deixar o código aberto para qualquer pessoa ajudar.

1

Caramba que projeto bacana!

Fora o gif ja me conquistou de primeira rsrs muito bacana esse projeto em, eu só não entendi muito bem o escopo (desculpe só estou vendo essa "parte 4" pela primeira vez), no caso a ideia é criar um jogo de cartas de pokemon online estilo "javascriptzaum"?? Se for isso mesmo to achando bem bacana, nao me lembro nada parecido até agora! (quem não ama pokemon rs!)

Outra coisa, como vc fez esse menu de pesquisa/filtro? estava querendo implementar isso em um site meu mas eu buguei completamente 🥴💪!

2

Sobre o projeto recomendo que leia as partes anteriores (no final tem os links) mas vou resumir aqui.

Tem muita gente que reclama que faz cursos e não consegue vaga para júnior, diz que fez portifólio e tudo mais. Porém ao ver os portifólios são nada mais que cópias que os cursos online ensinam (criar cópia do layout do netflix, fazer uma pokedex, fazer uma copia do layout do instagram, etc.), Porém os recrutadores já conhecem tudo isso e sabem que tudo não passa de CTRL+C, CTRL+V dos cursos.

A intenção foi mostrar que é possível pegar o que aprendeu em um curso (nesse exemplo usei a pokedex), para criar algo além do que o curso ensina.

Então encima da pokedex, criarei um jogo simples do pokémon (não vai ser de carta), apenas um jogo que você seleciona um pokémon e na batalha você joga um dado D20 para atacar o inimigo, e de acordo com o tipo do pokémon o dano/defesa mudam.

Isso mostra que além de copiar a POKEDEX é possível ir além criando logica de seleção de item, lógica de cálculos (para dano e defesa).

Os recrutadores procuram pessoas para resolver problemas ou criarem algo “diferente”, não apenas copiar o que se aprende em um curso.

Esse projeto é pequeno, não tem nada demais, é mais uma demonstração que os novos desenvolvedores devem ir além de simplesmente replicar o que os cursos ensinam.

Sobre a filtro, tu já tem os dados em memória (na dom) é apenas filtrar ou tu fará uma nova request a um endpoint quando preencher o filtro?

1

Olá, primeiramente, parabens pela iniciativa! Achei sensasional a ideia de simular uma batalha. Percebi que a batalha continua mesmo apos um pokemom ter seu hp menor do que zero, seria interessante uma validação nesse ponto e uma mensagem de vitoria.

1