2017-01-23 4 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

ok there you go – 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

поддерживать массив карт, которые все еще доступны, и уже не захватывается. Для этой дискуссии я назову это «deal array» (это должно поддерживаться отдельно в массиве колоды! Он может начинаться как изменяемая копия массива колоды).

Когда вы случайно выбираете/делаете карточку, удалите ее из массива сделок.

Ваш генератор случайных чисел должен выбирать число от нуля до количества элементов, оставшихся в массиве сделок, - НЕ от нуля до пятидесяти двух.

(Предполагается, что массив сделки не пусто - это проверить, прежде чем случайный выбор карты из массива сделки.)

При выборе карты из массива сделки использовать случайное число в качестве индекса массива (а не как номера карт, которые вы создали, которые не имеют никакого реального использования для выбора карт из массива сделок случайным образом).

(Обратите внимание, что здесь я не включаю какой-либо пример кода, потому что мне непонятно, для чего предназначена часть вашего кода. Если бы я попытался опубликовать здесь код, скорее всего, я бы неправильно интерпретировал ваш код и, следовательно, отправить неверный код).