使用javascript制作二十一点程序,不能将牌组(obJ)的顶牌(obj)拼接到手中

时间:2016-12-22 09:04:06

标签: javascript arrays object

所以我创建一个卡片对象并将卡片对象放入其中并将其洗牌,现在我试图以某种方式将卡片中的第一个卡片对象拼接成player.hand或dealer.hand,我该怎么做呢?

(这不起作用)

player.hand = deck.splice(0); 
  

TypeError:deck.splice不是函数

对于noob问题抱歉

var cardname = ["Ace", "two", "three", "four", "five", "six", "sevem", "eight", "nine", "ten", "jack", "queen", "king"]
var suit = ["spades", "hearts", "clubs", "diamonds"]
var value = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
var deck = {};
var player = {
  hand: null
}
var dealer = {
  hand: null 
}

function card(cardname, suit, value) {
  this.cardname = cardname;
  this.suit = suit;
  this.value = value;
}

function createdeck(){

    cardindeck = 0;
for(i=0;  i<cardname.length;  i++){
    for(k=0;  k<suit.length;  k++){
        deck[cardindeck] = new card(cardname[i], suit[k], value[i]);
        cardindeck++;
}
}
}

function shuffledeck(deck) {
  var i = 0;
  var j = 0;
  var temp = null;


  for (i=Object.keys(deck).length-1; i>0; i--) {
    j = Math.floor(Math.random() * (Object.keys(deck).length));
    temp = deck[i];
    deck[i] = deck[j];
    deck[j] = temp;
  }
}


function dealplayer(deck, player) {
player.hand = deck.splice(0);
}

function dealdealer(deck, dealer) {
 player.hand = deck.splice(0);
 }
}

1 个答案:

答案 0 :(得分:2)

您可以使用数组而不是对象。

var deck = [];
//         ^^

然后,您可以使用带有两个参数的原生Array#splice来设置一个项目。

selectedCard = deck.splice(0, 1)[0];
//                            ^ ^^^
//                     count /   \\\ get the first element of the spliced array

createdeck中,您可以省略索引计数器并使用Array#push

function createdeck() {
    var i, k;
    for (i = 0;  i < cardname.length; i++) {
        for (k = 0; k < suit.length; k++) {
            deck.push(new card(cardname[i], suit[k], value[i]));
        }
    }
}

shuffledeck替换

Object.keys(deck).length

使用数组的长度属性

deck.length

完整代码并进行一些细微更改:

function Card(cardname, suit, value) {
    this.cardname = cardname;
    this.suit = suit;
    this.value = value;
}

function createDeck(deck) {
    var i, k;
    deck.length = 0;
    for (i = 0; i < cardname.length; i++) {
        for (k = 0; k < suit.length; k++) {
            deck.push(new Card(cardname[i], suit[k], value[i]));
        }
    }
}

function shuffleDeck(deck) {
    var i = deck.length,
        j,
        temp,
        length = deck.length;

    while (i--) {
        j = Math.floor(Math.random() * length);
        temp = deck[i];
        deck[i] = deck[j];
        deck[j] = temp;
    }
}

function dealPlayer(deck, player) {
    player.hand.push(deck.splice(0, 1)[0]);
}

function dealDealer(deck, dealer) {
    dealer.hand.push(deck.splice(0, 1)[0]);
}

var cardname = ["Ace", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "jack", "queen", "king"],
    suit = ["spades", "hearts", "clubs", "diamonds"],
    value = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10],
    deck = [],
    player = { hand: [] },
    dealer = { hand: [] };

createDeck(deck);
console.log('deck', deck);
shuffleDeck(deck);
console.log('deck', deck);
dealPlayer(deck, player)
console.log('player', player);
dealDealer(deck, dealer);
console.log('dealer', dealer);
.as-console-wrapper { max-height: 100% !important; top: 0; }