Можете ли вы вызвать переменную, а не ее значение, из массива? - PullRequest
0 голосов
/ 10 января 2012

Работа над приложением JS BlackJack и столкновение с несколькими проблемами. У меня есть колода карт (массив карт), и у моих карт есть определенные значения. Я случайным образом выбираю карты для каждого игрока, и он добавляет и отображает значение карты, но я хочу иметь возможность отображать IMG карты для каждого. Итак, я не могу различить ч / б лицевые карты.

var j = 10;
var q = 10;
var k = 10;
var cards = [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, j, j, j, j, q, q, q, q, k, k, k, k, a, a, a, a];
function processIt() {
    //player's hand
    var player = document.getElementById("player");
    var card1 = (Math.floor(Math.random() * cards.length));
    var card2 = (Math.floor(Math.random() * cards.length));
    totalPlayer = cards[card1] + cards[card2];
    cardDisplayP = cards[card1] + " " + cards[card2];
    player.innerHTML = cardDisplayP + "<br />" + "Total: " + totalPlayer;

Итак, есть ли способ вызвать переменную, а не ее значение из массива?
т.е. я хочу:

show var.cards[46] = k;
cards[46] = 10;

1 Ответ

1 голос
/ 10 января 2012

Вместо того, чтобы полагаться на положение в массиве, вы должны создавать конструкторы или объекты, содержащие данные о ваших картах. Вот пример с конструкторами:

var Suit = {
    Hearts: 0,
    Diamonds: 1,
    Clubs: 2,
    Spades: 3,
    '0': '♥',
    '1': '♦',
    '2': '♣',
    '3': '♠'
};

if(Object.freeze) {
    Object.freeze(Suit);
}

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

Card.faceValue = function(value) {
    if(value > 1 && value < 11) {
        return value.toString();
    } else if(value === 1) {
        return 'A';
    } else {
        return ['J', 'Q', 'K'][value % 10 - 1];
    }
};

Card.prototype.toString = function() {
    return Card.faceValue(this.value) + Suit[this.suit];
};

function Deck() {
    for(var value = 1; value <= 13; value++) {
        for(var suit = 0; suit < 4; suit++) {
            this.push(new Card(suit, value));
        }
    }
}

Deck.prototype = [];
Deck.prototype.constructor = Deck;
Deck.prototype.shuffle = function() {
    this.sort(function() {
        return Math.random() - 0.5;
    });
};

var d = new Deck();
d.shuffle();
document.write(d);

И Deck наследуются от массива, так что вы можете просто использовать .pop(), чтобы получить верхнюю карту.

Вот демо.

...