2017-09-02 74 views
1

我正在尝试构建一副扑克牌并删除其中的一张,并将它们各自的名称,套装和值属性作为单独的元素返回。我创建了一个卡片对象,每个卡片对象都有一个“名称”,“套装”和“值”,并将其中的52个放入“Deck”数组中。我想从甲板阵列中抽出一张“卡牌”,并将其各自的属性用于纸牌游戏,但我不确定如何正确执行此操作。下面是我试图做到这一点的一个例子。返回数组的属性

//CARD OBJECT 
function card(name, suit, value) { 
    this.name = name; 
    this.suit = suit; 
    this.value = value; 
} 

//NEW DECK ARRAY 
var cardsInDeck = new Array(); 

//INDIVIDUAL CARD OBJECTS IN THE DECK ARRAY 
var aceSpades = new card("Ace", "Spades", 1); 
cardsInDeck.push(aceSpades); 
var twoSpades = new card("Two", "Spades", 2); 
cardsInDeck.push(twoSpades); 
var threeSpades = new card("Three", "Spades", 3); 
cardsInDeck.push(threeSpades); 
var fourSpades = new card("Four", "Spades", 4); 
cardsInDeck.push(fourSpades); 
var fiveSpades = new card("Five", "Spades", 5); 
//REPEATED FOR ALL 52 CARDS 

//SHUFFLE CARDS 
var shuffle = function() { 

var theLength = cardsInDeck.length - 1; 
var toSwap; 
var tempCard; 

for (var i = theLength; i > 0; i--) { 
    toSwap = Math.floor(Math.random() * i); 
    tempCard = cardsInDeck[i]; 
    cardsInDeck[i] = cardsInDeck[toSwap]; 
    cardsInDeck[toSwap] = tempCard; 
    } 
} 

shuffle(); 

//DRAW ONE CARD 
var drawOne = function() { 
var card = cardsInDeck.slice(cardsInDeck.length - 1); 
cardsInDeck.length--; 
return card; 
} 

console.log(drawOne()); 

我可以得到一个“卡”来绘制,但它返回一个数组(1)具有每张卡的名称,西装和价值......但我不知道如何让那些属性分开并用它们来构建游戏。我相信这很简单,我忽略了一些小的东西,但是我对编程颇为陌生,并没有找到特别适用于这个问题的解决方案。

任何援助将不胜感激。

+1

这是一种令人困惑的措辞,但也许你正在寻找的是数组映射运算符? 副本评论:我希望你实际上并没有用手写出52个相对顺序的对象,而不是编写一些循环...... – bryan60

+0

你只是想从函数中返回card [0]吗? ['slice'返回一个数组,所以如果你需要卡对象,你需要抓住第一个元素](https://jsfiddle.net/21y1crqe/)。 – Andy

+0

对不起,我们希望从“Deck”中随机抽取一张“卡片”,并使用这些卡片的值创建百家乐游戏。我只是坚持如何才能获得每张卡的“价值”并将其分配给一个变量。 – BaracudaBill

回答

0

使用var card = cardsInDeck.pop();绘制卡。而且你不能使用cardsInDeck.length--;,相反,流行将删除最后一张牌,因此长度会自动减少,以及较少和更好的代码,只需使用而无需创建一个变量回归,所以你的功能应该是:

var drawOne = function() { 
    return cardsInDeck.pop(); 
} 

而且,代替手动创建所有的卡,用这个少和更好的代码:

var cardsInDeck = []; 
var suits = ["Spades","Hearts","Clubs","Diamonds"]; 
var names = ["One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Jack","Queen","King"]; 
var values = [1,2,3,4,5,6,7,8,9,10,11,12,13]; 
var card; 

for (var i=0; i<suits.length; i++) { 
    for (var j=0; j<names.length; j++) { 
     cardsInDeck.push(new card(names[j], suits[i], values[j])); 
    } 
} 

并获得抽取卡的价值,名称或西装,用途:

var card = drawOne(); 
var cardValue = card.value; 
var cardName = card.name; 
var cardSuit = card.suit; 
+0

是的,这样做效果更好,谢谢! – BaracudaBill

+0

现在,你会如何推荐我使用“drawOne”函数检索已从卡组中拉出的卡片的值?我想将每个拉出的“牌”的“值”分配给一个变量,以便我可以在百家乐纸牌游戏中使用它。 – BaracudaBill

+0

@BaracudaBill我在编辑中解释。 –

0

如果我给你正确的,你可以搜索这样的一个位置:

//CARD OBJECT 
function card(name, suit, value) { 
    this.name = name 
    this.suit = suit 
    this.value = value 
} 

//NEW DECK ARRAY 
var cardsInDeck = new Array() 

//INDIVIDUAL CARD OBJECTS IN THE DECK ARRAY 
var aceSpades = new card('Ace', 'Spades', 1) 
cardsInDeck.push(aceSpades) 
var twoSpades = new card('Two', 'Spades', 2) 
cardsInDeck.push(twoSpades) 
var threeSpades = new card('Three', 'Spades', 3) 
cardsInDeck.push(threeSpades) 
var fourSpades = new card('Four', 'Spades', 4) 
cardsInDeck.push(fourSpades) 
var fiveSpades = new card('Five', 'Spades', 5) 
cardsInDeck.push(fiveSpades) 
//REPEATED FOR ALL 52 CARDS 

//DRAW ONE CARD 
var drawOne = function() { 
    if(cardsInDeck.length > 0){ 
    return cardsInDeck.splice(Math.random() * (cardsInDeck.length-1),1)[0] 
    } 
} 

// EXAMPLE EXECUTION 
console.log(drawOne()) 
console.log(drawOne()) 
console.log(drawOne()) 
console.log(drawOne()) 
console.log(drawOne()) 
console.log(cardsInDeck.length) 

一个例子执行将是这样的:

enter image description here