1
resposta

Não consegui fazer o Jokenpo

Não consegui fazer com que o bot contasse o placar e desse um campeão pra disputa, como eu poderia fazer isso?

Link do projeto: https://github.com/duquexote/dart_async

Ta na pasta bin/questions/jokenpo.dart

1 resposta

Olá, Guilherme! Tudo bem?

Primeiro te peço desculpas pela demora em responder.

O que está acontecendo no seu código, é que a contagem do placar está sendo zerada todas as vezes que você instancia a sua classe:

Jokenpo(usuario).playJokenpo();

Toda vez que o usuário digita pedra, papel, tesoura ou jokenpo, a classe é instanciada e os valores de vitoriaBot e vitoriaUser são definidos como 0 novamente.

Para mudar isso, basta usar o conceito de static, pois assim essas variáveis não vão depender da instância para ter seu valor alterado. Veja:

class Jokenpo {
  String question;
  String duqueBot = 'DuqueBOT:\n';
  bool isJokenpo = false;

// variáveis estáticas da classe
  static int vitoriaBot = 0;
  static int vitoriaUser = 0;

  //...
  }

Repare também que coloquei elas fora do escopo da função playJokenpo mas ainda dentro da classe Jokenpo.

Isso basta para que a contagem funcione! Mas vi outros detalhes no seu código que pode melhorar:

  1. Talvez seja melhor fazer o incremento de vitoriaBot e vitoriaUser antes do print e não depois. Pois incrementando antes do print já fica o valor atualizado no placar:

Exemplo com apenas 1 dos ifs (precisa fazer isso para todos):

    if (choiceUser == 3 && choiceBot == 2 && choiceUser > choiceBot) {
    // incremento antes da mensagem:
      vitoriaUser++;
      print(duqueBot + 'Você ganhou essa rodada! PLACAR:  $vitoriaUser X $vitoriaBot');
    }
  1. Incluir uma condição para quando usuário e BOT escolhem o mesmo valor (pedra e pedra, por exemplo):
    if (choiceBot == choiceUser) {
    // você escolhe se incrementa de ambos ou de nenhum:
      // vitoriaBot++;
      // vitoriaUser++;
      print("Empate!     PLACAR:  $vitoriaUser X $vitoriaBot");
    }
  1. Zerar os pontos quando um dos jogadores vencer. E também, para verificar a vitória, um dos jogadores deve ter mais de 2 pontos E ter uma pontuação maior que o adversário:
    if (vitoriaUser >= 2 && vitoriaBot < vitoriaUser) {
      print( 'Você ganhou de mim! Parabéns!!   Placar: $vitoriaUser X $vitoriaBot');
      vitoriaBot = 0;
      vitoriaUser = 0;
    } else if (vitoriaBot >= 2 && vitoriaUser < vitoriaBot) {
      print( 'Consegui ganhar de você! Tenta na próxima...   Placar: $vitoriaUser X $vitoriaBot');
      vitoriaBot = 0;
      vitoriaUser = 0;
    }

Pronto! Espero ter ajudado, se tiver alguma dúvida e se quiser o código inteiro com os detalhes que alterei é só falar.

E sobre o static, se quiser saber mais recomendo a leitura do artigo Qual a diferença entre Static, Const e Final no Dart.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado. ✓