Привет всем, это мой первый вопрос здесь, так что извините, если он не соответствует всем правилам. Я пытаюсь сделать игру «камень-ножницы-бумага» из проекта Odin в javascript, и у меня проблемы с выводом результата, потому что он не отображает то, что должен. Если компьютер играет рок для e. и я играю рок, я должен получить ничью, но я все время получаю что-то случайное. Текущий код использует prompt() для пользовательского ввода, но я попытался ввести фиксированную строку, например «бумага», и это было то же самое, я также подумал, что это из-за того, что я неправильно указал toLowerCase(), поэтому я полностью удалил его, и это тем не менее, я был бы признателен за вашу помощь!
function computerPlay() {
let rps = ["rock", "paper", "scissors"];
let random = rps[Math.floor(Math.random() * rps.length)];
return random;
}
console.info(computerPlay());
function playRound(playerSelection, computerSelection) {
if (playerSelection === computerSelection) {
return ("It's a draw!");
} else if ((playerSelection === "rock") && (computerSelection === "scissors")) {
return ("You win! Rock beats scissors");
} else if (playerSelection === "rock" && computerSelection === "paper") {
return ("You lose! Paper beats rock");
} else if (playerSelection === "paper" && computerSelection === "rock") {
return ("You win! Paper beats rock");
} else if (playerSelection === "paper" && computerSelection === "scissors") {
return ("You lose! Scissors beat paper");
} else if (playerSelection === "scissors" && computerSelection === "paper") {
return ("You win! Scissors beat paper");
} else if (playerSelection === "scissors" && computerSelection === "rock") {
return ("You lose!Rock beats scissors");
}
}
let computerSelection = computerPlay();
let playerSelection = prompt("Choose your weapon");
console.info(playRound(playerSelection, computerSelection));
Используйте console.info(computerSelection)
после задания, чтобы увидеть пьесу, с которой вы соревнуетесь.
Сначала вы выполняете console.info функцию computerPlay(), которая возвращает определенное значение. После этого вы играете в раунд и снова вызываете функцию computerPlay(), которая вычисляет раунд с другим значением, чем в первом console.info.
Попробуйте этот код ниже
function computerPlay() {
let rps = ["rock", "paper", "scissors"];
let random = rps[Math.floor(Math.random() * rps.length)];
return random;
}
function playRound(playerSelection, computerSelection) {
if (playerSelection === computerSelection) {
return ("It's a draw!");
} else if ((playerSelection === "rock") && (computerSelection === "scissors")) {
return ("You win! Rock beats scissors");
} else if (playerSelection === "rock" && computerSelection === "paper") {
return ("You lose! Paper beats rock");
} else if (playerSelection === "paper" && computerSelection === "rock") {
return ("You win! Paper beats rock");
} else if (playerSelection === "paper" && computerSelection === "scissors") {
return ("You lose! Scissors beat paper");
} else if (playerSelection === "scissors" && computerSelection === "paper") {
return ("You win! Scissors beat paper");
} else if (playerSelection === "scissors" && computerSelection === "rock") {
return ("You lose!Rock beats scissors");
}
}
let computerSelection = computerPlay();
let playerSelection = prompt("Choose your weapon");
console.info(computerSelection)
console.info(playRound(playerSelection, computerSelection));
Вы можете упростить свои условия таким образом
const choices = ["Rock", "Paper", "Scissors"]
const computerPlay = () => choices[Math.floor(Math.random() * choices.length)]
function playRound(playerSelection, computerSelection) {
const difference = (choices.length + choices.indexOf(playerSelection) - choices.indexOf(computerSelection) )% choices.length
switch(difference){
case 0:
return "It's a draw!"
case 2:
return `You lose! ${computerSelection} beats ${playerSelection}`
default:
return `You win! ${playerSelection} beats ${computerSelection}`
}
}
let computerSelection = computerPlay();
let playerSelection
while(!choices.includes(playerSelection)){
const selected = prompt("Choose your weapon").trim().toLowerCase();
playerSelection = selected[0].toUpperCase()+selected.slice(1)
}
console.info(playRound(playerSelection, computerSelection));
Каждый раз, когда вы звоните
computerPlay()
, вы получаете новую игру. Таким образом, игра, которая зарегистрирована вconsole.info(computerPlay())
, не совпадает с той, которая назначена вcomputerSelection = computerPlay();