2017-01-23 58 views
-5

我正在製作一款紙牌遊戲,我首先將所有紙牌放入一個數組1-52的元組數組中。但是通過使用隨機數字發生器來拾取卡片,從卡片中移除卡片變得困難,因爲我不能從我的隨機數字發生器中專門移除該數字。任何幫助表示讚賞。我正在嘗試製作紙牌遊戲。我將如何製作一副紙牌然後處理它們?

func createDeck(){ 

    deck.append((name: "ace1", number: 1)) 
    deck.append((name: "ace2", number: 2)) 
    deck.append((name: "ace3", number: 3)) 
    deck.append((name: "ace4", number: 4)) 
    deck.append((name: "two1", number: 5)) 
    deck.append((name: "two2", number: 6)) 
    deck.append((name: "two3", number: 7)) 
    deck.append((name: "two4", number: 8)) 
    deck.append((name: "three1", number: 9)) 
    deck.append((name: "three2", number: 10)) 
    deck.append((name: "three3", number: 11)) 
    deck.append((name: "three4", number: 12)) 
    deck.append((name: "four1", number: 13)) 
    deck.append((name: "four2", number: 14)) 
    deck.append((name: "four3", number: 15)) 
    deck.append((name: "four4", number: 16)) 
    deck.append((name: "five1", number: 17)) 
    deck.append((name: "five2", number: 18)) 
    deck.append((name: "five3", number: 19)) 
    deck.append((name: "five4", number: 20)) 
    deck.append((name: "six1", number: 21)) 
    deck.append((name: "six2", number: 22)) 
    deck.append((name: "six3", number: 23)) 
    deck.append((name: "six4", number: 24)) 
    deck.append((name: "seven1", number: 25)) 
    deck.append((name: "seven2", number: 26)) 
    deck.append((name: "seven3", number: 27)) 
    deck.append((name: "seven4", number: 28)) 
    deck.append((name: "eight1", number: 29)) 
    deck.append((name: "eight2", number: 30)) 
    deck.append((name: "eight3", number: 31)) 
    deck.append((name: "eight4", number: 32)) 
    deck.append((name: "nine1", number: 33)) 
    deck.append((name: "nine2", number: 34)) 
    deck.append((name: "nine3", number: 35)) 
    deck.append((name: "nine4", number: 36)) 
    deck.append((name: "ten1", number: 37)) 
    deck.append((name: "ten2", number: 38)) 
    deck.append((name: "ten3", number: 39)) 
    deck.append((name: "ten4", number: 40)) 
    deck.append((name: "jack1", number: 41)) 
    deck.append((name: "jack2", number: 42)) 
    deck.append((name: "jack3", number: 43)) 
    deck.append((name: "jack4", number: 44)) 
    deck.append((name: "queen1", number: 45)) 
    deck.append((name: "queen2", number: 46)) 
    deck.append((name: "queen3", number: 47)) 
    deck.append((name: "queen4", number: 48)) 
    deck.append((name: "king1", number: 49)) 
    deck.append((name: "king2", number: 50)) 
    deck.append((name: "king3", number: 51)) 
    deck.append((name: "king4", number: 52)) 


} 
func randomNumber(){ 
    random = arc4random_uniform(52) + 0; 
    print(random) 
} 
func deal(){ 

    var aces = Set<Int>(arrayLiteral:1, 2, 3,4) 
    var twos = Set<Int>(arrayLiteral:5, 6, 7,8) 
    var threes = Set<Int>(arrayLiteral:9, 10, 11,12) 
    var fours = Set<Int>(arrayLiteral:13, 14, 15,16) 
    var fives = Set<Int>(arrayLiteral:17, 18,19,20) 
    var sixes = Set<Int>(arrayLiteral:21, 22, 23,24) 
    var sevens = Set<Int>(arrayLiteral:25, 26, 27,28) 
    var eights = Set<Int>(arrayLiteral:29, 30, 31,32) 
    var nines = Set<Int>(arrayLiteral:33, 34, 35,36) 
    var tens = Set<Int>(arrayLiteral:37, 38, 39,40) 
    var jacks = Set<Int>(arrayLiteral:41, 42, 43,44) 
    var queens = Set<Int>(arrayLiteral:45, 46, 47,48) 
    var kings = Set<Int>(arrayLiteral:49, 50, 51,52) 



    if aces.contains(Int(random)){ 
     playern1 = Int(random) 
     aces.removeFirst() 
    } 
    if twos.contains(Int(random)){ 
     twos.removeFirst() 

...

+0

它是如何 「變難」? _picking_或_removing_卡與製作甲板_有什麼關係?顯示你的代碼並解釋你想要什麼以及實際發生了什麼。 – matt

+0

好的,你去 – Johnd

+0

任何建議將有所幫助 – Johnd

回答

0

您可能要重新設計你如何定義一個卡:

enum Suit: String { 
    case heart, diamond, club, spade 
} 
enum Rank: Int { 
    case _1 = 1, _2 = 2, _3 = 3, _4 = 4, _5 = 5, _6 = 6, _7 = 7, _8 = 8, _9 = 9, _10 = 10 
    case jack = 11, queen = 12, king = 13 
} 
struct Card { 
    let suit: Suit 
    let rank: Rank 
} 

(或另一種可能是enum Card {case card(suit: Suit, rank: Rank)}

然後定義您的甲板上:

var deck = [Card(suit: .heart, rank: ._1), 
      Card(suit: .heart, rank: ._2), 
      Card(suit: .heart, rank: ._3), 
      Card(suit: .heart, rank: ._4), 
      Card(suit: .heart, rank: ._5), 
      Card(suit: .heart, rank: ._6), 
      // ... 
] 

然後抽取一張牌從甲板:

func pickRandomCardFromDeck() -> Card { 
    return deck.remove(at: Int(arc4random_uniform(UInt32(deck.count)))) 
} 

[編輯發表評論]

要檢查對:

extension Card { 
    func isPair(with card: Card) -> Bool { 
     return rank == card.rank 
    } 
} 
+0

我將如何能夠使用我選擇的卡。例如,如果我想分辨兩張牌是否有一對? – Johnd

+0

我在答案中添加了對檢查。 @Johnd –

0

保持的仍然可用,而不是已經挑卡的數組。爲了討論的目的,我將這稱爲「交易陣列」(這必須單獨維護甲板陣列!它可以作爲甲板陣列的可變副本開始)。

當您隨機選擇/處理一張卡時,將其從交易排列中移除。

你的隨機數發生器應該選擇一個介於0和剩下在交易數組中的數量之間的數字 - 不是零到五十二之間的數字。

(假定該交易數組不爲空 - 之前檢查此隨機選擇從處理陣列的卡。)

當選擇從處理陣列的卡使用隨機數作爲一個索引到陣列(不是你創建的卡號,這對於從交易數組中隨機選擇卡沒有任何實際用處)。 (請注意,我在這裏沒有包含任何示例代碼,因爲我不清楚你的代碼的目的是什麼,如果我試圖在這裏發佈代碼,那麼我很可能會錯誤地解釋你的代碼代碼並因此發佈不正確的代碼)。