我试图创建一个用户“下注”的游戏。如果下一张卡片将介于之前显示的两张卡片之间。为了计算,我在52中创建了一个随机数,并将其设置为数组变量值。我需要一个2-14号而不是1-52号(用于评估2张卡片中带有相同#和不同套件的卡片的#)。为此,我使用slice获取数组项的第一个字母并将其存储在变量(num1,num2,numUser)中。
然后我使用if else语句给出面部卡片(10,jack,queen,king,ace)#values。问题是,我需要将其应用于所有3个变量。目前,语句在识别面部卡并设置#值时停止。如果有多张面牌,则该声明仅适用于第一张。
我尝试将它包装在一个for循环中并让它运行3次 - 例如(对于(var i = 0; i> 3; i ++),但是那不起作用。抱歉,如果这令人困惑,非常感谢任何帮助。
function outputCards(){
rand1 = Math.floor((Math.random() * 52));
rand2 = Math.floor((Math.random() * 52));
$('#cardUser').attr("src", "#");
if(rand1 == rand2){
rand2 = Math.floor((Math.random() * 52));
} else {
card1 = cards[rand1];
card2 = cards[rand2];
$('#cardOne').attr("src", "imgs/" + card1);
$('#cardTwo').attr("src", "imgs/" + card2);
}
}
function userCard(){
rand_user = Math.floor((Math.random() * 52));
if(rand_user == rand1 || rand_user == rand2){
rand_user = Math.floor((Math.random() * 52));
} else {
user_card = cards[rand_user];
$('#cardUser').attr("src", "imgs/" + user_card);
}
}
function outcome(){
userCard();
num1 = card1.slice(0,1);
num2 = card2.slice(0,1);
numUser = user_card.slice(0,1);
if(num1 == "j"){
num1 = 11;
} else if (num2 == "j") {
num2 = 11;
} else if (numUser === "j") {
numUser = 11;
} else if (num1 == "q") {
num1 = 12;
} else if (num2 == "q") {
num2 = 12;
} else if (numUser === "q") {
numUser = 12;
} else if (num1 == "k") {
num1 = 13;
} else if (num2 == "k") {
num2 = 13;
} else if (numUser === "k") {
numUser = 13;
} else if (num1 == "a") {
num1 = 14;
} else if (num2 == "a") {
num2 = 14;
} else if (numUser === "a") {
numUser = 14;
} else if(num1 == 1){
num1 = 10;
} else if(num2 == 1){
num2 = 10;
} else if(numUser == 1){
numUser = 10;
} else {
}
}
答案 0 :(得分:2)
这是更有效的方法来实现这一目标,最直接(和初学者友好)的方法是使用其他3,如果树木不是一个。
if(num1 == "j"){
num1 = 11;
} else if (num2 == "j") {
num2 = 11;
} else if (numUser === "j") {
numUser = 11;
...
当需要将它们分开时,您将这些组合在一起
if(num1 == "j"){
num1 = 11;
} else if (num1 == "q") {
num1 = 12;
} else if (num1 === "k") {
num1 = 13;
...
if(num2 == "j"){
num2 = 11;
} else if (num2 == "q") {
num1 = 12;
} else if (num2 === "k") {
num2 = 13;
...
这可以通过将if语句放在函数
中来实现function outcome(number){
if(number == "j"){
return 11;
} else if (number == "q") {
return 12;
} else if (number === "k") {
...
} //etc
}
num1 = outcome(card1.slice(0,1))
num2 = outcome(card2.slice(0,1))
numUser = outcome(user_card.slice(0,1));
您还可以创建一个对象地图,以使用数字值
映射卡片字母var cardMap = {
j: 11,
q: 12,
k: 13,
...
}
然后你可以做
num1 = cardMap[card1.slice(0,1)]
num2 = cardMap[card2.slice(0,1)]
numUser = cardMap[user_card.slice(0,1)]
答案 1 :(得分:1)
if-elseif
块会在找到真正的条件时停止执行,无论你有多少。
所以你想根据第一个字符评估变量,你知道它总是一样的,对吧?这是一个很好的机会,可以使用一个简单的函数来完成这一项工作(就像所有函数一样)。
function getCardValueFromFirstCharacter(character) {
// you may need to check for the number as well:
// if (character == "1") {
// return 1;
// } else if (character == "2") {
// return 2;
// }
// etc..
if (character == "j") {
return 11;
} else if (character == "q") {
return 12;
}
// etc..
}
现在,在您的其他功能outcome
功能中,您可以使用每个所需输入调用此功能:
function outcome() {
userCard();
num1 = getCardValueFromFirstCharacter(card1.slice(0,1));
num2 = getCardValueFromFirstCharacter(card2.slice(0,1));
numUser = getCardValueFromFirstCharacter(user_card.slice(0,1));
}
通过这种方式,我们的单一功能完全负责根据第一个字符识别卡的价值。这个函数可以改变它的实现来影响我们需要使用它的所有地方 - 所以,让我们说你决定将Jokers评估为20,你可以将它添加到那个函数,你的所有代码现在都会使用这个新价值。因此,将我们的代码分解为微小的函数,这些函数可以完成一件事,并且在我们的代码库中引用这一点很重要。