如何摆脱undefined(s)和我的代码中的其他问题?
问题描述:
我在一千次不同的时间试过了这一千种不同的方式,我的JS代码不会以我想要的方式出现。当我在Mozilla暂存器中运行它时,我得到“userHand未定义”,第二个printHand也显示为未定义。有人能告诉我我的二十一点游戏中的错误在哪里?如何摆脱undefined(s)和我的代码中的其他问题?
function Card (s, n) {
var suit = s;
var number = n;
this.getNumber = function() {
return number;
};
this.getSuit = function() {
return suit;
};
this.getValue = function() {
if (number > 10) {
return 10;
} else if (number === 1) {
return 11;
} else {
return number;
}
};
}
var cardNames = {1:"Ace", 2:"2", 3:"3", 4:"4", 5:"5", 6:"6", 7:"7", 8:"8", 9:"9", 10:"10", 11:"Joker", 12:"Queen", 13:"King"};
var suitNames = {1:"Clubs", 2:"Diamonds", 3:"Hearts", 4:"Spades"};
var deal = function() {
var s = Math.floor(Math.random() * 4 + 1);
var n = Math.floor(Math.random() * 13 + 1);
return new Card(s, n);
};
function Hand(){
var cards = [];
cards.push(deal());
cards.push(deal());
this.getHand = function() {
return cards;
};
this.score = function() {
var score;
for (i = 0; i < cards.length; i++) {
score = score + cards[i].getValue();
}
for (i = 0; i < cards.length; i++) {
if (score > 21 && cards[i].getValue() === 11) {
score = score - 10;
}
} return score;
};
this.printHand = function() {
for (i = 0; i < cards.length; i++) {
var hand;
if (i === 0) {
hand = cardNames[cards[i].getNumber()] + " of " + suitNames[cards[i].getSuit()];
} else {
hand = hand + " and a " + cardNames[cards[i].getNumber()] + " of " + suitNames[cards[i].getSuit()];
}
} alert(hand);
};
this.hitMe = function() {
cards.push(deal());
};
}
var playAsDealer = function() {
var playDealer = new Hand();
while (playDealer.score() < 17) {
playDealer.hitMe();
}
this.printHand = function() {
return playDealer.printHand();
};
this.score = function() {
return playDealer.score();
};
};
var playAsUser = function() {
var playUser = new Hand();
this.printHand = function() {
return playUser.printHand();
};
this.score = function() {
return playUser.score();
};
var decision = confirm("Your hand is " + playUser.printHand() + ". Click OK to hit or Cancel to stand");
for (i = 0; decision !== false; i++) {
playUser.hitMe();
decision = confirm("Your hand is " + playUser.printHand() + ". Click OK to hit or Cancel to stand");
}
};
var declareWinner = function (userHand, dealerHand) {
if ((userHand.score < dealerHand.score) || userHand.score > 21) {
return "You lose.";
} else if (userHand.score > dealerHand.score) {
return "You win.";
} else {
return "You tied.";
}
};
var playGame = function() {
var user = playAsUser();
var dealer = playAsDealer();
declareWinner(user, dealer);
console.log("User got " + user.printHand());
console.log("Dealer got " + dealer.printHand());
};
playGame();
答
你是不是在printHand()
返回什么,我只是添加了return语句和工作。看到这个fiddle
this.printHand = function() {
for (i = 0; i < cards.length; i++) {
var hand;
if (i === 0) {
hand = cardNames[cards[i].getNumber()] + " of " + suitNames[cards[i].getSuit()];
} else {
hand = hand + " and a " + cardNames[cards[i].getNumber()] + " of " + suitNames[cards[i].getSuit()];
}
}
//alert(hand); //remove this alert
return hand; // <----- solution
};
这还不是所有的方式,在每一个“玩”的方法,你需要回到()'是为“玩家”创建'手:HTTP://的jsfiddle。 net/XEgnC/2/ – Shmiddty
@Shmiddty,谢谢。你打算分别返回玩家和玩家,是不是? –
'playAsUser()'里面的'playUser'和'''''''''''''''''''' – Shmiddty