我目前正在做一个在控制台中播放的Rock, Paper, Scissors
项目(这是Odin项目的项目,前端即将推出)。
下面是我的脚本的样子,以供参考:
<script>
function computerPlay() {
const choice = ["Rock", "Paper", "Scissors"]
return choice[Math.floor(Math.random() * choice.length)]
}
function play(playerSelection, computerSelection) {
const lose = console.log('You lose! ' + computerSelection + ' beats ' + playerSelection + '!')
const win = console.log('You win! ' + playerSelection + ' beats ' + computerSelection + '!')
if (playerSelection === computerSelection) {
return console.log("It's a draw! Try again!")
}
if (playerSelection === "rock" && computerSelection === "Paper") {
return lose
}
if (playerSelection === "rock" && computerSelection === "Scissors") {
return win
}
if (playerSelection === "paper" && computerSelection === "Scissors") {
return lose
}
if (playerSelection === "paper" && computerSelection === "Rock") {
return win
}
if (playerSelection === "scissors" && computerSelection === "Rock") {
return lose
}
if (playerSelection === "scissors" && computerSelection === "Paper") {
return win
}
}
function game() {
playerSelect = prompt("Welcome to Rock, Paper, Scissors! Which one do you choose? \n")
compSelect = computerPlay()
console.log("Player chose " + playerSelect)
console.log("Computer chose " + compSelect)
console.log(play(playerSelect, compSelect))
}
</script>
现在,我的输出显示了任意给定选择的胜负条件:
Player chose rock
Computer chose Rock
You lose! Rock beats rock!
You win! rock beats Rock!
我选择将输赢消息保存在变量中,但我知道我可能在那里搞砸了一些小细节。我尝试添加/删除if else语句,但无论选择什么,这两条消息都会显示。
在我解决这个错误之前,我计划让这两个选择的大小写都不敏感。
任何帮助都将不胜感激,谢谢!:
发布于 2019-11-10 09:12:34
当您在脚本的开头调用console.log
时,并不是保存它们以备以后使用,而是运行它们并将它们的返回值分配给一个变量。你可以做的是让一个赢和一个输的变量都是函数,然后在玩家赢/输的时候调用它们。
function computerPlay() {
const choice = ["Rock", "Paper", "Scissors"];
return choice[Math.floor(Math.random() * choice.length)];
}
function play(playerSelection, computerSelection) {
// we are storing a function into the win and lose variable.
const lose = () => console.log('You lose! ' + computerSelection + ' beats ' + playerSelection + '!');
const win = () => console.log('You win! ' + playerSelection + ' beats ' + computerSelection + '!');
if (playerSelection === computerSelection) {
return console.log("It's a draw! Try again!")
}
if (playerSelection === "rock" && computerSelection === "Paper") {
return lose()
}
if (playerSelection === "rock" && computerSelection === "Scissors") {
return win()
}
if (playerSelection === "paper" && computerSelection === "Scissors") {
return lose()
}
if (playerSelection === "paper" && computerSelection === "Rock") {
return win()
}
if (playerSelection === "scissors" && computerSelection === "Rock") {
return lose()
}
if (playerSelection === "scissors" && computerSelection === "Paper") {
return win()
}
}
function game() {
playerSelect = 'rock';
compSelect = computerPlay();
console.log("Player chose " + playerSelect);
console.log("Computer chose " + compSelect);
// You don't need to console.log the return value of a console.log
play(playerSelect, compSelect);
}
game();
发布于 2019-11-10 09:15:58
尝试将lose
和win
变量更改为它们的字符串值,而不是console.log("/message/")
。
您的lose
和win
变量声明已经在打印它们的消息,而不是存储它们,因为您的代码调用了console.log()
的一个实例。
这样,当您返回成功或失败时,您的console.log(play(playerSelect, compSelect))
将接收一个字符串,然后将其打印出来。
https://stackoverflow.com/questions/58784943
复制相似问题