JavaScript中的石头、布、剪刀
我正在制作我的第一个游戏(石头纸Sissor),我遇到了一个问题,当用户选择是剪刀而计算机选择是石头时,程序无法将获胜者作为石头返回。我可以让程序给我任何其他组合的赢家 我的代码在这里:JavaScript中的石头、布、剪刀,javascript,Javascript,我正在制作我的第一个游戏(石头纸Sissor),我遇到了一个问题,当用户选择是剪刀而计算机选择是石头时,程序无法将获胜者作为石头返回。我可以让程序给我任何其他组合的赢家 我的代码在这里: var userChoice = prompt("Do you choose rock, paper or scissors?"); var computerChoice = Math.random(); if (computerChoice < 0.34) { computerChoice =
var userChoice = prompt("Do you choose rock, paper or scissors?");
var computerChoice = Math.random();
if (computerChoice < 0.34) {
computerChoice = "rock";
} else if(computerChoice <= 0.67) {
computerChoice = "paper";
} else {
computerChoice = "scissors";
}
var compare = function(choice1, choice2) {
if(choice1 === choice2) {
return "The result is a tie!";
}
if(choice1 === "rock") {
if(choice2 === "scissors") {
return "rock wins";
} else {
return "paper wins";
}
}
if(choice1 === "paper") {
if(choice2 === "rock") {
return "paper wins";
} else {
if(choice2 === "scissors") {
return "scissors wins";
}
}
if(choice1 === "scissors") {
if(choice2 === "rock") {
return "rock wins";
} else {
if(choice2 === "paper") {
return "scissors wins";
}
}
}
}
};
console.log("User Choice: " + userChoice);
console.log("Computer Choice: " + computerChoice);
compare(userChoice, computerChoice);
var userChoice=prompt(“您选择石头、布还是剪刀?”);
var computerChoice=Math.random();
如果(计算机选择<0.34){
computerChoice=“rock”;
}否则,如果(computerChoice您的大括号不匹配:
if(choice1 === "paper") {
if(choice2 === "rock") {
return "paper wins";
} else {
if(choice2 === "scissors") {
return "scissors wins";
}
}
我实际上会删除该块中的最后一个if
,您不需要它。最后一个块(choice1==“剪刀”
)是正确的,但最后一个if不是必需的
为了向您说明为什么它会以这种特定方式失败,我重新缩进了代码的相关部分,以说明如何解释它:
if(choice1 === "paper") {
if(choice2 === "rock") {
return "paper wins";
} else {
if(choice2 === "scissors") {
return "scissors wins";
}
}
if(choice1 === "scissors") {
if(choice2 === "rock") {
return "rock wins";
} else {
if(choice2 === "paper") {
return "scissors wins";
}
}
}
}
您无法看到问题,很可能是因为代码缩进不良。正确缩进问题很明显:
if (choice1 === "paper") {
if (choice2 === "rock") {
return "paper wins";
} else {
if (choice2 === "scissors") {
return "scissors wins";
}
}
if (choice1 === "scissors") {
if (choice2 === "rock") {
return "rock wins";
} else {
if (choice2 === "paper") {
return "scissors wins";
}
}
}
}
你的if(choice1==“剪刀”){
在if(choice1==“纸”){
之内。里面的代码永远无法到达。那么多if语句。它们令人困惑
而且,所有这些if语句都会锁定游戏,使游戏变得困难
将逻辑重新用于另一个游戏
function referee(){
var training = {};
function learn(winner,loser){
if (!training[winner]) training[winner] = {};
training[winner][loser]=1;
}
function judge(play1,play2){
if (play1 === play2){ return 'tie'; }
return ( (training[play1][play2] === 1)? play1: play2 )+' wins!';
}
function validate(choice) {
return choice in training;
}
function choices() {
return Object.keys(training);
}
return {
'learn': learn,
'judge': judge,
'validAction': validate,
'getChoices': choices
};
}
var ref = referee();
ref.learn('rock','scissors');
ref.learn('paper','rock');
ref.learn('scissors','paper');
do {
var userChoice = prompt("Do you choose rock, paper or scissors?");
} while(!ref.validAction(userChoice))
var choices = ref.getChoices(),
computerChoice = choices[Math.floor(Math.random()*choices.length)];
console.log("User Choice: " + userChoice);
console.log("Computer Choice: " + computerChoice);
console.log(ref.judge(userChoice, computerChoice));
要学习的东西:
var choices = ["rock", "paper", "scissors"];
var map = {};
choices.forEach(function(choice, i) {
map[choice] = {};
map[choice][choice] = "Was a tie"
map[choice][choices[(i+1)%3]] = choices[(i+1)%3] + " wins"
map[choice][choices[(i+2)%3]] = choice + " wins"
})
function compare(choice1, choice2) {
return (map[choice1] || {})[choice2] || "Invalid choice";
}
这是一个适用于扩展集的备选方案。假设有奇数个可能性,从任何给定点开始,反对派的总数,从给定点开始向前阅读(并在到达终点时环绕),上半场将赢得给定点,下半场将输
或者用另一种方式来描述这一点,即在我们给定分数之前的剩余对手中,有一半会输,而在我们给定分数之后的另一半会赢
因此,选项
数组中的正确顺序至关重要
var choices = ["rock", "spock", "paper", "lizard", "scissors"];
var map = {};
choices.forEach(function(choice, i) {
map[choice] = {};
for (var j = 0, half = (choices.length-1)/2; j < choices.length; j++) {
var opposition = (i+j)%choices.length
if (!j)
map[choice][choice] = "Was a tie"
else if (j <= half)
map[choice][choices[opposition]] = choices[opposition] + " wins"
else
map[choice][choices[opposition]] = choice + " wins"
}
})
function compare(choice1, choice2) {
return (map[choice1] || {})[choice2] || "Invalid choice";
}
var-choices=[“岩石”、“斯波克”、“纸”、“蜥蜴”、“剪刀”];
var-map={};
选项。forEach(函数(选项,i){
map[choice]={};
对于(var j=0,half=(choices.length-1)/2;j
function playFunction() {
var userChoice = prompt("Do you choose rock, paper or scissors?");
var computerChoice = Math.random();
if (computerChoice < 0.34) {
computerChoice = "rock";
} else if(computerChoice <= 0.67) {
computerChoice = "paper";
} else {
computerChoice = "scissors";
}
var compare = function(choice1, choice2) {
if(choice1 === choice2) {
alert("The result is a tie!");
}
if(choice1 === "rock") {
if(choice2 === "scissors") {
alert("rock wins");
} else {
alert("paper wins");
}
}
if(choice1 === "paper") {
if(choice2 === "rock") {
alert("paper wins");
} else {
if(choice2 === "scissors") {
alert("scissors wins");
}
}
if(choice1 === "scissors") {
if(choice2 === "rock") {
alert("rock wins");
} else {
if(choice2 === "paper") {
alert("scissors wins");
}
}
}
}
};
console.log("User Choice: " + userChoice);
console.log("Computer Choice: " + computerChoice);
compare(userChoice, computerChoice)
}
function playFunction(){
var userChoice=prompt(“您选择石头、布还是剪刀?”);
var computerChoice=Math.random();
如果(计算机选择<0.34){
computerChoice=“rock”;
}else-if(computerChoice示例,没有所有{}和else-if
如果可以,请始终使用else if。由于if语句是不同的情况,并且只有一种适用,因此您应该使用else if
如果条件后面只有一条语句,则使用if语句时,您不需要{}(下面的条件1)…即使您有if..else if…block语句,它也被视为一条语句..(下面的条件2)…但是如果它有帮助,您可以在if..else if…block语句周围使用它们,以帮助您更好地理解它..(下面的条件3)
也不要使用===除非你真的知道它的作用。它可能会给你成为新手带来麻烦。默认情况下使用==
if(choice1 == choice2) //condition 1
return "The result is a tie!";
else if(choice1 == "rock") //condition 2
if(choice2 == "scissors")
return "rock wins";
else
return "paper wins";
else if(choice1 == "paper"){ //condition 3
if(choice2 == "rock")
return "paper wins";
else
return "scissors wins";
}
else if(choice1 == "scissors")
if(choice2 == "rock")
return "rock wins";
else
return "scissors wins";
我提出了一个替代方案,它应该易于理解,并避免代码中的一些问题,如过度重复和固定选择。因此,它更灵活,更易于维护
function compare(choice1, choice2) {
choice1 = choices.indexOf(choice1);
choice2 = choices.indexOf(choice2);
if (choice1 == choice2) {
return "Tie";
}
if (choice1 == choices.length - 1 && choice2 == 0) {
return "Right wins";
}
if (choice2 == choices.length - 1 && choice1 == 0) {
return "Left wins";
}
if (choice1 > choice2) {
return "Left wins";
} else {
return "Right wins";
}
}
选项是var选项=[“石头”、“布”、“剪刀”];
。您可以看到
要将解决方案推广到更大的列表,这可能很有帮助:
function mod(a, b) {
c = a % b
return (c < 0) ? c + b : c
}
功能模块(a、b){
c=a%b
返回(c<0)?c+b:c
}
那么编写比较代码就容易多了:
function compare(choice1, choice2) {
x = choices.indexOf(choice1);
y = choices.indexOf(choice2);
if (x == y) {
return "Tie";
}
if (mod((x - y), choices.length) < choices.length / 2) {
return choice1 + " wins";
} else {
return choice2 + " wins";
}
}
函数比较(选项1,选项2){
x=选项。索引of(选项1);
y=选项。索引of(选项2);
如果(x==y){
返回“平局”;
}
if(mod((x-y),choices.length)
.var userChoice=prompt(“您选择石头、布还是剪刀?”);
var computerChoice=Math.random();
{
如果(计算机选择var比较=函数(选项1,选项2)
{
如果(选项1==选项2)
{
return“结果是平局!”;
}
其他的
{
如果(选项1==“岩石”)
{
如果(选项2==“纸张”)
{
return“纸胜石头,电脑胜。”;
}
其他的
{
return“石头胜过剪刀,你们赢了。”;
}
}
其他的
{
如果(选项1==“纸张”)
{
如果(选项2==“岩石”)
{
return“纸胜石头,你们赢了。”;
}
其他的
{
return“剪刀赢了纸,电脑赢了。”;}
}
如果(选项1==“剪刀”)
{
如果(选项2==“岩石”)
{
return“石头胜剪刀,电脑赢。”;
}
其他的
{
return“剪刀打布,你赢了。”;}
}
}
}
};
var r=函数(用户)
{
而(用户<0 |用户>3)
{user=prompt(“请不要表现得太聪明。按'1'表示石头,按'2'表示布,按'3'表示剪刀”);
}
如果(用户=“1”)
user=“rock”;
其他的
{
如果(用户=“2”)
{user=“paper”;}
其他的
{user=“剪刀”;}
};
log(“您选择:“+user”);
computerChoice=Math.random()
if(computerChoice 0.33&&computerChoice这一个将创建一个完美的、自我重复的游戏,直到有人赢了为止。它还显示您玩了多少游戏。所有这些都不使用
var userChoice = prompt("Do you choose rock, paper or scissors? ");
var computerChoice=Math.random();
{
if(computerChoice <= ".33")
{
computerChoice === 'rock';
}
else if(computerChoice<='.66' & '>=.34')
{
computerChoice === 'paper';
}
else
{
computerChoice ===' scissors';
}
}
console.log( computerChoice);
var compare = function (choice1, choice2)
{
if (choice1 === choice2)
{
return "The result is a tie!";
}
else
{
if(choice1 === "rock")
{
if(choice2 === "paper")
{
return "Paper beats rock. Computer Wins.";
}
else
{
return "Rock beats scissors. You win.";
}
}
else
{
if(choice1 === "paper")
{
if(choice2 === "rock")
{
return "Paper beats rock. You Win.";
}
else
{
return "Scissors beat paper. Computer Wins."; }
}
if(choice1 === "scissors")
{
if(choice2 === "rock")
{
return "Rock beats scissors. Computer Wins.";
}
else
{
return "Scissors beat paper. You Win."; }
}
}
}
};
var r = function(user)
{
while(user < 0 | user >3)
{user = prompt("Please don't act oversmart. Press '1' for rock, '2' for paper, and '3' for scissors.");
}
if(user === "1")
user = "rock";
else
{
if(user === "2")
{user = "paper";}
else
{user = "scissors";}
};
console.log("You chose: " + user);
computerChoice = Math.random()
if(computerChoice <= 0.33)
{
computerChoice = "rock";
}
else
{
if(computerChoice > 0.33 && computerChoice <=0.66)
{computerChoice = "paper";}
else
{computerChoice = "scissors";}
}
console.log("The computer chose: "+computerChoice)
console.log(compare(user, computerChoice));
if(user===computerChoice)
{
userChoice = user;
return "1";}
};
var userChoice = prompt("Press '1' for rock, '2' for paper, and '3' for scissors")
var computerChoice;
var a = r(userChoice);
if(a === "1")
{//console.log("1");
while(userChoice === computerChoice)
{
var a = prompt("Since there was a tie, please choose again. Press 1 for rock, 2 for paper and 3 for scissors.")
var b = r(a);
if(b !== "1")
{break;}
}
}
count = 1;
var Decisions = function() {
if (count === 1) {
userChoice = prompt("Do you choose rock, paper or scissors?");
} else {
userChoice = prompt("It's a tie. Please make your choice again!");
}
computerChoice = Math.random();
if (computerChoice < 0.4) {
computerChoice = "rock";
} else if(computerChoice <= 0.8) {
computerChoice = "paper";
} else {
computerChoice = "scissors";
}
console.log("User: " + userChoice);
console.log("Computer: " + computerChoice);
}
Decisions();
var compare = function(choice1, choice2) {
if (choice1 === choice2) {
count = count + 1
console.log("The result is a tie!");
Decisions();
return compare(userChoice, computerChoice);
} else if (choice1 === "rock") {
if (choice2 === "scissors") {
return "rock wins";
} else {
return "paper wins";
}
} else if (choice1 === "paper") {
if (choice2 === "rock") {
return "paper wins";
} else {
return "scissors wins";
}
} else if (choice1 === "scissors") {
if (choice2 === "paper") {
return "scissors win";
} else {
return "rock wins";
}
}
}
console.log(compare(userChoice,computerChoice));
console.log("Wow, you played " + count + " times!");
var userChoice = prompt ("Do you choose rock, paper or scissors?");
var computerChoice = Math.random();
console.log(computerChoice);
if (computerChoice <=0.33) {
"rock";
} else if (computerChoice <=0.66) {
"paper";
} else {
"scissors";
}
//player choice
var playerChoice = prompt("What is your choice of weapon: rock, paper, or scissors?");
//Computer Choice
var computerChoice = Math.ceil(Math.random() *3);
//variables as numbers
if (computerChoice < 1) {
computerChoice = "rock";
} else if(1 <= computerChoice <= 2) {
computerChoice = "paper";
} else {
computerChoice = "scissors";
}
//defining function
function game(playerChoice, computerChoice){
//Checking for a tie
if (playerChoice === computerChoice) {
return "It is a tie";
}
//Check for Rock
if (playerChoice === "rock") {
if (computerChoice === "scissors") {
return "Player Wins";
} else {
return "Computer Wins";
}
}
//Check for Paper
if (playerChoice === "paper") {
if (computerChoice === "scissors") {
return "Computer Wins";
} else {
return "Player Wins";
}
}
//Check for Scissors
if (playerChoice === "scissors") {
if (computerChoice === "rock") {
return "Computer Wins";
} else {
return "Player Wins";
}
}
}
//start the game function
game();
//print winner
console.log(game(playerChoice, computerChoice))