2017-06-02 54 views
1

我有一個家庭作業的任務,在那裏我創建一個紙牌包,作爲獎金,我隨機化他們。我們應該對它們進行隨機化處理,以便連續三張牌沒有相同的花色。我使用Fisher-Yates方法對他們進行了隨機化。JavaScript洗牌平臺,所以沒有三個相同的套裝

它大部分時間都在使用,但仍有可能三張卡片連續有相同的花色。

我該如何運行一個循環並掃描連續的三張卡片,看看它們是否是同一套服裝,這樣如果這是真的,我可以再次運行我的隨機化功能?

這裏是我的代碼:

var suits = ["Hearts", "Diamonds", "Spades", "Clovers"]; 
var faces = ["Ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "Kings", "Joker"] 
var a = " of " 
var deck = []; 
var temp = null; 

//Looping through arrays, combining faces to each suit 
//Faces is length-1 to not insert all jokers 
for (i = 0; i < suits.length; i++) { 
    for (j = 0; j < faces.length-1; j++) { 
    //Looping through each of the suits 
    deck.push(faces[j] + a + suits[i]) 
    } 
} 
//Inserting 1 joker to the deck 
deck.push(faces[13]) 
console.log(deck) 

//Shuffle the deck, using Fisher-Yates shuffle 
//Researched from Frank Mitchell: https://www.frankmitchell.org/2015/01/fisher-yates/ 

for (k = deck.length - 1; k > 0; k -= 1) { 
    m = Math.floor(Math.random() * (k + 1)) 
    temp = deck[k] 
    deck[k] = deck[m] 
    deck[m] = temp 
} 

console.log("^^^^^^^^^^^^^^^^^^^^^") 
console.log("---Shuffling Deck----") 
console.log("vvvvvvvvvvvvvvvvvvvvv") 
console.log(deck) 

註釋:那麼最好的,我可以猜到,我知道這將需要更多的過程是for循環每個花色類型做一個(運行此搜索環路4次),然後使用indexOf(適合[i]),但那麼我怎樣才能將它與甲板[i + 1]和[i + 2]進行比較?我如何創建我正在尋找的套裝和套牌中的套裝的比較?

此外,卡元素命名的數組:「鑽石王牌」,「黑桃5」

回答

2

您可能會發現更容易表示每個卡作爲對象{Suit:'Hearts', Face:'Ace'}。這可以讓你輕鬆確定哪一個卡適合使用字符串操作。如果你很難用字符串來表示這些卡片,那麼你可以使用正則表達式來提取of之後的單詞。

在尋找3件同樣的服裝方面,你不需要單獨尋找每件西服。一次只看一張牌,然後看看它的套裝是否與i-1i-2相符(當然要注意第一張牌)。

+0

所以我正在處理一個要求他們作爲字符串的要求。如何在每個''之後提取子字符串? –

+0

@ as.beaulieu,我想「如何提取子字符串」在上面得到了回答。 (使用正則表達式。)如果遇到問題,您應該試試並更具體地詢問您的難點,可能是單獨的更加重點的問題。 –

+0

爲什麼不處理數據,就好像對象,而不是字符串,然後由於字符串的要求,最後只是將它們作爲字符串返回? – David