新手Javascript函数返回未定义的石头剪刀游戏
Newbie Javascript function returning undefined, rock paper scissors game
作为一名新手,在学习代码学院课程后,我遇到了一个构建石头剪刀游戏的问题。
我创建了两个包含整个程序的函数,当两个选项不同时,程序运行良好,但当选项相同时,它返回未定义,我不明白为什么。
我可以看到,当选择被捆绑时,新的选择会不断被分配,直到它们不同,然后对这些不同的选择调用比较函数,这应该会返回一个获胜的结果。
只是想补充一点,我想按原样修复代码,而不是重写整个代码,我已经完成了关于代码学院的这项练习,但我只是试图以不同的方式将其作为两个独立的函数。
感谢
var makeChoices = function() {
userChoice = "";
computerChoice = "";
userChoice = prompt("Do you choose rock, paper or scissors?");
computerChoice = Math.random();
if (computerChoice < 0.34) {
computerChoice = "rock";
} else if(computerChoice <= 0.67) {
computerChoice = "paper";
} else {
computerChoice = "scissors";
}
console.log("Computer: " + computerChoice + " " + "User: " + userChoice);
};
var compare = function(choice1, choice2) {
if (choice1 === choice2) {
makeChoices();
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 === "rock") {
return "rock wins";
}
else {
return "scissors wins";
}
}
else {
return "invalid choice by user";
}
};
makeChoices();
compare (userChoice, computerChoice);
您必须返回递归调用的结果。尝试更改
...
compare(userChoice, computerChoice);
...
至
...
return compare(userChoice, computerChoice);
...
当它相等时,您有"compare(userChoice,computerChoice);"。变量userChoice和computerChoice是在makeChoice()函数中定义的。它们在compare()函数中不可用。您可以将它们作为全局变量,也可以考虑将compare()函数调用移到makeChoices()的底部。
我们都以同样的方式开始这种令人印象深刻的语言!,不要担心成为新手,如果你不投降,你很快就会成为一名老师!,下面是这个练习的完整代码:
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(computerChoice, userChoice) {
if (computerChoice===userChoice) {
return("The result is a tie!");
}
if (userChoice === "rock"){
if (computerChoice === "paper") {
return("paper wins");
}
else if (computerChoice === "scissors") {
return("rock wins");
}
}
if (userChoice === "scissors") {
if (computerChoice==="paper") {
return("scissors wins");
}
else if (computerChoice === "rock") {
return("rock wins");
}
}
if (userChoice === "rock") {
if (computerChoice==="scissors") {
return "rock wins";
}
else if (computerChoice=== "paper") {
return "paper wins";
}
}
if (userChoice === "paper") {
if (computerChoice ==="scissors") {
return "scissors wins";
}
else if (computerChoice==="rock") {
return "paper wins";
}
}
};
compare();
我以前做过这样一个游戏:
var prsStatements = {
paperBeatsRock: 'Paper Beats Rock',
rockBeatsScissors: 'Rock Beats Scissors',
scissorsBeatsPaper: 'Scissors Beats Paper',
seperator: ' - ',
player1: 'Player One',
player2: 'Player Two',
wins: ' Wins!',
tie: "It's a Tie!",
tally: 'Final Tally: '
}
function PaperRockScissors(player1, player2){
var p = /^paper$/i, r = /^rock$/i, s = /^scissors$/i, prss = prsStatements, sep = prss.seperator, win = prss.wins;
var pbr = prss.paperBeatsRock+sep, rbs = prss.rockBeatsScissors+sep, sbp = prss.scissorsBeatsPaper+sep;
var plr1 = player1 ? player1 : prss.player1;
var plr2 = player2 ? player2 : prss.player2;
var p1w = plr1+win, p2w = plr2+win;
this.p1 = 0; this.p2 = 0;
this.rand = function(){
switch(Math.floor(Math.random()*3)){
case 0:
return 'rock';
case 1:
return 'paper';
case 2:
return 'scissors';
}
}
this.play = function(in1, in2){
var i2 = in2 || this.rand();
if(in1.match(p) && i2.match(r)){
++this.p1;
return pbr+p1w;
}
else if(i2.match(p) && in1.match(r)){
++this.p2;
return pbr+p2w;
}
else if(in1.match(r) && i2.match(s)){
++this.p1;
return rbs+p1w;
}
else if(i2.match(r) && in1.match(s)){
++this.p2;
return rbs+p2w;
}
else if(in1.match(s) && i2.match(p)){
++this.p1;
return sbp+p1w;
}
else if(i2.match(s) && in1.match(p)){
++this.p2;
return sbp+p2w;
}
else if(in1.match(i2r)){
return prss.tie;
}
else{
return this;
}
}
this.tally = function(){
var pt = prss.tally;
if(this.p1 > this.p2){
return pt+p1w;
}
else if(this.p2 > this.p1){
return pt+p2w;
}
else{
return pt+prss.tie;
}
}
}
var pr = new PaperRockScissors('Joe', 'Bob');
console.log(pr.play('paper', 'rock'));
console.log(pr.play('rock', 'Paper'));
console.log(pr.play('scissors', 'paper'));
console.log(pr.play('rock', 'Paper'));
console.log(pr.play('paper', 'rock'));
console.log(pr.play('Paper', 'Scissors'));
console.log(pr.play('Paper', 'paper'));
console.log(pr.play('paper', 'Rock'));
console.log(pr.tally());
如果你想让这个网络功能化,你只需要传递用户输入值,比如:
pr.play(someElement.value, anotherElement.value);
当然,您可能希望使用事件并传递正确的值"纸"、"石头"或"剪刀"。
电脑游戏可能看起来像:
var pc = new PaperRockScissors('Joe', 'Comupter');
console.log(pc.play('paper'));
console.log(pc.play('rock'));
console.log(pc.play('scissors'));
console.log(pc.play('rock'));
console.log(pc.play('paper'));
console.log(pc.play('Paper'));
console.log(pc.play('Paper'));
console.log(pc.play('paper'));
console.log(pc.tally());
相关文章:
- 新手Javascript函数返回未定义的石头剪刀游戏
- 编写石头,纸,剪刀游戏
- 石头剪刀布游戏功能在Javascript
- 如何在石头剪刀游戏中延迟回答
- 石头剪刀布蜥蜴斯波克游戏逻辑偶尔会输出错误的赢家,我不知道为什么
- 尝试为石头剪刀布游戏显示图像而不是字母
- 石头,纸,剪刀jQuery游戏不工作
- 石头、纸、剪刀游戏动画
- 我可以'我不明白为什么得分不高;我不在玩石头、布、剪刀的游戏
- 石头剪刀游戏的回合计数(潜在的jquery问题)
- 退出Javascript中的函数.简单的石头,纸,剪刀游戏
- 石头纸,剪刀游戏
- 如何添加图片到石头,剪刀游戏
- javascript,创建一个石头、纸、剪刀游戏
- 编程一个石头剪刀html游戏
- 玩石头剪刀游戏
- 如何使石头,纸,剪刀游戏重复
- 石头剪刀布游戏错误,Javascript
- 如果,则石头剪刀布游戏
- 石头剪刀布Javascript游戏添加选择限制