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
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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
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
playJokenpomas ainda dentro da classeJokenpo.
Isso basta para que a contagem funcione! Mas vi outros detalhes no seu código que pode melhorar:
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');
} if (choiceBot == choiceUser) {
// você escolhe se incrementa de ambos ou de nenhum:
// vitoriaBot++;
// vitoriaUser++;
print("Empate! PLACAR: $vitoriaUser X $vitoriaBot");
} 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!