2017-09-02 111 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