0

我正在制作一个有助于在 javascript 中计算卡片的二十一点游戏。功能之一是更新计数。为此,我放置了一个 switch 语句,如果牌是 2 到 6,则将计数加 1,如果牌是 J、K、Q 或 A,则将计数减 1。我已经多次查看我的代码,但无法找出问题所在。无论变量dcac等于什么,它始终默认为 switch 语句中的第一种情况。我什至尝试设置 ac = "three" ,它仍然默认为第一种情况。有人可以找出问题所在吗?谢谢!

只是更新计数功能:

//Update the count
function updateCount(){
  var dc;
  var pc;
  var dealerCount = 0;
  var playerCount = 0;
  
  for(var d = 0; d < dealerCards.length; d += 1){
    
    dc = dealerCards[d].name; //String
    console.log("DC: " + dc);
    switch(dc){
      case "two":
        dealerCount += 1;
        console.log("d2");
        break;
      case "three":
        dealerCount += 1;
        console.log("d3");
        break;
      case "four":
        dealerCount += 1;
        console.log("d4");
        break;
      case "five":
        dealerCount += 1;
        console.log("d5");
        break;
      case "six":
        dealerCount += 1;
        console.log("d6");
        break;
      case "jack":
        dealerCount -= 1;
        console.log("dj");
        break;
      case "queen":
        dealerCount -= 1;
        console.log("dq");
        break;
      case "king":
        dealerCount -= 1;
        console.log("dk");
        break;
      case "ace":
        dealerCount -= 1;
        console.log("da");
        break;
      default:
        dealerCount += 0;
        
    }
  }
  
  for(var p = 0; p < playerCards.length; p += 1){
    pc = playerCards[p].name; //String
    console.log("PC: " + pc);
    switch(pc){
      case "two":
        playerCount += 1;
        console.log("p2");
        break;
      case "three":
        playerCount += 1;
        console.log("p3");
        break;
      case "four":
        playerCount += 1;
        console.log("p4");
        break;
      case "five":
        playerCount += 1;
        console.log("p5");
        break;
      case "six":
        playerCount += 1;
        console.log("p6");
        break;
      case "jack":
        playerCount -= 1;
        console.log("pj");
        break;
      case "queen":
        playerCount -= 1;
        console.log("pq");
        break;
      case "king":
        playerCount -= 1;
        console.log("pk");
        break;
      case "ace":
        playerCount -= 1;
        console.log("pa");
        break;
      default:
        playerCount += 0;
        
    }
  }
  //count = Count + Count
  //setText("countLbl", "Count: " + (playerCount + dealerCount));
}
var dealerCards = [];

控制台输出:

DC = 王牌

DC = 九

d2

PC = 三

p2

PC = 三

p2

我的整个程序(注意:它不会在堆栈溢出中运行,因为它是在 code.org 的应用程序实验室中编写的,我被迫在课堂上使用它)

/* TODO:
 * 1) Make play again button
 * 2) Make reset button
 * 3) Make count work
 * 4) Make hide/show count button
 * 5) Make first dealer card hidden
 * 6) Check for blackjack on first deal
 * 7) Make Ace = 1 if total is greater than 21
 * 8) Make deck re-shuffle upon reset or cards run out
*/







//var Count = 0;
var playerCards = [];
var dealerCards = new Array();
var deckArr = new Array();



//Stores the properties each card can have
var cardProp = {
  suit: ['heart', 'spade', 'club', 'diamond'],
  value: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 11],
  name: ['ace', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'jack', 'queen', 'king']
};

/*--------------------------------------------------------------------------------------------*/
console.log(playerCards.length);
populateDeck();
//console.log(deckArr.length);
//printDeck();

//deckArr = shuffleDeck(deckArr).slice(0);
printDeck();
console.log("----------------------------");

//STAND BUTTON
onEvent("standBtn", "click", function(){
  //Check player for blackjack
  if(getPlayerTotal() > 21){
    showElement("winLoseLbl");
    setText("winLoseLbl", "BUST! \n Dealer Wins!");
  } else {
    //Deal until dealer total is greater than 17
    //then check for win
    while(getDealerTotal() < 17){
      dealerHit();
    }
    
    //Check for dealer or player win
    if(getDealerTotal() < getPlayerTotal() || getDealerTotal() > 21){
      showElement("winLoseLbl");
      setText("winLoseLbl", "Player Wins!!");
    } else {
      showElement("winLoseLbl");
      setText("winLoseLbl", "Dealer Wins!!");
    }
  }
});



//START BUTTON
onEvent("startBtn", "click", function(){
  hideElement("startBtn");
  dealPlayerCards();
  dealDealerCards();
  updateCount();
  //TEMP Hide cards used for hit button
  hideElement("dealerCard3");
  hideElement("dealerCard4");
  hideElement("playerCard3");
  hideElement("playerCard4");
  
});

//DEAL BUTTON
//deal 2 cards to the player and 2 to the dealer
onEvent("dealBtn", "click", function(){
  //Deal player cards
  for(var c = 0; c < 2; c += 1){

    console.log("Deck Arr Length: " + deckArr.length);
    playerCards[c] = drawCard();
    console.log("Deck Arr Length: " + deckArr.length);
    displayCard(playerCards[c], "playerCard" + (c + 1));
    console.log(playerCards[c]);
    

  }
});


//HIT BUTTON

onEvent("hitBtn", "click", function(){
  //Draws a card then displays it in the first hidden card
  //slot if not already displayed, otherwise displays
  //in the second hidden card slot
  if(getProperty("playerCard3","hidden") === true){
    playerCards[2] = drawCard();
    showElement("playerCard3");
    displayCard(playerCards[2], "playerCard" + 3);
  } else if(getProperty("playerCard3", "hidden") === false && getProperty("playerCard4", "hidden") === true){
    playerCards[3] = drawCard();
    showElement("playerCard4");
    displayCard(playerCards[3], "playerCard" + 4);
  }
  updateCount();

  
});




/*--------------------------------------------------------------------------------------------*/

function dealerHit(){
  if(getProperty("dealerCard3","hidden") === true){
    dealerCards[2] = drawCard();
    showElement("dealerCard3");
    displayCard(dealerCards[2], "dealerCard" + 3);
  } else if(getProperty("dealerCard3", "hidden") === false && getProperty("dealerCard4", "hidden") === true){
    dealerCards[3] = drawCard();
    showElement("dealerCard4");
    displayCard(dealerCards[3], "dealerCard" + 4);
  }
}


function getDealerTotal(){
  var total = 0;
  for(var x = 0; x < dealerCards.length; x += 1){
    total += dealerCards[x].value;
  }
  return total;
}



function getPlayerTotal(){
  var total = 0;
  for(var x = 0; x < playerCards.length; x += 1){
    total += playerCards[x].value;
  }
  console.log(total);
  return total;
}



function dealPlayerCards(){
    for(var c = 0; c < 2; c += 1){

      //console.log("Deck Arr Length: " + deckArr.length);
      playerCards[c] = drawCard();
      //console.log("Deck Arr Length: " + deckArr.length);
      displayCard(playerCards[c], "playerCard" + (c + 1));
     // console.log(playerCards[c]);


  }
}


function dealDealerCards(){
    for(var c = 0; c < 2; c += 1){

      //console.log("Deck Arr Length: " + deckArr.length);
      dealerCards[c] = drawCard();
      //console.log("Deck Arr Length: " + deckArr.length);
      displayCard(dealerCards[c], "dealerCard" + (c + 1));
      //console.log(dealerCards[c]);
     

  }
}


//Checks the deltCards array to see if a card was delt




//Draws a random card from the deck
function drawCard(){
  var randomNum = randomNumber(0, deckArr.length - 1);
  var returnCard;
  //console.log("Random Num " + randomNum);
  
  returnCard = deckArr[randomNum];
  deckArr.splice(randomNum, 1);
  //printDeck();
  return returnCard;
}


//Displays the input card in the inputted position
function displayCard(card, position){
  if(card !== undefined){
    getKeyValue(card.name + "_" + card.suit, function(image){
      setProperty(position, "image", image);
    });
  } else {
    console.log("ERROR: NAME undefined");
    write("UNDEFINED");
  }
}



//Prints the deck for debugging
function printDeck(){
  for(var x = 0; x < deckArr.length; x += 1){
    console.log("#: " + x + " S: " + deckArr[x].suit + " V: " + deckArr[x].value + " N: " + deckArr[x].name);
  }
}


//Sets each index of deckArr to
//a new object with the PROPERTIES: Value, Name, Suit, Image
function populateDeck(){

  var count = 0;
  
  for(var s = 0; s < cardProp.suit.length; s += 1)
    for(var v = 0; v < cardProp.value.length; v += 1){
      //Create new object 
      //ready to store properties in
      deckArr[count] = {};
      
      //Set Properties to object created above
      deckArr[count].value = cardProp.value[v];
      deckArr[count].name = cardProp.name[v];
      deckArr[count].suit = cardProp.suit[s];

      count += 1;
    }
}




function shuffleDeck(deck){
  var newDeck = new Array(deck.length); 
  var randomNum = randomNumber(0, deck.length - 1);
  
  
  for(var c = deck.length - 1; c >= 0; c -= 1){
    while(newDeck[randomNum] !== undefined){ //need to fix
      randomNum = randomNumber((0, deck.length - 1));
    }
    newDeck[randomNum] = deck[c];
    randomNum = randomNumber(0, deck.length - 1);
  }
  return newDeck;
  
}


//Checks for a win in the player or the dealer
function checkWin(){
  for(var x = 0; x < playerCards.length; x += 1){
    
  }
}

//Update the count
function updateCount(){
  var dc;
  var pc;
  var dealerCount = 0;
  var playerCount = 0;
  
  for(var d = 0; d < dealerCards.length; d += 1){
    
    dc = dealerCards[d].name;
    console.log("DC: " + dc);
    switch(dc.valueOf()){
      case "two":
        dealerCount += 1;
        console.log("d2");
        break;
      case "three":
        dealerCount += 1;
        console.log("d3");
        break;
      case "four":
        dealerCount += 1;
        console.log("d4");
        break;
      case "five":
        dealerCount += 1;
        console.log("d5");
        break;
      case "six":
        dealerCount += 1;
        console.log("d6");
        break;
      case "jack":
        dealerCount -= 1;
        console.log("dj");
        break;
      case "queen":
        dealerCount -= 1;
        console.log("dq");
        break;
      case "king":
        dealerCount -= 1;
        console.log("dk");
        break;
      case "ace":
        dealerCount -= 1;
        console.log("da");
        break;
      default:
      dealerCount += 0;
        
    }
  }
  
  for(var p = 0; p < playerCards.length; p += 1){
    pc = "three";
    console.log("PC: " + pc);
    switch(pc.valueOf){
      case "two":
        playerCount += 1;
        console.log("p2");
        break;
      case "three":
        playerCount += 1;
        console.log("p3");
        break;
      case "four":
        playerCount += 1;
        console.log("p4");
        break;
      case "five":
        playerCount += 1;
        console.log("p5");
        break;
      case "six":
        playerCount += 1;
        console.log("p6");
        break;
      case "jack":
        playerCount -= 1;
        console.log("pj");
        break;
      case "queen":
        playerCount -= 1;
        console.log("pq");
        break;
      case "king":
        playerCount -= 1;
        console.log("pk");
        break;
      case "ace":
        playerCount -= 1;
        console.log("pa");
        break;
        default:
        playerCount += 0;
        
    }
  }
  //count = Count + Count
  setText("countLbl", "Count: " + (playerCount + dealerCount));
}

4

1 回答 1

-1

dealerCards=[{name:'ace'},{name:'two'}]
playerCards=[{name:'three'},{name:'three'}]
updateCount();

//Update the count
function updateCount(){
  var dc;
  var pc;
  var dealerCount = 0;
  var playerCount = 0;
  
  for(var d = 0; d < dealerCards.length; d += 1){
    
    dc = dealerCards[d].name; //String
    console.log("DC: " + dc);
    switch(dc.valueOf()){
      case "two":
        dealerCount += 1;
        console.log("d2");
        break;
      case "three":
        dealerCount += 1;
        console.log("d3");
        break;
      case "four":
        dealerCount += 1;
        console.log("d4");
        break;
      case "five":
        dealerCount += 1;
        console.log("d5");
        break;
      case "six":
        dealerCount += 1;
        console.log("d6");
        break;
      case "jack":
        dealerCount -= 1;
        console.log("dj");
        break;
      case "queen":
        dealerCount -= 1;
        console.log("dq");
        break;
      case "king":
        dealerCount -= 1;
        console.log("dk");
        break;
      case "ace":
        dealerCount -= 1;
        console.log("da");
        break;
      default:
        dealerCount += 0;
        
    }
  }
  
  for(var p = 0; p < playerCards.length; p += 1){
    pc = playerCards[p].name; //String
    console.log("PC: " + pc);
    switch(pc.valueOf()){
      case "two":
        playerCount += 1;
        console.log("p2");
        break;
      case "three":
        playerCount += 1;
        console.log("p3");
        break;
      case "four":
        playerCount += 1;
        console.log("p4");
        break;
      case "five":
        playerCount += 1;
        console.log("p5");
        break;
      case "six":
        playerCount += 1;
        console.log("p6");
        break;
      case "jack":
        playerCount -= 1;
        console.log("pj");
        break;
      case "queen":
        playerCount -= 1;
        console.log("pq");
        break;
      case "king":
        playerCount -= 1;
        console.log("pk");
        break;
      case "ace":
        playerCount -= 1;
        console.log("pa");
        break;
      default:
        playerCount += 0;
        
    }
  }
  //count = Count + Count
 // setText("countLbl", "Count: " + (playerCount + dealerCount));
}

于 2018-03-30T15:19:19.117 回答