如何使if / else语句评估所有变量

时间:2016-01-13 21:09:24

标签: javascript jquery arrays if-statement

我试图创建一个用户“下注”的游戏。如果下一张卡片将介于之前显示的两张卡片之间。为了计算,我在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 {


    }
}

2 个答案:

答案 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,你可以将它添加到那个函数,你的所有代码现在都会使用这个新价值。因此,将我们的代码分解为微小的函数,这些函数可以完成一件事,并且在我们的代码库中引用这一点很重要。