Undefined error (Português-Brazil)


#1

Olá a todos, fiz o projeto "Pedra, Papel ou Tesoura", entretanto estou com um pequeno problema que não consigo resolver. O script funciona normal, porém quando o jogo da empate, ele roda novamente e mostra o vencedor, só que ele mostra um erro no console: "undefined", não consigo entender o porque, alguém pode me ajudar?

/* Robison Aleixo
 * Jogo Pedra, Papel ou Tesoura
 * Última modificação 06 de novembro de 2016
 */

// Variáveis Globais
var userChoice;
var computerChoice = Math.random();

// Função verificar ganhador
function ganhador(userChoise, computerChoise) {
	switch(userChoise) {
		case "pedra" :
			if (computerChoice === "tesoura") {
				return "Usuário ganhou!";
			} else if (computerChoice === "pedra") {
				console.log("Empate! Tente novamente!");
				lerResposta();
			} else {
				return "Computador ganhou!";
			}
			break;
		case "papel" :
			if (computerChoice === "pedra") {
				return "Usuário ganhou!";
			} else if (computerChoice === "papel") {
				console.log("Empate! Tente novamente!");
				lerResposta();
			} else {
				return "Computador ganhou!";
			}
			break;
		case "tesoura" :
			if (computerChoice === "papel") {
				return "Usuário ganhou!";
			} else if (computerChoice === "tesoura") {
				console.log("Empate! Tente novamente!");
				lerResposta();
			} else {
				return "Computador ganhou!";
			}
			break;
	}
}

// Verifica se escolha é válida
function checaResposta (userChoice) {
	if (this.userChoice < 1 || this.userChoice > 3) {
		return true;
	} else {
		return false;
	}
}

// Lendo a escolha do usúario;
function lerResposta () {
	userChoice = parseInt(prompt("Faça sua escolha: (1)Pedra, (2)Papel ou (3)Tesoura."));
	jogar(userChoice);
}

//  Jogada do computador
function playComputer(computerChoice) {
	if (this.computerChoice >= 0 && this.computerChoice <= 0.33) {
		return "pedra";
	} else if (this.computerChoice >= 0.34 && this.computerChoice <= 0.66) {
		return "papel";
	} else {
		return "tesoura";
	}
}

// Verifica a Resposta caso ok, mostra o ganhador
function jogar (userChoice) {
	if (checaResposta(this.userChoice)) {
		console.log("Valor inválido, tente novamente!");
		lerResposta();
	} else {
		switch (userChoice) {
			case 1 :
				userChoice = "pedra";
				break;
			case 2 :
				userChoice = "papel";
				break;
			case 3 :
			userChoice = "tesoura";
			break;
		}
	computerChoice = playComputer(computerChoice);
	console.log(ganhador(userChoice, computerChoice));
	}
}

// Inícia o script
lerResposta();


#2

Nice code. Vou ver com mais calma, tem muita resposta ai pra minhas duvidas :slight_smile:


#3

Opá, Qualquer dúvida posta ai, no que eu puder ajudar...


#4

Estudei um pouco ontem a noite. Tinha uma variável (userChoice escrita errada), e tirei vários lerresposta() do código. Entretanto, tudo continuou funcionando, mas o erro persistiu. Vou continuar estudando. Meu conhecimento é zero perto do seu, mas vou tentar ajudar e "clonar" umas ideias para o meu. Veja como ficou:

// Variáveis Globais
var userChoice;
var computerChoice = Math.random();

// Função verificar ganhador
function ganhador(userChoice, computerChoice) {
switch(userChoice) {
case "pedra" :
if (computerChoice === "tesoura") {
return "Usuário ganhou!";
} else if (computerChoice === "pedra") {
console.log("Empate! Tente novamente!");
} else {
return "Computador ganhou!";
}
break;
case "papel" :
if (computerChoice === "pedra") {
return "Usuário ganhou!";
} else if (computerChoice === "papel") {
console.log("Empate! Tente novamente!");
} else {
return "Computador ganhou!";
}
break;
case "tesoura" :
if (computerChoice === "papel") {
return "Usuário ganhou!";
} else if (computerChoice === "tesoura") {
console.log("Empate! Tente novamente!");
} else {
return "Computador ganhou!";
}
break;
}
}

// Verifica se escolha é válida
function checaResposta (userChoice) {
if (this.userChoice < 1 || this.userChoice > 3) {
return true;
} else {
return false;
}
}

// Lendo a escolha do usúario;
function lerResposta () {
userChoice = parseInt(prompt("Faça sua escolha: (1)Pedra, (2)Papel ou (3)Tesoura."));
jogar(userChoice);
}

// Jogada do computador
function playComputer(computerChoice) {
if (this.computerChoice >= 0 && this.computerChoice <= 0.33) {
return "pedra";
} else if (this.computerChoice >= 0.34 && this.computerChoice <= 0.66) {
return "papel";
} else {
return "tesoura";
}
}

// Verifica a Resposta caso ok, mostra o ganhador
function jogar (userChoice) {
if (checaResposta(this.userChoice)) {
console.log("Valor inválido, tente novamente!");
} else {
switch (userChoice) {
case 1 :
userChoice = "pedra";
break;
case 2 :
userChoice = "papel";
break;
case 3 :
userChoice = "tesoura";
break;
}
computerChoice = playComputer(computerChoice);
console.log(ganhador(userChoice, computerChoice));
}
}

// Inícia o script
lerResposta();


#5

Acho que encontrei o erro, na função que verifica quem é o ganhador, você usou console.log pra mostrar a resposta do empate e return pra mostrar as demais, alterei tudo pra return, deu certo por aqui, veja:

// Função verificar ganhador
function ganhador(userChoice, computerChoice) {
    switch(userChoice) {
        case "pedra" :
        if (computerChoice === "tesoura") {
            return "Usuário ganhou!";
        } else if (computerChoice === "pedra") {
            return "Empate! Tente novamente!";
        } else {
            return "Computador ganhou!";
        }
        break;
    case "papel" :
        if (computerChoice === "pedra") {
            return "Usuário ganhou!";
        } else if (computerChoice === "papel") {
            return "Empate! Tente novamente!";
        } else {
            return "Computador ganhou!";
        }
        break;
case "tesoura" :
        if (computerChoice === "papel") {
            return "Usuário ganhou!";
        } else if (computerChoice === "tesoura") {
            return "Empate! Tente novamente!";
        } else {
            return "Computador ganhou!";
        }
        break;
        }
}

#6

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.